手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

passwd (1)

名称

passwd - 更改登录口令和口令属性

用法概要

passwd [-r files | -r ldap | 
-r nis] [name]
passwd [-r files] [-egh] [
name]
passwd [-r files] -s [
-a]
passwd [-r files] -s [
name]
passwd [-r files] [-d | 
-l | -u | -N] [-f] [
-n min] 
     [-w warn] [-x 
max] name
passwd -r ldap [-egh] [
name]
passwd [-r ldap ] -s [
-a]
passwd [-r ldap ] -s [
name]
passwd -r ldap [-d | -l | -u | -N
] [-f] [-n min] 
     [-w warn] [-x 
max] name
passwd -r nis [-egh] [
name]

描述

passwd 命令可以更改口令,或者列出与用户的登录 name 关联的口令属性。此外,授权用户能够使用 passwd 安装或更改与任何登录 name 相关联的口令和属性。

用于更改口令时,passwd 会提示每位用户输入他们的旧口令(如果有)。然后,它会两次提示用户输入新口令。输入旧口令时,passwd 会检查并确定旧口令是否已到期。如果生命期未满,passwd 会终止;请参见 pwconv(1M) 和 shadow(4) 了解其他信息。

pwconv 命令会使用来自 /etc/passwd 的信息创建和更新 /etc/shadow。pwconv 依赖于 /etc/passwd 口令字段中的特殊值 x。值 x 表示用户的口令已在 /etc/shadow 中,并且不应当修改。

如果生命期已满,则会执行检查,以确保新口令符合构造要求。在第二次输入新口令时,系统会比较新口令的两个副本。如果两个副本不同,将再次提示输入新口令(此循环最多重复执行两次)。

构造的口令必须符合以下要求:

  • 每个口令必须包含 PASSLENGTH 个字符,其中 PASSLENGTH 在 /etc/default/passwd 中定义,并且设置为 6。将 PASSLENGTH 设置为超过八个字符时,需要为 policy.conf(4) 配置支持超过八个字符的算法。

  • 每个口令都必须满足 /etc/default/passwd 中指定的已配置复杂性约束。

  • 每个口令都不得是 /etc/default/passwd 中指定的已配置字典的成员。

  • 对于支持口令历史记录检查的名称服务中的帐户,如果定义了先前的口令历史记录,则新口令不得包含在先前的口令历史记录中。

如果满足所有要求,在缺省情况下,passwd 命令会查询 /etc/nsswitch.conf,以确定在哪个系统信息库中执行口令更新。它会搜索 passwd 和 passwd_compat 条目。与这些条目相关联的源(系统信息库)会得到更新。然而,支持的口令更新配置有限,并且必须遵循以下规则:

  • passwd 行必须有 1 个、2 个或 3 个条目

  • 第一个 passwd 条目必须为 files

  • 在口令更新过程中,将忽略和跳过不是 files、nis、ldap 和 compat 的passwd 条目。

  • 有必要使用特定于源的工具更新此类数据库中的口令。

当用户将口令存储在一个名称服务和一个本地 files 条目中时,passwd 命令会同时更新两者。名称服务和本地 files 条目可以包含不同的口令。使用 passwd –r 可更改特定口令系统信息库。

passwd 命令不会提示授权用户输入旧口令。

如果 LDAP 起作用,任何本地 LDAP 客户端系统上的授权用户都能更改任何口令,并且不会收到输入旧 LDAP 口令的提示。

在缺省情况下,即使有权更改其他用户口令的用户也必须遵循已配置的口令策略。请参见 pam_authtok_check(5)。

正常情况下,输入无参数的 passwd 可以更改当前用户的口令。当用户登录并且调用 su(1M) 成为角色或另一个用户时,passwd 将更改原始用户的口令,而不是角色或新用户的口令。

–s 参数仅适用于授权用户。

其显示格式为:

name status mm/dd/yy min max warn

或者(如果没有口令生命期信息):

name status

其中

name

用户的登录 ID。

status

name 的口令状态。

status 字段可以采用以下值:

LK

帐户已锁定。运行了 passwd -l,或者由于验证失败次数达到了配置的最大允许次数而自动锁定了帐户。请参见 policy.conf(4) 和 user_attr(4) 以及“安全性”部分。

NL

这是一个非 UNIX 验证帐户。已经运行了 passwd –N。请参见“安全”部分。系统或每用户策略为 LOCK_AFTER_RETRIES=YES 时,不会自动锁定处于此状态的帐户。

NP

此帐户没有口令,因此,无需验证即可打开。

PS

此帐户有口令。

UN

口令字段中的数据未知。它不是一个可识别的散列口令或上述各项中的任何一个。请参见 crypt(3C) 了解有效的口令散列。

UP

管理员尚未激活帐户,因此无法使用。请参见“安全”部分。

mm/dd/yy

上次更改 name 的口令的日期。所有口令生命期日期都使用格林威治标准时间(世界标准时间)确定,因此最多可以与其他时区相差一天。

min

为 name 更改口令需要间隔的最少天数。在 /etc/default/passwd 中有 MINWEEKS,并且设置为 NULL。

max

name 口令的最大有效天数。在 /etc/default/passwd 中有 MAXWEEKS,并且设置为 NULL。

warn

口令到期之前相对于 max 的天数,达到此天数后 name 将收到警告消息。

安全性

passwd 使用 pam(3PAM) 更改口令。它通过服务名称 passwd 调用 PAM,并使用服务模块类型 auth 进行验证,使用口令更改口令。

锁定帐户(–l 选项)可以禁止使用帐户进行任何登录或延迟执行操作(例如 at(1)、batch(1) 或 cron(1M))。–N 选项可以用于禁止基于口令的登录,同时继续允许通过非 UNIX 验证方法进行延迟执行或登录。

从来没有口令的已锁定帐户不能将其状态直接更改为活动口令。请参见 –d 选项。对于锁定之前有口令的锁定帐户,更改其口令时,无需解锁帐户即可更改口令。请参见用于解锁帐户的 –u 选项。授权管理员可以激活处于尚未激活状态的帐户,具体方法是为该帐户提供口令或运行 passwd – N,但管理员只能出于非 UNIX 验证或延迟执行的目的激活该帐户。

帐户在不活动之后会被锁定。要解锁此类帐户,请使用 –u 或 –f 选项。使用 –u 无法更改口令;使用 –f 可以强制更改口令。

选项

支持以下选项:

–a

显示所有条目的口令属性。只能与 –s 选项一起使用。不得提供 name。对于 files 和 ldap 系统信息库,这仅限于授权用户。

–e

更改登录 shell。对于 files 系统信息库,这仅适用于超级用户。普通用户可以更改 ldap、nis 或 nisplus 系统信息库。选择 shell 时会受到 getusershell(3C) 的要求的限制。如果用户当前具有的 shell 是 getusershell 所不允许的,则只有 root 用户可以更改此 shell。

–g

更改 gecos(指针)信息。对于 files 系统信息库,这仅适用于超级用户。普通用户可以更改 ldap、nis 或 nisplus 系统信息库。

–h

更改起始目录。

–r

指定向其应用操作的系统信息库。支持的系统信息库包括 files、ldap 或 nis。

–s name

显示登录 name 的口令属性。对于 files 和 ldap 系统信息库,这仅适用于授权用户。它完全不适用于 nis 系统信息库,因为此系统信息库不支持口令生命期。

此选项(也只有此选项)的输出为 "Committed"(已确定)并且可解析。格式为 username 后跟空格,然后跟以下代码之一。

将来有可能添加新代码,因此,解析此命令的代码必须能够灵活应对未知代码。所有现有代码均为两个字符,但将来未必始终如此。

以下为当前状态代码:

LK

帐户已锁定。运行了 passwd -l,或者由于验证失败次数达到了配置的最大允许次数而自动锁定了帐户。请参见 policy.conf(4) 和 user_attr(4) 以及“安全性”部分。

NL

这是一个非 UNIX 验证帐户。已经运行了 passwd –N。请参见“安全”部分。系统或每用户策略为 LOCK_AFTER_RETRIES=YES 时,不会自动锁定处于此状态的帐户。

NP

帐户没有口令。运行了 passwd -d。

PS

帐户可能有一个有效口令。

UN

口令字段中的数据未知。它不是一个可识别的散列口令或上述各项中的任何一个。请参见 crypt(3C) 了解有效的口令散列。

UP

管理员尚未激活帐户,因此无法使用。请参见“安全”部分。

授权用户选项

管理员需要获得 "User Security"(用户安全)配置文件才能锁定和解锁现有帐户。此配置文件也可以提供激活新建帐户、设置口令生命期选项和查看口令属性的功能。下表列出了执行各种操作所需的授权。

只有授权用户才能使用以下选项:

–d

删除 name 的口令并解锁帐户。登录 name 不会收到输入口令的提示。仅适用于 files 和 ldap 系统信息库。

如果配置了 login(1) 选项 PASSREQ=YES,帐户将无法登录。PASSREQ=YES 为缺省设置。

–f

通过使 name 的口令到期,强制用户在下一次登录时更改口令。解锁由于不活动而遭到锁定的帐户时,此选项十分有用。

–l

锁定 name 的帐户,除非已经锁定。请参见用于解锁帐户的 –u 选项。标记为非 UNIX 验证或延迟执行的帐户只能锁定并会在解锁时返回同一状态。

–N

使 name 的口令条目成为一个无法用于通过 UNIX 验证进行登录的值,但不会锁定该帐户。请参见用于删除此值的 –d 选项或者用于锁定帐户的 –l 选项。

–n min

设置 name 的最小值字段。min 字段包含更改 name 的口令需间隔的最少天数。如果 min 大于 max,用户将无法更改口令。此选项应始终与 –x 选项配合使用,除非 max 设置为 −1(禁用生命期)。在这种情况下,min 无需设置。

–u

解锁 name 条目的已锁定口令。解锁由于登录尝试失败而遭到锁定或者通过管理方式(使用 –l 选项)锁定的帐户时,–u 选项十分有用。标记为非 UNIX 验证帐户 (passwd –N) 的帐户会返回解锁时的状态。

–w warn

为 name 设置警告字段。warn 字段包含口令到期之前的天数,达到此天数时用户将收到警告消息。如果禁用口令生命期,此选项无效。

–x max

设置 name 的最大值字段。max 字段包含 name 的口令的有效天数。如果 max 设置为 −1,会立即禁用 name 的生命期。

操作数

支持下列操作数:

name

用户登录名。

环境变量

如果任一 LC_* 变量(即 LC_CTYPE、 LC_MESSAGES、LC_TIME、LC_COLLATE、LC_NUMERIC 和 LC_MONETARY(请参见 environ(5)))未在此环境中进行设置,则 passwd 针对每个对应语言环境类别的操作行为将由 LANG 环境变量的值确定。如果设置了 LC_ALL,则会使用其内容覆盖 LANG 和其他 LC_* 变量。如果以上变量都未在此环境中进行设置,则 C(美国样式)语言环境将确定 passwd 的行为。

LC_CTYPE

确定 passwd 如何处理字符。当为 LC_CTYPE 设置了有效值时,passwd 可以显示并处理包含该语言环境下有效字符的文本和文件名。passwd 可以显示并处理扩展 Unix 编码 (EUC) 字符,其中任意单个字符的宽度可以为 1 个、2 个或 3 个字节。passwd 还可以处理宽度为 1 个、2 个或更多个列的 EUC 字符。在 C 语言环境中,只有 ISO 8859-1 中的字符有效。

LC_MESSAGES

确定如何显示诊断和信息性消息。这包括消息的语言和风格,以及肯定性和否定性响应的正确形式。在 C 语言环境中,消息将以程序自身中的缺省格式显示(大多数情况下,为美式英文)。

退出状态

passwd 命令退出时会返回以下值之一:

0

成功。

1

权限被拒绝。

2

无效的选项组合。

3

意外失败。口令文件未更改。

4

意外失败。口令文件缺失。

5

口令文件正忙。请稍后重试。

6

无效的选项参数。

7

生命期选项已禁用。

8

无内存。

9

系统错误。

10

帐户已过期。

11

口令信息未更改。

文件

/etc/default/passwd

可以在 /etc/default/passwd 中为以下标志设置缺省值。例如:MAXWEEKS=26

DICTIONDBDIR

生成的字典数据库所在的目录。缺省值为 /var/passwd。

如果未指定 DICTIONLIST 和 DICTIONDBDIR,系统将不会执行字典检查。

DICTIONLIST

DICTIONLIST 可以包含以逗号分隔的字典文件列表,例如 DICTIONLIST=file1, file2, file3。每个字典文件都包含多行,每行由一个词和一个 NEWLINE 字符组成。您必须指定全路径名。来自这些文件的词会合并为一个数据库,用于确定口令是否基于字典中的词。

可以在 DICTIONLIST 中列出拼写检查字典(类似于 /usr/share/lib/dict/words),但需要预先进行处理。请参见下文的 DICTIONMINWORDLENGTH 了解更简便的方法。

如果未指定 DICTIONLIST 和 DICTIONDBDIR,系统将不会执行字典检查。

要预先构建字典数据库,请参见 mkpwdict(1M)。

DICTIONMINWORDLENGTH

DICTIONMINWORDLENGTH 可以包含一个数字,用于指定 DICTIONLIST 中源文件的最小词长。小于指定长度的词将在口令字典中省略。

允许的最小值为 2 [个字母];缺省值为 3 [个字母]。

HISTORY

为用户所保存的先前口令历史记录的最大数量。将 HISTORY 值设为零 (0) 或者删除标志都会导致下一次任何用户更改口令时放弃所有用户的先前口令历史记录。缺省情况下不会定义 HISTORY 标志。最大值为 26。目前,仅针对在 files 名称服务(局部 passwd(4)/shadow(4))中定义的用户帐户强制实施此功能。

MAXREPEATS

允许的连续重复字符的最大个数。如果未设置 MAXREPEATS,或者将其设为零 (0),则缺省情况下不会进行检查。

MAXWEEKS

口令的最长有效期。

MINALPHA

必须包含的最少字母字符个数。如果未设置 MINALPHA,则缺省值为 2。

MINDIFF

旧口令和新口令之间必须具有的最小差异。如果未设置 MINDIFF,则缺省值为 3。

MINDIGIT

必须包含的最少数字个数。如果未设置 MINDIGIT,或者将其设为零 (0),则缺省情况下不会进行检查。如果同时指定了 MINNONALPHA,将无法指定 MINDIGIT。

MINLOWER

必须包含的最少小写字母个数。如果未设置,或者将其设为零 (0),则缺省情况下不会进行检查。

MINNONALPHA

必须包含的最少非字母字符(包括数字和特殊字符)个数。如果未设置 MINNONALPHA,则缺省值为 1。如果同时指定了 MINDIGIT 或 MINSPECIAL,则将无法指定 MINNONALPHA。

MINWEEKS

更改口令所需的最短间隔时间。

MINSPECIAL

必须包含的最少特殊字符(非字母和数字)个数。如果未设置 MINSPECIAL,或者将其设为零 (0),则缺省情况下不会进行检查。如果同时指定了 MINNONALPHA,则将无法指定 MINSPECIAL。

MINUPPER

要求的大写字母的最少个数。如果未设置 MINUPPER 或者将其设为零 (0),则缺省情况下不会进行检查。

NAMECHECK

启用/禁用登录名检查。缺省设置为执行登录名检查。使用 no 值(不区分大小写)会禁用此功能。

PASSLENGTH

口令的最小长度(以字符为单位)。

WARNWEEKS

发出口令即将到期警告前的时间长度。

WHITESPACE

确定口令中是否允许使用空格字符。有效值为 YES 和 NO。如果未设置 WHITESPACE,或者将其设为 YES,则允许使用空格字符。

/etc/oshadow

passwd 和 pwconv 用来更新实际影子文件的临时文件。

/etc/passwd

口令文件。

/etc/shadow

影子口令文件。

/etc/shells

Shell 数据库。

属性

有关下列属性的说明,请参见 attributes(5):

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
请参见下文。

用户可读的输出是 "Uncommitted"(未确定)。选项为 "Committed"(已确定)。

另请参见

at(1)、batch(1)、finger(1)、login(1)、cron(1M)、domainname(1M)、eeprom(1M)、id(1M)、ldapclient(1M)、mkpwdict(1M)、pwconv(1M)、su(1M)、useradd(1M)、userdel(1M)、usermod(1M)、crypt(3C)、getpwnam(3C)、getspnam(3C)、getusershell(3C)、pam(3PAM)、loginlog(4)、nsswitch.conf(4)、pam.conf(4)、passwd(4)、policy.conf(4)、shadow(4)、shells(4)、user_attr(4)、attributes(5)、environ(5)、pam_authtok_check(5)、pam_authtok_get(5)、pam_authtok_store(5)、pam_dhkeys(5)、pam_ldap(5)、pam_unix_account(5)、pam_unix_auth(5)、pam_unix_session(5)、crypt_unix(5)

附注

yppasswd 命令是 passwd 的包装器。建议不要使用 yppasswd,而是使用 passwd –r repository_name。

在 files 和 ldap 系统信息库中更改口令将清除失败登录次数。

更改口令会重新激活由于不活动达到一定时间而被禁用的帐户。

输入终端处理可能会解释某些键序列而不将其传递给 passwd 命令。

无口令帐户(状态代码为 NP)可能无法登录。请参见 login(1) PASSREQ 选项。

执行各种选项所需的授权:

-d     delete password               solaris.passwd.assign
-N     set nologin                   solaris.passwd.assign
       change any passwd             solaris.passwd.assign

-l     lock account                  solaris.account.setpolicy
-u     unlock account                solaris.account.setpolicy
-n     set min field for name        solaris.account.setpolicy
-w     set warn field for name       solaris.account.setpolicy
-x     set max field for name        solaris.account.setpolicy
-f     forces password expiration    solaris.account.setpolicy
-s     display password attributes   solaris.account.setpolicy  
-a     display password attributes   solaris.account.setpolicy  
       for all entries

-e     change login shell            solaris.user.manage
-g     change gecos information      solaris.user.manage
-h     change home directory         solaris.user.manage
       set a newly created account's 
         passwd for the first time   solaris.account.activate

除 crypt_unix(5) 以外的所有口令散列算法所支持的最大口令长度均为 255。