Linux 用户管理:修改用户密码
本节讨论本地用户密码。您将学习到使用不同方法设置改变用户密码。
第一个学习使用 passwd 命令方法。
第二个学习使用 openssl passwd 命令方法。
使用 passwd 命令
passwd
一个用户可使用 passwd 命令重设其密码。旧的用户密码需要输入,新设置密码需输入两遍。
语法:
passwd
见如上截图,shell 警告用户新设置密码过于简单。最后,在两到三次的尝试后,系统提示密码修改失败,密码并未被修改。必须再次使用命令修改密码。
然而,这个规则并不用在超级用户(根用户),在超级用户(根用户)不会提示要求输入旧密码,根用户可以直接修改其它用户的登录密码。
语法:
passwd <userName>
举例:
$ sudo passwd jtp
见如上截图,用户 jtp 的密码被根用户修改,无任何警告信息。
影子文件(Shadow File)
影子文件是保存加密的用户密码的文件,即 /etc/shadow 文件。这个文件是只读文件,只能被超级用户读取。
语法:
/etc/shadow
参见如上截图, /etc/shadow 文件包含以冒号(:)分隔的9列信息。
从左至右,这9列信息包含 用户名,加密密码串,最后修改密码日期,密码必须进行修改剩余天数,密码过期天数,密码过期前提示天数,密码过期后到禁止用户的天数,账户已被禁止天数,最后列没有指定含义。
密码加密
密码以加密的形式存储。加密由系统内置加密功能函数完成。最简单的创建用户及其密码的方法是使用 useradd -m 命令创建用户,紧接着使用 passwd 命令设置新创建用户的登录密码。
语法:
useradd -m <userName>
举例:
$ sudo useradd -m akki
语法:
passwd <userName>
举例:
$ sudo passwd akki
见如上截图,名为 akki 的用户被创建且成功设置其登录密码。
使用 openssl passwd
命令
使用 openssl 加密密码
创建用户时可使用 -p 命令选项指定密码,但 -p 选项后跟随的必须不能是密码明文,而是加密过的密码字符串。
可以使用 openssl passwd
命令创建密码的密文。
openssl passwd
命令的哈希算法,对同一字符串(密码明文)生成不同的密文字符串。为了固定密文,可使用命令选项 -salt 。
-salt 后跟2个字符,且这2个字符会放在密文的开头(输入长了也仅2个字符起作用),见如下演示:
参考如上截图,生成的密文以指定的 32 开头。
使用 openssl command 在创建用户的同时设置其密码,使用如下语法(利用 shell 命令展开 功能)。
语法:
useradd -m -p $(openssl paeewd hunter2) <userName>
举例:
$ sudo useradd -m -p $(openssl paeewd hunter2) aaa
见如上截图,用户 'aaa' 被创建,且密码被设置。可在命令历史中看到密码。(这里用户的登录密码是 hunter2)。
/etc/login.defs 文件
/etc/login.defs 文件中包含对新建用户密码相关的默认设置,包括诸如 密码生命期,密码长度要求等方面的设置。
语法:
grep PASS /etc/login.defs
chage 命令
chage 命令可被用户用来获得用户密码的相关信息。'-l' 命令选项用于列出相关信息。
语法:
chage -l <userName>
举例:
$ sudo chage -l abc
使密码无效
保存在 /etc/shadow 文件中的密码密文开始处无感叹号(!),若密码密文开始处有感叹号代表密码不可用。
这个特性可使用户密码无效,换句话说,这个处理实际是 锁定,禁止 和 挂起 用户账号的含义。既可以使用字处理软件如 vi 直接编辑 ‘/etc/shadow’ 文件,或通过 usermod 命令达到此目的。
下面,我们使用 usermod 命令使用户 akki 的密码无效。
语法:
usermod -L <userName>
举例:
$ sudo usermod -L akki
见如上截图,首先显示 '/etc/shadow' 文件中 akki 用户的密码密文,然后使用命令 usermod -L akki
使 akki 的密码失效。现在, akki 无法登录。
见如上截图,可看到用户 akki 保存密码哈希密文串前被置了个感叹号(i),它意味着用户密码被置无效。
这里请注意,超级用户(根用户)可打开 akki 账户,因为它不需要 akki 的用户密码。如果 akki 账户被设为无密码登录,那么 akki 账户本身也可登录。
可以使用 'usermod -U' 命令解锁账户。
语法:
usermod -U <userName>
举例:
$ sudi usermod -U akki
见如上截图, akki 用户密码密文前没有了感叹号(!), akki 用户现在解锁了。
推荐文章: