Linux笔记——/etc/shadow文件
一、用户密码文件:/etc/shadow
- 查看/etc/shadow文件内容(root身份):more /etc/passwd
- 查看/etc/shadow文件帮助信息:man 5 shadow
二、为什么用户的密码信息没有保存在/etc/passwd文件中?
解:因为在/etc/passwd文件中保存了用户信息,所以很多操作过程中会调用这些信息,调用这些信息的时候就会读取/etc/passwd文件,用“ll”命令可以看到每个用户对/etc/passwd文件都有读的权限,若是真的把加密后的密码放在/etc/passswd中,那么任何用户都可以拿到加密的密码,然后去尝试破解这个密码,这种情况就比较危险了。在早期,加密的密码的确是存在/etc/passwd文件中的,后面为了安全性考虑。将加密的密码文件存在了/etc/shadow(影子口令文件)中了。
[root@centos01 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2387 12月 14 14:47 /etc/passwd
[root@centos01 ~]# ll /etc/shadow
-r--------. 1 root root 1406 11月 2 09:12 /etc/shadow
说明:
/etc/passwd对所有用户都有读的权限;
/etc/shadow理论上只对root用户有读权限,相对来说很安全,但是之前说过,超级用户很多权限不受限制,所以超级用户可以编辑该文件。
三、/etc/shadow帮助文档信息
查看shadow文件帮助指令:man 5 shadow
根据shadow文件的帮助信息来看,每个用户的密码信息包含内容 用户名:加密密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:账号限制时间:失效时间:标志。这些信息中只有前两者比较重要,其他的大多数可以借助第三方工具,还有一些就真的很少用到。
四、/etc/shadow文件信息
root用户可查看/etc/shadow文件,以下是摘取其中的一段内容:
root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19298:0:99999:7:::
bin:*:18353:0:99999:7:::
ych:$6$XRpTtzPazFsNX7Uw$ZM8BPxZuRfsMz0PBxkOKIrLrwXXZtF9f7r9FZjUyx7bJItYcXtvBQB/IZQK2HHgk86yH/ffHmJZhP826uRzC1/::0:99999:7:::
/etc/shadow文件格式如下:
字段 | 含义 |
---|---|
用户名(账户) | 用户登录系统时使用的用户名 |
加密后的密码 | 若删除此密码,那么登录就不需要密码了 |
最后一次修改时间 | 用户最后一次修改密码的天数(距离1970年1月1日有多少天,空字段表示密码年龄功能被禁用) |
最小时间间隔 | 两次修改密码之间的最小天数,空字段或0表示没有最小时间限制 |
最大时间间隔 | 1. 密码保持有效的最多天数,这些天之后,用户必须更改密码; 这些天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。 2. 空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段。 3. 99999表示不限定 4. 如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。 |
警告时间 | 1. 密码过期之前,提前警告用户的的天数。 2. 空字段或者 0 表示没有密码警告期。 |
账号闲置时间 | 1. 密码过期(查看上边的密码最大时间间隔)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。 2. 空字段表示没有强制密码过期。 |
失效时间 | 密码失效的绝对天数。可以在不删除用户的情况下锁定用户,不让其登录 |
标志 | 一般不使用 |
用户密码:最好是≥8位 数字、字符、符号的组合。
为什么用户密码要8位以上:Unix最早采用的加密算法是DES。DES能识别的密码为只有8位,所以早期的时候如果给用户设置10位长度的密码,其实真正有用的只有前8位,后面两位甚至可以不输入即可登录系统。但是现在Linux采用的加密算法大多是DES+MD5混合使用的,密码长度最长是255位,密码强度比较大。
MD5密码加密规则:
-
输入长度不固定,输出长度固定;
-
没有办法根据输出推断输入的值,即单向不可逆
所以大多数破解密码不是根据输出推断输入,而是猜密码,只要CPU运算速度足够快,那么密码就可以破解,若是运算200年都不一定算出来,那么这样的密码就是真正不可破解的。
用户密码有两点要求:一是强度足够,二是经常改变。
五、常见问题
5.1 用户密码信息存放在/etc/shadow文件中,为什么在/etc/passwd中还要继续留着那个密码位呢,删除不好吗?
[root@centos01 ~]# grep root /etc/passwd /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19298:0:99999:7:::
解:其实,在真正我们添加用户设置密码或者修改密码的时候,是先把加密密码写到/etc/passwd中的,然后系统调用pwconv将加密密码转换到/etc/shadow中的。
在Linux系统中,提供了命令pwunconv和psconv。pwunconv作用是将/etc/shadow中的加密密码写到/etc/passwd中;pwconv是将/etc/passwd中的加密密码信息写到/etc/shadow中。
[root@centos01 ~]# grep root /etc/passwd /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19298:0:99999:7:::
[root@centos01 ~]# pwunconv
[root@centos01 ~]# grep root /etc/passwd /etc/shadow
/etc/passwd:root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:0:0:root:/root:/bin/bash
/etc/passwd:operator:*:11:0:operator:/root:/sbin/nologin
grep: /etc/shadow: 没有那个文件或目录
[root@centos01 ~]# pwconv
[root@centos01 ~]# grep root /etc/passwd /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$aSpwa4Va$3trQ3gR9MOOXaGz0.q8zn5Qrzz.0zRWRzzJwvGNvbhjmZKSfzJ50gAJH42vtqFatwcETU0JNrSJ3trwJW2dhr.:19340:0:99999:7:::
5.2 如何使用配置文件/etc/passwd , /etc/shadow , /etc/skel 添加一个新用户?
解:添加过程如下:
在/etc/passwd中编辑如下图:
[root@centos01 ~]# vim /etc/passwd
在/etc/shadow中编辑如下图:
[root@centos01 ~]# vim /etc/shadow
添加宿主目录:
[root@centos01 ~]# mkdir /home/ych03
[root@centos01 ~]# ls -ld /home/ych03
drwxr-xr-x. 2 root root 6 12月 15 09:27 /home/ych03
[root@centos01 ~]# chown ych03 /home/ych03
[root@centos01 ~]# ls -ld /home/ych03
drwxr-xr-x. 2 ych03 root 6 12月 15 09:27 /home/ych03
展示效果:
[ych@centos01 ~]$ su - ych03
/usr/bin/id: cannot find name for group ID 1002
-bash-4.2$
所以说,在登录Linux系统的时候,会需要我们输入username和passwd.前者是在/etc/passwd中验证的,后者是在/etc/shadow中验证的。
不过,我们也发现切换到ych03用户之后,提示符和其他普通用户不一样。其实我们刚刚只是简单的用vim编辑配置文件添加新用户的过程,还有一些环境变量我们还没有生成。这些设置还需要用到配置文件:/etc/skel.所有新用户的配置信息文件都在/etc/skel里,/etc/skel内容如下:
[root@centos01 html]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla
这里定义了一些用户登录的设置文件。我们每创建一个新用户,都会将这些配置文件放到新用户的宿主目录下:
#先查看ych03宿主目录里有什么
[root@centos01 ~]# ls -a /home/ych03/
. .. .cache .config
#用useradd添加新用户ych04,用passwd设置用户密码
[root@centos01 ~]# useradd ych04
[root@centos01 ~]# passwd ych04
更改用户 ych04 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
#查看ych04的宿主目录下有哪些内容
[root@centos01 ~]# ls -a /home/ych04
. .. .bash_logout .bash_profile .bashrc .cache .config .mozilla
#查看/etc/skel下有哪些内容
[root@centos01 ~]# ls -a /etc/skel
. .. .bash_logout .bash_profile .bashrc .mozilla
其实在添加新用户的时候,会自动将/etc/skel下的文件都复制到新用户的宿主目录下,下面给用户ych03(用配置文件添加的)的宿主目录下添加这些文件:
[root@centos01 mary]# cd /etc/skel/
[root@centos01 skel]# cp -rf .* /home/ych03/
其实所谓的配置,就是将/etc/skel下的所有文件都复制到新用户的宿主目录,此时再切换到ych03用户:
[root@centos01 ~]# su - ych03
上一次登录:四 12月 15 15:34:05 CST 2022pts/1 上
/usr/bin/id: cannot find name for group ID 1002
[ych03@centos01 ~]$
看,现在提示符和其他用户一致了吧。
其实系统在执行useradd命令的时候,就会自动把/etc/skel下的内容都复制到新用户的宿主目录下。
更多推荐
所有评论(0)