运维弟弟养成日记?
/etc/passwd
这个文件用来保存系统中所有的用户和用户的主要信息。是所有用户!
系统中的用户很多,其中包含了一些系统用户
或称伪用户
。这些用户无法登陆系统,但是也不能删除。如果删除了这些用户,依赖于该用户的程序或者服务就无法正常执行。
文件每条记录格式如下,
1 | root:x:0:0:root:/root:/bin/bash |
用户名称
第一个字段root
即用户的名称为root
。需要注意的是Linux并非更具名称来区分不同用户,而是通过UID
。
密码标志
第二个字段x
即用户的密码标志,并非真正的密码,密码保存在/etc/shadow文件之中。而x是表示该用户拥有密码。如果删除该字段,系统会认为该用户没密码,导致只需要输入用户名就可以登陆(远程登录是不行的)
UID
第三个字段就是UID,用来分配用户权限,和识别不同用户。
1 | 0:超级用户 UID。如果用户 UID 为 0,则代表这个账号是管理员账号。把普通用户升级成管理员,只需把其他用户的 UID 修改为 0 就可以了。 |
GID
第四个字段是GID,即用户的组。
home目录
第六个字段为home目录的路径
shell类型
第七个字段表示拥护登陆以后的shell类型。Linux 的标准 Shell 就是 /bin/bash。
/etc/shadow
这个文件中保存着用户的实际加密密码和密码有效期等参数。权限为000,除了root用户,任何用户是无法查看的。
文件格式如下:
1 | root:$6$UHVem/sMNvQ/pxd$Arr0HntecztPDbX2ecCCR2G/Fi3WEVJ22XncGK4I1.:17961:0:99999:7::: |
一共分成九个字段
用户名称
第一个字段中保存的是用户名称,和 /etc/passwd 文件的用户名称相对应。
密码
第二个字段中保存的是真正加密的密码。可以在密码前人为地加入”!”或”*”改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。所有伪用户的密码都是”!!”或”*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是”!!”,代表这个用户没有密码,不能登录。
密码最后一次修改曰期
第三个字段是密码的修改日期。给的是时间戳。可以使用date - d '1970-01-01 时间戳 days'
来换算成我们能看懂的时间。
密码的两次修改间隔时间
第四个字段是密码的两次修改间隔时间。这个字段要和第三个字段相比。如果为0可以随意修改。如果为10则十天以后才能修改。
密码的有效期(和第三个字段相比)
第五个字段是密码的有效期,单位是天
密码修改到期前的警告天数
第六个字段是密码修改到期前的警告天数,当密码有效期快到了,每次登陆的时候就会警告修改密码
密码过期后的宽限天数
第七个字段是密码过期后的宽限天数。也就是密码过期后,用户如果还是没有修改密码,那么在宽限天数内用户还是可以登录系统的
账号失效时间
第八个字段是用法的账号失效时间。这里同样要写时间戳,也就是用 1970 年 1 日 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效,无法使用了。
第九个字段保留,未使用
/etc/group
这个文件是记录组 ID(GID) 和组名的对应文件。
格式如下,分成四个字段
1 | root:x:0: |
组名
第一个字段是组名
密码标志
和前面提到的一样x是密码标志,真正的密码存在/etc/gshadow里。
GID
第三个字段是用户组的ID,和UID的作用一样。
组中的用户
第四个字段表示的就是这个用户组中到底包含了哪些用户,如果该用户组是这个用户的初始组,则该用户不会写入这个字段
/etc/gshadow
这个文件就是保存组密码的文件。
文件格式如下一共四个字段
1 | root::: |
组名
组密码
第二个字段就是实际加密的组密码。注意,对于大多数用户来说,这个字段不是空就是”!”,代表这个组没有合法的组密码。
组管理员
组中的附加用户
添加用户
1 | useradd zhhhy #采取默认设置添加一个用户 |
修改密码
上文提到了没有添加密码的账户是无法登陆的,于是就要使用passwd这个命令进行修改密码和设置密码
1 | passwd [选项] 用户名 |
修改用户信息
1 | usermod [选项] 用户名 |
usermod和useradd的选项参数很相似,区别在于,add是在添加用户时候做设置,而mod是对已有的用户进行做修改
chage指令
用于修改/etc/shadow的第三到第八个字段
可以用作初始用户强制修改密码的功能
1 | chage -d 0 zhhhy |
删除用户
1 | userdel 用户名 |