PASSWD(1)

名称
passwd - 更改用户密码

大纲

passwd [选项] [登录]

描述

passwd 命令用来更改用户账户的密码。普通用户通常只更改其自己账户的密码，而超级用户可以更改任何账户的密码。passwd 也更改账户或相关的密码有效期。

  密码更改

如果有旧密码，首先提示用户输入旧密码。加密这个密码然后和存储的密码进行比较。用户只有一次机会输入正确密码。允许超级用户略过这个步骤，以便更改忘记了的密码。

输入了密码之后，会检查密码年龄信息，以查看此时是否允许用户更改密码。如果不允许，passwd 拒绝更改密码，然后退出。

提示用户输入两次新密码。第二次和第一次进行比较，并且需要相同才能更改密码。

然后，测试密码的负责程度。一般来讲，密码应该包含 6 到 8 位字符，从下边的一个或多个集合中选择：

    • 小写字母

    • 数字 0 到 9

    • 标点符号

必须要留意不能包含系统默认的擦除和杀死字符。passwd 会拒绝复杂度不满足要求的密码。

  关于用户密码的提示

密码的安全性依赖于加密算法的强度和密钥空间的大小。旧的 UNIX 系统加密算法基于 NBS DES 算法。推荐使用更新的算法(查看 ENCRYPT_METHOD)。密钥空间的大小依赖于选择的密码的随机性。

由于粗心地或处理选择密码，会危及密码的安全。由于这个原因，您不应该选择出现在词典中或者必须要写下来才能记住的密码。密码也不应该是一个名字、许可证号、生日或者街道号。所有这些可以用于猜测来损害系统安全。

You can find advice on how to choose a strong password on http://en.wikipedia.org/wiki/Password_strength

选项

passwd 命令可以接受的选项有：

-a, --all
    此选项只能和 -S 一起使用，来显示所有用户的状态。

-d, --delete
    删除用户密码(让它为空)。这是禁用一个用户密码的快速方法。它将设置给出名称的账户。

-e, --expire
    让一个账户的密码立即过期。这可以强制一个用户下次登录时更改密码。

-h, --help
    现实帮助信息并退出。

-i, --inactive INACTIVE
    此选项用于在密码过期一定天数之后禁用账户。一个用户账户密码已经过期 INACTIVE 天之后，用户将不能再登录进账户。

-k, --keep-tokens
    表示密码更改只应该因为认证口令(密码)过期更改。用户希望保持他们尚未过期的口令。

-l, --lock
    锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值来禁用(它在密码开头添加一个“!”)。

    注意，这并没有禁用此账户。用户仍然可以通过其它认证方式(如 SSH 密码)来登录。要禁用此账户，管理员需要使用 usermod --expiredate 1 (设置账户的过期时间为1970年1月2日)。

    被锁定了密码的用户不允许更改密码。

-n, --mindays MIN_DAYS
    在密码更改之间的最小天数设置为 MIN_DAYS。此字段中的 0 值表示用户可以在任何时间更改其密码。

-q, --quiet
    安静模式。

-r, --repository REPOSITORY
    在 REPOSITORY 中更改密码

-R, --root CHROOT_DIR
    Apply changes in the CHROOT_DIR directory and use the configuration files from the CHROOT_DIR directory.

-S, --status
    显示账户状态信息。状态信息包含 7 个字段。首个字段是用户的登录名，第二个字段表示用户账户是否已经锁定密码(L)、没有密码 (NP)或者密码可用(P)，第三个字段给出最后一次更改密码的日期。接下来的四个字段分别是密码的最小年龄、最大年龄、警告期和禁用期。这些年龄以天为单位计算。

-u, --unlock
    解锁指定用户的密码。此操作通过将密码改回先前值(改回使用 -l 之前的值)重新启用密码。

-w, --warndays WARN_DAYS
    设置在要求更改密码之前警告的天数。WARN_DAYS 选项是在密码过期之前提前警告的天数。

-x, --maxdays MAX_DAYS
    设置密码仍然有效的最大天数。MAX_DAYS 之后，密码会要求更改。

    MAX_DAYS 设置为 -1 会移除密码有效性检查。

CAVEATS

密码复杂性检查在每台机器间不同。用户应该选择适合的尽量复杂的密码。

在启动了 NIS 的系统上，如果没有登录 NIS 服务器，用户或许不能更改自己的密码。

配置文件

在 /etc/login.defs 中有如下配置变量，可以用来更改此工具的行为：

ENCRYPT_METHOD (string)
    这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。

    可以使用如下值：DES (default), MD5, SHA256, SHA512.

    注意，此参数会覆盖 MD5_CRYPT_ENAB 变量。

MD5_CRYPT_ENAB (boolean)
    表示密码是否必须使用基于 MD5 的算法加密。如果设为 yes，新密码将使用可以和新版 FreeBSD 兼容的基于 MD5 的算法加密。它支持无限长度的密码以及更长的盐字符串。如果您需要将加密的密码复制到其它不理解新算法的系统，设置为 no。默认值是 no。

    This variable is superseded by the ENCRYPT_METHOD variable or by any command line option used to configure the encryption algorithm.

    此变量已经废弃。您应该使用 ENCRYPT_METHOD。

OBSCURE_CHECKS_ENAB (boolean)
    对密码更改启用附加检查。

PASS_ALWAYS_WARN (boolean)
    如果是 root，警告弱密码，但是仍然允许使用。

PASS_CHANGE_TRIES (number)
    可以尝试更改密码的最大次数(太容易)。

PASS_MAX_LEN (number), PASS_MIN_LEN (number)
    crypt() 的有效字符位数。PASS_MAX_LEN 默认是 8，除非您自己的 crypt() 更好，否则不要更改。如果 MD5_CRYPT_ENAB 设为 yes，会被忽略。

SHA_CRYPT_MIN_ROUNDS (number), SHA_CRYPT_MAX_ROUNDS (number)
    ENCRYPT_METHOD 设为 SHA256 或 SHA512 时，此项确定加密算法默认使用 SHA 轮转数目(当轮转数没有通过命令行指定时)。

    使用很多轮转，会让暴力破解更加困难。但是需要注意，认证用户时也会需要更多的 CPU 资源。

    如果没有指定，libc 会选择默认的轮转数(5000)。

    值必须在 1000 - 999,999,999 之间。

    如果只设置了一个 SHA_CRYPT_MIN_ROUNDS 或 SHA_CRYPT_MAX_ROUNDS 值，就会使用这个值。

    如果 SHA_CRYPT_MIN_ROUNDS > SHA_CRYPT_MAX_ROUNDS，将会使用大的那个。

文件

/etc/passwd
    用户账户信息。

/etc/shadow
    安全用户账户信息。

/etc/login.defs
    Shadow 密码套件配置。

退出值

passwd 命令退出，并返回如下值：

0
    成功

1
    权限不够

2
    无效的选项组合

3
    意外的失败，什么也没有做。

4
    意外的失败，passwd 文件丢失

5
    passwd 文件忙，请重试

6
    给了选项一个无效的参数

参见

chpasswd(8), passwd(5), shadow(5), login.defs(5),usermod(8).