-- TOC --
这4个Linux系统文件,包含了每个用户的登录目录,登录命令,密码,以及所属组的关系,sudo权限信息。
passwd文件中没有password,只有x。这是因为此文件任何用户都可读,有一定安全隐患,因此密码就不保存在这个文件了。
$ cat /etc/passwd | grep xinlin
xinlin:x:1000:1000:xinlin,,,:/home/xinlin:/bin/bash
用户名:x:uid:gid:comments:宿主目录:登录命令
常见的一个trick,在这个文件中修改登录命令,比如不使用bash,而是sh,或者恶作剧一点,使用python3等任意程序。有一些伪用户(psuedousers),它们的登录命令为空,或这为/sbin/nologin,不允许登录。
影子文件,用户的密码信息存放在这个文件中,当然,密码不会明文存放,而是hash后的值。同/etc/passwd文件一样,/etc/shadow也同样使用冒号:
来作为分隔符。
$ sudo cat /etc/shadow | grep xinlin
xinlin:$6$W/Ikecc1H30O1AYc$zZytKVqcx6lXYEzSukPF6OlLB2en87wTc4TLlB5cKhoDeHVVuixohCnZi0AlbyZFDS8RFgtDET62f/mYaQnYD1:18942:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
除了前2个字段,后面的字段貌似一般用不到,如果要修改密码,请参考passwd命令。
加密密码是一种hash值,而且还包含一些非hash的字段,具体请参考这里:https://man7.org/linux/man-pages/man3/crypt.3.html。当密码为!!
或*
都是不允许登录,root账户没有密码不能使用,没有密码时,shadow文件内保存!
。
注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。
关于密码时间,全都是一个数字,这个数字是自1970年1月1日起的天数。
计算密码最后修改时间
的具体日子:
$ date -d '1970-01-01 16907 days'
2016年 04月 16日 星期六 00:00:00 CST
最小修改间隔时间
,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的。
密码有效期
,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为 99999,也就是 273 年
,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
忘记密码怎么办?
对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。
如果 root 账号的密码遗失,则需要重新启动进入Linux系统救援模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码。也可以通过挂载根目录(比如用U盘启动Ubuntu Try),修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。
这个文件里面存放组id和组成员信息。
$ sudo cat /etc/group | grep xinlin
adm:x:4:syslog,xinlin
cdrom:x:24:xinlin
sudo:x:27:xinlin
dip:x:30:xinlin
plugdev:x:46:xinlin
lpadmin:x:120:xinlin
lxd:x:132:xinlin
xinlin:x:1000:
sambashare:x:133:xinlin
一般使用Linux系统,都不会一直使用root账户,以防止不小心敲错了命令,带来不可挽回的损失。给某些用户增加sudo权限,是个比较好的方法:
# in /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
xinlin ALL=(ALL) NOPASSWD:ALL
以上配置如果没有NOPASSWD:
,在sudo的时候,就需要密码。
本文链接:https://cs.pynote.net/sf/linux/sys/202111112/
-- EOF --
-- MORE --