传统的 Unix 系统将用户账户信息(包括单向加密的密码)保存在一个名为 ``/etc/passwd'' 的文本文件中。 由于许多工具(例如 ``ls``)使用此文件通过将用户 ID 号与用户名匹配来显示文件所有权等信息,因此该文件需要是全局可读的。因此,这可能存在一定的安全风险。
另一种存储账户信息的方法(我一直使用的方法)是使用影子密码格式。与传统方法一样,此方法以兼容的格式将账户信息存储在 /etc/passwd 文件中。但是,密码存储为单个 "x" 字符(即实际上并未存储在此文件中)。第二个文件,名为 ``/etc/shadow'', 包含加密密码以及其他信息,例如账户或密码过期值等。/etc/shadow 文件仅可由 root 账户读取,因此安全风险较低。
虽然其他一些 Linux 发行版强制您安装 Shadow Password Suite 才能使用影子格式,但 Red Hat 使其变得简单。要在两种格式之间切换,请键入(以 root 身份)
/usr/sbin/pwconv To convert to the shadow format /usr/sbin/pwunconv To convert back to the traditional format |
使用影子密码,``/etc/passwd'' 文件包含账户信息,看起来像这样
smithj:x:561:561:Joe Smith:/home/smithj:/bin/bash |
passwd 条目中的每个字段都用 ":" 冒号字符分隔,如下所示
用户名,最多 8 个字符。区分大小写,通常为小写
密码字段中的 "x"。密码存储在 ``/etc/shadow'' 文件中。
数字用户 ID。这由 ``adduser'' 脚本分配。Unix 使用此字段以及以下组字段来标识哪些文件属于该用户。
数字组 ID。Red Hat 以相当独特的方式使用组 ID,以增强文件安全性。通常,组 ID 将与用户 ID 匹配。
用户的全名。我不确定此字段的最大长度是多少,但请尽量保持合理(少于 30 个字符)。
用户的 home 目录。通常为 /home/username(例如 /home/smithj)。所有用户的个人文件、网页、邮件转发等都将存储在此处。
用户的 "shell 账户"。通常设置为 ``/bin/bash'' 以提供对 bash shell 的访问(我个人最喜欢的 shell)。
也许您不希望为您的用户提供 shell 账户。您可以创建一个名为 ``/bin/sorrysh'' 的脚本文件,例如,它可以显示某种错误消息并注销用户,然后将此脚本设置为他们的默认 shell。
注意:注意:如果账户需要提供 "FTP" 传输来更新网页等,则 shell 账户需要设置为 ``/bin/bash'' -- 然后需要在用户的 home 目录中设置特殊权限以防止 shell 登录。有关详细信息,请参阅 第 7.1 节。
``/etc/shadow'' 文件包含用户的密码和账户过期信息,看起来像这样
smithj:Ep6mckrOLChF.:10063:0:99999:7::: |
与 passwd 文件一样,shadow 文件中的每个字段也用 ":" 冒号字符分隔,如下所示
用户名,最多 8 个字符。区分大小写,通常为小写。与 /etc/passwd 文件中的用户名直接匹配。
密码,13 个字符加密。空白条目(例如 ::)表示登录不需要密码(通常不是一个好主意),而 ``*'' 条目(例如 :*:) 表示该账户已被禁用。
自密码上次更改以来经过的天数(自 1970 年 1 月 1 日起)。
密码可以更改前的天数(0 表示可以随时更改)
密码必须更改后的天数(99999 表示用户可以多年保持密码不变)
警告用户密码即将过期的天数(7 表示整整一周)
密码过期后账户被禁用的天数
自 1970 年 1 月 1 日起账户已被禁用的天数
保留字段,可能用于将来使用