1、修改密码报错现象
在Linux系统中,不管是root用户还是普通用户登录后,如果需要修改密码时,执行命令 passwd
,输入密码和确认密码后,有时候会出现 uthentication token manipulation error
的提示,表示密码修改失败。出现这种现象的情况有2种,第一种情况是当你输入密码和确认密码不一致的时候,除此之外还有额外的提示信息 Sorry, passwords do not match.
,根据这个可以很明确的判断出原因。如下图:
第二种情况只出现了uthentication token manipulation error
的提示,没有额外的提示信息,如下图所示:
接下来我们主要分析和解决这一种情况。
2、问题解决方案
2.1 查看文件属性
用lsattr命令查看 /etc/passwd
、、/etc/shadow
的属性
# lsattr /etc/passwd
----i---------e----- /etc/passwd
# lsattr /etc/shadow
--------------e----- /etc/shadow
从上述代码中可以看到/etc/passwd
的文件属性有个 i
标识,这表明这个文件是禁止修改的。
使用 chattr
命令对该文件解锁:
# 解锁passwd文件
chattr -i /etc/passwd
# 如果shadow有锁,使用如下命令解锁
chattr -i /etc/shadow
然后再次修改密码,执行成功,如下图:
对 /etc/passwd
文件重新加锁,防止误修改操作。
# 给passwd文件加锁
chattr +i /etc/passwd
# 给shadow文件加锁
chattr +i /etc/shadow
查看2个文件的属性
# lsattr /etc/passwd
----i---------e----- /etc/passwd
# lsattr /etc/shadow
----i---------e----- /etc/shadow
拓展:
chattr
命令介绍
用chattr命令防止系统中某个关键文件被修改:
# chattr +i /etc/resolv.conf
然后用mv /etc/resolv.conf
等命令操作于该文件,都是得到 Operation not permitted
的结果。vim编辑该文件时会提示 W10: Warning: Changing a readonly file
错误。使用 lsattr 命令来显示该文件属性:
# lsattr /etc/resolv.conf
输出结果为:
----i-------- /etc/resolv.conf
要想修改此文件就要把 i
属性去掉:
chattr -i /etc/resolv.conf
如果想让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
# chattr +a /var/log/messages
2.2 查看根目录空间是否满了
显示文件系统的磁盘使用情况统计:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 29640780 4320704 23814388 16% /
udev 1536756 4 1536752 1% /dev
tmpfs 617620 888 616732 1% /run
none 5120 0 5120 0% /run/lock
none 1544044 156 1543888 1% /run/shm
第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。
用一个 -i 选项的df命令的输出显示inode信息而非块使用量。
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda6 1884160 261964 1622196 14% /
udev 212748 560 212188 1% /dev
tmpfs 216392 477 215915 1% /run
none 216392 3 216389 1% /run/lock
none 216392 8 216384 1% /run/shm
显示所有的信息:
# df --total
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 29640780 4320720 23814372 16% /
udev 1536756 4 1536752 1% /dev
tmpfs 617620 892 616728 1% /run
none 5120 0 5120 0% /run/lock
none 1544044 156 1543888 1% /run/shm
total 33344320 4321772 27516860 14%
我们看到输出的末尾,包含一个额外的行,显示总的每一列。
-h选项,通过它可以产生可读的格式df命令的输出:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 4.2G 23G 16% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 604M 892K 603M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.5G 156K 1.5G 1% /run/shm
我们可以看到输出显示的数字形式的’G’(千兆字节),“M”(兆字节)和"K"(千字节)。这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。
df命令具体使用的参数可结合实际情况使用,如果是根目录空间满了,则根据需要清除磁盘文件。
2.3 查看是否有执行权限
权限相关命令可参考:Linux操作命令分类详解 - 用户权限(三)
- 查看
/etc/passwd
、/etc/shadow
查看文件是否有读写权限
# ll /etc/passwd
-rw-r--r-- 1 root root 1818 Oct 9 2021 /etc/passwd
# ll /etc/shadow
-rw-r----- 1 root shadow 1157 May 20 15:27 /etc/shadow
从上述代码中可以看到这两个文件对于root用户是有读写权限的。如果没有执行权限,通过 chmod
命令赋予执行权限:
chmod 755 /etc/passwd /etc/shadow
注意:
如果执行chmod命令报错 chmod: changing permissions of ‘/etc/passwd’: Read-only file system
报错原因:文件系统处于只读模式下
解决方式:
mount -rw -o remount /
注:
- mount 是挂载命令
- -rw 是说指定的挂载文件是可读/写的
- -o remount / 是说重新挂载根
然后重新执行chmod命令,便可以进行passwd密码修改了。
评论区