Linux用户、组和权限管理
内容概述
- Linux的安全模型
- 用户和组相关文件
- 用户和组管理命令
- 理解并设置文件权限
- 默认权限
- 特殊权限
- 文件访问控制列表
1 Linux安全模型
资源分派:
-
Authentication:认证,验证用户身份 (用户名密码,指纹,面容等)
-
Authorization:授权,不同的用户设置不同权限
-
Accouting|Audition:审计
当用户登录成功时,系统会自动分配令牌 token,包括:用户标识和组成员等信息
1.1 用户
Linux中每个用户是通过 User Id (UID)来唯一标识的
-
管理员:ID为0的用户,一般默认为root用户。
-
普通用户:1-60000 自动分配
-
系统用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后)
对守护进程获取资源进行权限分配,是给各种service用的账号
-
登录用户:500+ (CentOS6以前), 1000+(CentOS7以后)
给用户进行交互式登录使用
-
1.2 用户组
Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。
Linux中,用户组默认不起实质性的作用,除非针对一个用户组进行明确的授权。
所以,即便一个用户被添加到了root组,也不能有root用户的全部权限,也只是普通用户。
-
管理员组:root, 0
-
普通组:
- 系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配
- 普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用
1.3 用户和组的关系
- 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
- 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组
Linux中允许用户和用户组同名,Windows中则不允许。
范例:
[root@centos8 ~]#id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
其中:
uid
为用户的User ID
gid
为用户的主组
groups
中都一个为主组,后面的是附加组
1.4 安全上下文
Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份
资源能否能被访问,是由运行者的身份决定,非程序本身
比如:分别以root 和wang 的身份运行 /bin/cat /etc/shadow
,得到的结果是不同的;
范例:
wang@centos8 ~]$cat /etc/shadow
cat: /etc/shadow: Permission denied
[root@centos8 ~]#cat /etc/shadow
root:$6$zsrWEC56PrKifAEz$hylCuGySe.H6l6O2MRvbtqy/VZgnZbau.y57dE85.YHq03MTJVV4UvQ
VIDcYA1IJzbgpWE0vTU.BtPHLbNBNn0:18246:0:99999:7:::
bin:*:18027:0:99999:7:::
daemon:*:18027:0:99999:7:::
adm:*:18027:0:99999:7:::
lp:*:18027:0:99999:7::
2 用户和组的配置文件
2.1 用户和组的主要配置文件
- /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其相关属性
2.2 /etc/passwd
文件格式
- login name:登录用名(wang)
- passwd:密码 (x),出于系统安全,密码储存在
/etc/shadow
- UID:用户身份编号 (1000)
- GID:登录默认所在组编号 (1000)
- GECOS:用户全名或注释
- home directory:用户主目录 (/home/wang)
- shell:用户默认使用shell (/bin/bash)
cat /etc/passwd
<Login Name>:<Password(x)>:<UID>:<GID>:<GECOS>:<Home Directory>:<Shell>
2.3 /etc/shadow
文件格式
- 登录用名
- 用户密码:一般用sha512加密
- 从1970年1月1日起到密码最近一次被更改的时间
- 密码再过几天可以被变更(0表示随时可被变更)
- 密码再过几天必须被变更(99999表示永不过期)
- 密码过期前几天系统提醒用户(默认为一周)
- 密码过期几天后帐号会被锁定
- 从1970年1月1日算起,多少天后帐号失效
更改密码加密算法:
authconfig --passalgo=sha256 --update
密码的安全策略
- 足够长
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 使用随机密码
- 定期更换,不要使用最近曾经使用过的密码
范例:生成随机密码
[root@centos8 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12
sFg6C8g5FAfe
[root@centos8 ~]#openssl rand -base64 9
hvMkPmAyIrXMQInt
#生成随机密码
[root@centos8 ~]#yum -y install expect
[root@centos8 ~]#mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2
#生成随机密码的网站:
https://suijimimashengcheng.51240.com
2.4 /etc/group
文件格式
- 群组名称:就是群组名称
- 群组密码:通常不需要设定,密码是被记录在
/etc/gshadow
- GID:就是群组的 ID
- 以当前组为附加组的用户列表(分隔符为逗号)
2.5 /etc/gshdow
文件格式
- 群组名称:就是群的名称
- 群组密码:
- 组管理员列表:组管理员的列表,更改组密码和成员
- 以当前组为附加组的用户列表:多个用户间用逗号分隔
2.6 文件操作
- vipw和vigr
- pwck和grpck
3 用户和组管理命令
用户管理命令:
- useradd
- usermod
- userdel
用户组帐号维护命令:
- groupadd
- groupmod
- groupdel
3.1 用户创建
useradd 命令可以创建新的Linux用户
格式:
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
常见参数:
- -u UID
- -o 配合-u 选项,不检查UID的唯一性
- -g GID 指明用户所属基本组,可为组名,也可以GID
- -c "COMMENT“ 用户的注释信息
- -d HOME_DIR 以指定的路径(不存在)为家目录
- -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
- -G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
- -N 不创建私用组做主组,使用users组做主组
- -r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
- -m 创建家目录,用于系统用户
- -M 不创建家目录,用于非系统用户
- -p 指定加密的密码
例如:
[root@rocky8 ~]#rpm -q --scripts postfix
preinstall scriptlet (using /bin/sh):
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -
r -u 89 postfix 2>/dev/null
useradd 命令默认值设定由/etc/default/useradd
定义
[root@centos8 ~]#cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期后的帐号锁定的宽限期,-1表示不锁定
EXPIRE= #对应/etc/shadow文件第8列,即用户帐号的有效期
SHELL=/bin/bash
SKEL=/etc/skel #用于生成新建用户家目录的模版文件
CREATE_MAIL_SPOOL=ye
显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GRO
创建新用户的时候,会默认将/etc/skel/
下的文件拷贝到用户的家目录。
root@admin:~# ls -a /etc/skel/
. .. .bash_logout .bashrc .profile
#创建test用户,同时创建家目录并显示所有文件
root@admin:~# useradd -m test
root@admin:~# ls -a /home/test
. .. .bash_logout .bashrc .profile
#在 /etc/skel创建一个临时测试文件
root@admin:~# touch /etc/skel/abc
root@admin:~# ls -a /etc/skel/
. .. abc .bash_logout .bashrc .profile
#创建test1用户,同时创建家目录并显示所有文件
root@admin:~# useradd -m test2
root@admin:~# ls -a /home/test2/
. .. abc .bash_logout .bashrc .profile
每个用户都有自己的邮箱信息,会在用户创建的时候储存在/var/spool/mail/<User>
中。
3.2 用户属性修改
修改用户属性
格式:
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
常见选项:
- -u UID: 新UID
- -g GID: 新主组
- -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
- -s SHELL:新的默认SHELL
- -c 'COMMENT':新的注释信息
- -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
- -l login_name: 新的名字
- -L: lock指定用户,在/etc/shadow 密码栏的增加 !
- -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
- -e YYYY-MM-DD: 指明用户账号过期日期
- -f INACTIVE: 设定非活动期限,即宽限
3.3 删除用户
删除Linux 用户,若所属用户组仅有此用户,则会一并删除。
格式:
userdel [-r] [-f] [用户帐号]
常见参数:
- -f, --force 强制
- -r, --remove 删除用户家目录和邮
范例: 强制删除用户和数据
root@centos8 ~]#useradd test
[root@centos8 ~]#id test
uid=1001(test) gid=1001(test) groups=1001(test)
#在另一终端用test登录
[root@centos8 ~]#su - test
[test@centos8 ~]$
#删除正在登录的用户失败
[root@centos8 ~]#userdel -r test
userdel: user test is currently used by process 29909
[root@centos8 ~]#id test
uid=1001(test) gid=1001(test) groups=1001(test)
#强制删除用户
[root@centos8 ~]#userdel -rf test
userdel: user test is currently used by process 29909
[root@centos8 ~]#id test
id: ‘test’: no such us
3.4 删除用户组
删除用户组
语法:
groupdel [群组名称]
用户组里面有用户,必须先把用户移动或删除了,才能删除组。
3.5 查看用户相关的ID信息
查看用户的UID,GID等信息
语法:
id [OPTION]... [User Name]
常见参数:
- -u: 显示UID
- -g: 显示GID
- -G: 显示用户所属的组的ID
- -n: 显示名称,需配合ugG使用