1 用户信息
1.1 /etc/passwd
linux上用户的信息保存在/etc/passwd中,看文件名会以为这里保存的是用户密码,但实际上用户密码保存在另一个文件中。
/etc/passwd
文件中每行保存一个用户的信息,例如:
root:x:0:0:root:/root:/bin/bash
一个用户的信息由7个字段构成,字段之间以分号分割,每个字段的含义依次是:
- 用户名:root
- 用户密码:x
- 用户ID:0
- 用户组ID:0
- 描述信息:root
- 家目录:/root
- 默认shell:/bin/bash
这里的用户密码并不是真正的密码,而只是个占位符。用户ID和用户组ID表明当前用户在某个用户组中。默认shell是该用户登录当前系统的shell。
1.2 /etc/shadow
真正的用户密码保存在/etc/shadow中,该文件同样是以分号分割保存每个用户的密码信息,例如:
feng:$1$oVHGoMfI$CNgwZ9QtQrwLRbFad.yGN1:20047:0:99999:7:::
- 用户名:此处就是feng
- 加密密码:保存的是单向不可逆的密码,此处就是 1 1 1oVHGoMfI$CNgwZ9QtQrwLRbFad.yGN1
- 最后一次修改密码的时间:此处就是20047,含义是从1970年1月1日到最后一次修改密码的天数,可以用命令
date -d "1970-01-01 20047 days"
换算为实际的日期 - 最小修改时间间隔:表示从变更密码的日期算起,多少天内无法再次修改密码,此处是0,表示没有限制
- 密码有效期:表示密码被修改后多少天之内必须再次修改,默认值为99999,也就是273年
- 密码需要变更前的警告天数:密码在快过期时,系统会给出警告,默认值为7,表示密码在过期前7天会给出警告
- 密码过期后的宽限天数:密码过期后可以留一定的宽限天数,如果再过了宽限天数,系统将不再允许此账号登录
- 账号失效时间:表示从1970年1月1日过多少天后账号失效
- 保留字段:留空
所以,/etc/shadow文件除了保存密码,其次就是密码相关的一些策略。
对于密码,开头三个字符表示使用的散列算法:
- 1 1 1:MD5-based
- 2 2 2:Blowfish
- 5 5 5:SHA-256
- 6 6 6:SHA-512
另外,当密码字段是双感叹号时表示未设置。
密码相关的一些策略可以使用passwd
命令完成。
passwd命令常用的选项:
- -S:输出某个用户的状态,其实就是从/etc/shadow读取某个用户的信息,然后将部分字段翻译为可读的内容
- -n:密码的最短生命周期,其实就是设置
最小修改时间间隔
- -x:密码的最长生命周期,其实就是设置
密码有效期
- -w:密码失效前发送警告的天数,其实就是设置
密码需要变更前的警告天数
- -i:设置
密码过期后的宽限天数
2 用户组信息
2.1 /etc/group
用户组信息保存在/etc/group中,该文件的字段较少:
- 用户组名称
- 密码,与/etc/passwd一样,是个占位符
- 用户组ID
- 该组中除了默认用户以外的其他用户
2.2 /etc/gshadow
同样的,与/etc/shadow一样,/etc/gshadow保存的是用户组的密码:
- 用户组名称
- 组密码,如果为
!
表示没有设置组密码 - 组管理员用户名,较少使用
- 该组中除了默认用户以外的其他用户
3 用户sudo信息
sudo是Linux中允许非root用户运行需要超级用户权限的命令的一种机制,而sudo的配置文件记录的就是允许非root用户执行什么操作。
Linux中sudo的配置文件分为两个部分:一个是全局配置文件/etc/sudoers,另一个是配置目录/etc/sudoers.d/。作为管理的角度来说,通常建议直接是在/etc/sudoers.d/目录下新增配置文件,然后开启/etc/sudoers配置文件中的加载/etc/sudoers.d的配置。
3.1 用户sudo信息的修改
为了安全,/etc/sudoers配置文件的权限是440,也就是说,只允许root用户和root用户组的用户查看,难道说,该文件不允许修改?
从权限的角度来说,确实是这样,但是,由于root用户是超级用户,拥有对所有文件的完全访问权限,换句话说,即便文件权限是000,root用户依然可以查看和修改。
/etc/sudoers文件的错误修改可能造成系统崩溃,建议使用visudo
命令修改/etc/sudoers文件。
3.2 /etc/sudoers配置文件格式
/etc/sudoers配置文件主要包含三个部分:
- 别名配置:定义一些别名,用于简化后续的配置,别名配置包含几种类型,Host_Alias(主机别名)、User_Alias(用户别名)、Cmnd_Alias(命令别名)
- 默认配置:用
Defaults
关键字定义的一些默认配置,例如,Defaults secure_path=/bin
表示sudo命令搜索可执行文件的路径 - 规则配置:定义哪些用户可以执行哪些命令。
因此,一般只需要配置规则就行。
通常,规则配置部分会包含默认两条规则:
- root ALL=(ALL) ALL:root用户可以执行所有命令
- %wheel ALL=(ALL) ALL:wheel用户组可以执行所有命令
wheel前面%
表示wheel是用户组名。
规则配置的格式为user host = (runas) command
,包含4个部分:
- user:用户名、用户组名或者用户别名
- host:主机名、主机别名或者ALL
- runas:ALL、用户别名或者具体的用户名
- command:命令、命令别名或者ALL
所以,user host = (runas) command
的含义是:允许用户(user)在主机(host)上以用户(runas)的名义执行命令(command)。