更新时间:2024-03-19 09:02
password,计算机术语,是计算机的密码。作为命令时,它可以用来设置和更改用户密码。
password
英音:['pɑ:sw?:d]美音:['pæs,w?d]
名词n.
口令;密码;通行密码;暗语
用途
更改用户密码。
语法
passwd [ -R load_module ] [-f| -s] [ User ]
描述
passwd 命令设置和更改用户密码。使用此命令更改自己或者另一个用户的密码。使用 passwd 命令也能更改与登录名关联的全名(gecos)和用来作为操作系统界面的 shell。
根据用户的定义,用户的密码可以存在于本地或远程。本地密码存在于 /etc/security/passwd 数据库中。远程密码存在于网络信息服务(NIS)或者分布式计算环境(DCE)数据库。
要更改自己的密码,请输入 passwd 命令。passwd 命令提示非 root 用户输入旧密码(如果存在),然后提示输入两次新密码。(密码不显示在屏幕上。)如果两次新密码的输入不一致, passwd 命令提示重新输入新密码。
注:
passwd 命令只使用密码的头八个字符作为本地和 NIS 密码。在密码中只支持 7 位字符。由于这个原因,本地语言支持(NLS)代码点不允许出现于密码中。
要更改另一个用户的密码,请输入 passwd 命令和用户的登录名(User 参数)。只有 root 用户或者安全组成员才允许更改另一个用户的密码。passwd 命令提示输入用户的旧密码以及用户的新密码。然而,passwd 命令并不提示 root 用户旧用户密码、root 密码以及加给 root 用户任何密码限制。
/etc/passwd 文件记录全名和使用的 shell 的路径名。要更改记录名,请输入 passwd -f 命令。要更改登录 shell,请输入 passwd -s 命令。
根据密码限制,在 /etc/security/user 配置文件中构造本地定义的密码。此文件包含下列限制:
minalpha 指定字母字符的最小数目。
minother 指定其它字符的最小数目。
minlen 指定字符的最小数目。
注:
此值由 minalpha 值加上 minother 值和 minlen 值中的大者。
mindiff 指定出现于新密码中但没出现于在旧密码中的字符的最小数。
注:
此限制并不考虑位置。如果新密码是 abcd 并且旧密码是 edcb ,不同字符数就是 1。
maxrepeats 指定在密码中单个字符使用的最大次数。
minage 指定密码能够更改的最小寿命。密码必须保持一个最小周期。此值用周来评测。
maxage 指定密码的最大寿命。密码必须在指定的周数后更改。
maxexpired 指定用户可以更改密码的超出最大寿命 maxage 的最大周数。
histexpire 指定用户不能重用密码的周数。
histsize 指定用户不能重用的前几个密码的数目。
dictionlist 指定更改密码时要检查的字典文件列表。
pwdchecks 指定更改密码时要调用的外部密码限制方法的列表。
如果 root 用户添加了 NOCHECK 属性到在 /etc/security/passwd 文件中的标志条目中,密码就不必满足这些限制。另外,root 用户也可指定新密码给其它用户而不遵循密码的限制。
如果 root 用户在标志条目中添加了 ADMIN 属性或者如果在 /etc/passwd 文件中的 password 字段包含 * (星号),则只有 root 用户才能更改密码。如果在 /etc/passwd 中的 password 字段包含有 !(感叹号)和在 /etc/security/passwd 文件中的 password 字段包含有 * (星号),则 root 用户拥有更改您的密码的超级特权。
如果 root 用更改您的密码,则 ADMCHG 属性就会自动地添加到在 /etc/security/passwd 文件中的标志条目上。这种情况下,您必须在下次登录时更改密码。
如果 /etc/security/user 文件中用户的 registry 值是 DCE 或者 NIS,则密码更改只能在指定的数据库中进行。
标志
-f 更改由 finger 命令访问的用户信息。可以使用此标志提供在 /etc/passwd 文件中的全名。
-s 更改登录 shell。
-R load_module 指定可装入 I&A 模块,来更改用户的密码。
安全性
访问控制:安装此程序为可信计算库的一部分,并可让所有用户执行。另外,此程序应该运行 setuid 以成为 root 用户来获取对密码文件的写访问。
文件存取:
方式 文件
r /etc/security/user
rx /usr/lib/security/DCE
rx /usr/lib/security/NIS
rw /etc/passwd
rw /etc/security/passwd
r /etc/security/login.cfg
审计事件:
事件 信息
PASSWORD_Change user
示例
1. 要更改密码,请输入:
passwd
passwd 命令提示输入旧密码,如果它存在并且您不是 root 用户。输入旧密码后,命令提示输入两次新密码。
2. 要更改 /etc/passwd 文件中的全名,请输入:
passwd-f
passwd 命令显示为您的用户标识存储的名称。例如,对于登录名 sam , passwd 命令能够显示以下消息:
sam's current gecos:
是否更改?>
如果输入 Y(是),passwd 命令提示输入新名。passwd 命令记录输入的名称到 /etc/passwd 文件中。
3. 要在下次登录时使用不同的 shell,请输入:
passwd - s
passwd 命令列出可用的和当前使用的 shell 的路径名。此命令也显示提示:
是否更改?>
如果输入 Y(是),passwd 命令提示输入要使用的 shell。下次登录时系统提供在此指定的 shell。
文件
/usr/bin/passwd 包含 passwd 命令。
/etc/passwd 包含用户 ID、用户名、主目录、登录 shell 和 finger 的信息
/etc/security/passwd 包含加密的密码和安全性信息。
MySql - PASSWORD函数
简介
将一串文本转换成哈希值。
详细介绍
MySQL用户账户列于mysql数据库中的user表内。每个MySQL账户指定一个密码,尽管保存在user表Password列的密码不是明文,但哈希值是从表中的记录计算的。用PASSWORD()函数来计算密码的哈希值。
MySQL在客户端/服务器通信的两个阶段使用密码:
· 如果客户端试图连接服务器,有一个初始鉴定步骤,客户必须提供一个密码,并且必须与客户想要使用的账户在user表保存的哈希值匹配。
· 客户端连接后,它可以(如果有充分的权限) 设置或更改user表内所列的账户的密码哈希值值。客户端可以通过PASSWORD()函数来生成密码哈希值,或使用GRANT或SET PASSWORD语句。
换句话说,当客户端首次试图连接时,服务器使用哈希值进行鉴定。如果连接的客户端调用PASSWORD()函数或使用GRANT或SET语句来设置或更改密码,则服务器产生哈希值。
在MySQL 4.1中密码哈希算法已经更新,提供了更好的安全性并降低了密码被截取的风险。但是,该新机制只能在MySQL 4.1(和更新版本的)服务器和客户端中使用,会产生一些兼容性问题。4.1或新客户端可以连接4.1之前的服务器,因为客户端可以同时理解旧的和新的密码哈希机制。但是,4.1之前的客户端试图连接4.1版或更新版的服务器时会遇到困难。例如,3.23版mysql客户端试图连接5.1服务器时会失败并出现下面的错误消息:
shell> mysql -h localhost -u rootClient does not support authentication protocol requestedby server; consider upgrading MySQL client
出现该问题的另一个普通例子是在升级到MySQL 4.1或更新版后,试图使用旧版本的PHPmysql扩展名。(参见25.3.1节,“使用MySQL和PHP的常见问题”)。
下面讨论了新、旧密码机制之间的差别,以及如果你升级了服务器但需要为4.1版以前的客户端保持向后兼容性该怎样做。A.2.3节,“客户端不支持鉴定协议”中有更详细的信息。该信息将MySQL数据库从4.0版本或更低版升级到4.1版或更高版的PHP编程人员特别重要。
注释:该讨论对比了4.1版的行为和4.1前的行为,这儿描述的4.1中的行为实际上从4.1.1开始。MySQL 4.1.0是一个“旧”的发布,因为它的实施机制与4.1.1版和更新版中的稍有不同。在MySQL 5.0 参考手册中详细描述了4.1.0和最新版之间的差别。
在MySQL 4.1之前,用PASSWORD()函数计算的密码哈希值有16个字节长。应为:
mysql> SELECT PASSWORD('mypass');
+--------------------+
| PASSWORD('mypass') |
+--------------------+
| 6f8c114b58f2ce9e |
+--------------------+
在MySQL 4.1之前,user表的Password列(保存了哈希值)也是16字节长。
在MySQL 4.1中,已经对PASSWORD()函数进行了修改,可以生成41字节的哈希值:
mysql> SELECT PASSWORD('mypass');
+-------------------------------------------+
| PASSWORD('mypass')
|+-------------------------------------------+|
*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+
同样,user表的Password列必须有41字节长来保存这些值:
· 如果你新安装MySQL 5.1,Password列自动为41字节长。
· 从MySQL 4.1(4.1.1或4.1系列的更新版)升级到MySQL 5.1,应不会出现相关问题,因为两个版本使用相同的密码哈希机制。如果你想要将更早版本的MySQL升级到MySQL5.1,你应先升级到4.1,然后将4.1升级到5.1。
加宽的Password列可以同时保存新、旧格式的密码哈希值。可以有两种方式确定任何给定格式的密码哈希值:
· 明显的不同之处是长度(16字节和41字节)。
· 第2个不同之处是新格式的密码哈希值都以‘*’字符开头,而旧格式的密码绝对不是。
长密码哈希值具有更好的加密属性,并且客户端根据长哈希值进行鉴定比旧的短哈希值更加安全。
短密码哈希值和长密码哈希值之间的不同之处与服务器如何使用密码进行鉴定以及如何为执行密码更改操作的连接的客户端生成密码哈希值都有关。
服务器使用密码哈希值进行鉴定的方式受Password列的宽度影响:
· 如果列较短,只用短哈希鉴定。
· 如果列较长,可以有短或长哈希值,并且服务器可以使用任何一种格式:
o 4.1之前的客户端可以连接,它们只可以使用旧的哈希机制,它们可以只鉴定有短哈希的账户。
o 4.1及以后版本的客户端可以鉴定有短哈希或长哈希的账户。
对于短哈希账户的鉴定过程,4.1和以后版本的客户端比为旧版本的客户端实际要安全得多。从安全性角度,从最低安全到最安全的梯度为:
· 4.1之前的客户端用短密码哈希值进行鉴定
· 4.1或以后版本的客户端用短密码哈希值进行鉴定
· 4.1或以后版本的客户端用长密码哈希值进行鉴定
服务器为连接的客户端生成密码哈希值的方式受Password列宽度和--old-passwords选项的影响。4.1或更新版本的服务器只有满足某个条件才生成长哈希:Password列必须足够宽以容纳长哈希值并且未给定--old-passwords选项。这些条件适合:
· Password列必须足够宽以容纳长哈希(41字节)值。如果列没有更新,仍然为4.1之前的16字节宽,当客户端使用PASSWORD()、GRANT或SET PASSWORD执行密码更改操作时,服务器注意到长哈希不适合,只生成短哈希。如果你已经升级到4.1但还没有运行 mysql_fix_privilege_tables脚本来扩宽Password列时会出现这种行为。
· 如果Password列足够宽,则可以保存短或长密码哈希值。在这种情况下,PASSWORD()、GRANT或SET PASSWORD生成长哈希,除非 用--old-passwords选项启动服务器。该选项强制服务器生成短密码哈希值。
--old-passwords选项的目的是当服务器生成长密码哈希值时,允许你维持同4.1之前的客户端的向后兼容性。该选项不影响鉴定(4.1和以后版本的客户端仍然可以使用有长密码哈希值的账户),但它防止在密码更改操作中在user表中创建长密码哈希值。在这种情况下,该账户不能再用于4.1之前的客户端。没有--old-passwords选项,可能会出现下面的不期望的情况:
· 旧客户端连接有短密码哈希值的账户。
· 客户更改自己的密码。没有--old-passwords,可以为该账户生成长密码哈希值。
· 下次旧客户试图连接账户时不能连接上,因为账户有长密码哈希值,需要新的哈希机制进行鉴定。(一旦账户user表中为长密码哈希值,只有4.1和以后版本的客户端可以鉴定它,因为4.1之前的客户端不理解长哈希)。
该场景说明,如果你必须支持旧的4.1之前的客户端,不使用--old-passwords选项运行4.1或更新版本的服务器很危险。用--old-passwords运行服务器,密码更改操作不会生成长密码哈希值,这样旧客户端也可以访问账户。(这些客户端不能意外地因更改了密码将自己锁出去,并留下长密码哈希值)。
--old-passwords选项的不利之处是你创建或更改的密码使用短哈希,甚至对于4.1客户端也如此。这样,你丢失了长密码哈希值提供的安全性。如果你想要创建有长哈希的账户(例如,为4.1客户端),你必须不使用--old-passwords来运行服务器。