一、用户密码文件:/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

说明:

  1. /etc/passwd对所有用户都有读的权限;

  2. /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下的内容都复制到新用户的宿主目录下。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐