passwd
passwd 是一个用于 Unix,Plan 9,Inferno 和大多数类 Unix 操作系统中用于更改用户密码的命令。用户输入的密码通过密钥派生函数运行,以创建新密码的散列值,并将其保存。出于安全考虑,将不会保存输入的密码而仅保存生成的散列值。
原作者 | 贝尔实验室 |
---|---|
开发者 | 若干 开源软件 以及 商业软件 开发人员 |
操作系统 | Unix, 类Unix系统, Plan 9, Inferno |
平台 | 跨平台 |
类型 | 命令 |
当用户登录时,用户在登录过程中输入的密码将通过相同的密钥派生函数处理,并将生成的散列值与保存值进行比较。如果哈希值相同,则认为输入的密码正确,即用户已通过身份验证。从理论上讲,两个不同的密码可能会产生相同的哈希值。但是,密码散列函数在设计时的要求就是使得能够找到产生相同散列的密码极为困难,这在实际上不可行。因此,如果产生的散列与存储的散列匹配,则可以对用户进行身份验证。
passwd 命令可用于更改本地帐户的密码,在大多数系统上,也可用于更改在分布式身份验证机制(如 NIS,Kerberos 或 LDAP)中管理的密码。
passwd 文件和 shadow 文件是类Unix系统中用于记录用户名、用户ID和用户密码等信息的文件,类似于Windows下的%windir%\system32\registry\sam
文件。这两个文件通常位于/etc
目录之下。同时,类Unix系统中可用passwd
命令更改特定用户的密码。
passwd 文件
/etc/passwd
文件是一个基于文本的平面文件数据库,存储了可以登录该系统的用户或拥有运行中进程所有权的其他操作系统用户的一系列用户信息。
在许多操作系统中,该文件只是更通用的名称服务开关的许多可能后端之一。
该文件的名称源自其最初的功能,因为它包含用于验证用户帐户密码的数据。但是,在现代 Unix 系统上,安全性敏感的密码信息通常使用影子文件或其他数据库实现方式存储在不同的文件中。
/etc/passwd
文件通常具有文件系统权限,尽管该文件只能由超级用户或通过使用一些特殊用途的特权命令来修改,但允许系统的所有用户读取(世界可读)。
/etc/passwd
文件是一个文本文件,每行一条记录,每条记录描述一个用户帐户。每个记录由七个用冒号分隔的字段组成。文件中记录的顺序通常并不重要。
示例如下:
jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8910,(234)555-0044,email:/home/jsmith:/bin/sh
字段从左到右依次为:
jsmith
:用户名:用户登录操作系统时输入的字符串,即 logname。用户名在文件中列出的用户列表中必须是唯一的。x
:用于验证用户密码的信息;在现在的大多数用途中,此字段通常设置为“ x”(或“ *”或其他指示符),而实际密码信息存储在单独的影子文件中。在Linux系统上,将此字段设置为星号(“ *”)是禁用直接登录帐户但仍保留其名称的常用方法,而另一个可能的值是“ * NP *”,该值指示使用NIS服务器来获取密码。在没有有效的密码屏蔽的情况下,该字段通常包含用户密码的加密哈希值(与盐结合使用)。1001
:用户标识号,操作系统将其用于内部目的。它不必是唯一的。1000
:组标识号,用于标识用户的主要组;该用户最初可能会访问此用户创建的所有文件。Joe Smith,Room 1007...
:Gecos字段,描述人员或帐户的注释。通常,这是一组用逗号分隔的值,包括用户的全名和联系方式。/home/jsmith
:用户主目录的路径。/bin/sh
:每次用户登录系统时启动的程序。对于交互式用户,这通常是系统的命令行解释器(shell)之一。