4.用户、组和权限
1.Linux安全模型
资源分派:
- Authentication:认证,验证用户身份
- Authorization:授权,不同的用户设置不同权限
- Accouting |Audition:审计
当用户登录成功时,系统会自动分配令牌token,包括:用户标识和组成员等信息
1.1用户
Linux系统中每个用户是通过uid来唯一标识。
- 管理员root,0
- 普通用户1-60000自动分配
- 系统用户:centos6,1-499;centos7,1-999
- 登陆用户:centos6,500+;centos7,1000+
1.2用户组
Linux系统中可以将用户加入一个或多个用户组中,用户组是通过gid来唯一标识的。
- 管理员组root,0
- 普通组:
- 系统组:centos6,1-499;centos7,1-999
- 普通组:centos6,500+;centos7,1000+
1.3用户和组的关系
- 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
- 用户的附加组(supplementary group):一个用户可以属于零个或多个辅助组,附属组
范例:
[13:55:48 root@centos7 ~]#id postfix uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
1.4安全上下文
Linux安全上下文Context:运行中的程序,即进程,以进程发起者的身份运行,进程所能够访问资源的权限由进程发起者的权限决定
比如:分别以root和wang的身份运行cat /etc/shadow,得到的结果是不同的,资源能否被访问,是由运行着身份决定,而非程序本身
范例:
[14:02:41 root@centos7 ~]#su - wang Last login: Thu Apr 8 14:01:11 CST 2021 on pts/0 Hi,dangerous! [14:02:47 wang@centos7 ~]$cat /etc/shadow cat: /etc/shadow: Permission denied [14:02:52 wang@centos7 ~]$exit logout [14:02:55 root@centos7 ~]#cat /etc/shadow root:$6$dxtFO.cqDIya8w4Z$TpE4lkJFlLEnwlZ9Megon97iAGqCUmukQBYsg3f3bLnKXwSRcX673CURpn1pc032lvuz5LXuykddfyWZuj86k/::0:99999:7::: bin:*:18353:0:99999:7::: daemon:*:18353:0:99999:7::: adm:*:18353:0:99999:7::: lp:*:18353:0:99999:7:::
2.用户和组的配置文件
2.1用户和组的主要配置文件
- /etc/passwd:用户及其属性信息(名称、uid、主组id等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其信息
2.2passwd文件格式
[14:08:58 root@centos7 ~]#cat /etc/passwd | head -1 root:x:0:0:root:/root:/bin/bash
login name:登陆用户名(wang)
passwd:密码(x)
uid:用户身份编号(1000)
gid:登陆默认所在组编号(1000)
gecos:用户全名或注释
home directory:用户家目录
shell:用户默认使用shell
2.3shadow文件格式
登陆用户名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可以被变更)
密码再过几天必须变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后账号会被锁定
从1970年1月1日起,多少天后账号失效
密码的安全策略
- 足够长
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 使用随机密码
- 定期更换,不要使用最近曾经使用过的密码
范例:生成随机密码
[14:09:49 root@centos7 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12 CmsovRieC6h1[14:13:42 root@centos7 ~]#openssl rand -base64 9 0RFgCdAOCLmL [14:13:58 root@centos7 ~]#
2.4group文件格式
[14:14:31 root@centos7 ~]#cat /etc/group | grep webs webs:x:1002:nginx,varnish
群组名称
群组密码:通常不需要设定,密码是被记录在/etc/gshadow
gid:就是群组的id
以当前组为附加组的用户列表(逗号分隔)
2.5gshadow文件格式
群组名称
群组密码
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号分隔
3用户和组管理命令
用户管理命令
- useradd
- usermod
- userdel
组账号维护命令
- groupadd
- groupmod
- groupdel
3.1用户创建
useradd 命令可以创建新的Linux用户
格式
useradd [option] login
常见选项:
-u uid
-o 配合-u选项,不检查uid的唯一性
-g gid 指明用户所属基本组,可为组名,也可以gid
-c comment 用户的注释信息
-d home_dir 以指定的路径(不存在)为家目录
-s shell 知名用户的默认shell程序,可用列表在/etc/shells文件中
-G 为用户知名附加组,组必须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
范例:
[14:28:50 root@centos7 ~]#useradd -r -u 49 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache2
useradd命令默认值设定由/etc/default/useradd定义
[14:28:55 root@centos7 ~]#cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期的宽限期 EXPIRE= #对应/etc/shadow文件第8列,即用户账号的有效期 SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
新建用户的相关文件
- /etc/default/useradd
- /etc/skel/*
- /etc/login.defs
批量修改用户口令
echo username:passwd | chpasswd
3.2用户属性修改
usermod命令可以修改用户属性
格式:
usermod [option] login
常见选项:
-u uid 新uid
-g gid 新主组
-G group1;新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用 -a选项
-s shell;新的默认shell
-c 新的注释信息
-d 新家目录不会自动创建,若要创建新家目录并移动原家数据,同时使用-m选项
-l 新的用户名
-L lock指定用户,在/etc/shadow密码兰增加!
-U unlock指定用户,将/etc/shadow密码兰的!拿掉
-e YYYY-MM-DD 知名用户账号过期日期
-f 设定非活动期限,即宽限期
3.3删除用户
userdel可以删除Linux用户
常见选项:
-f 强制删除
-r 删除用的家目录和邮箱
3.4查看用户相关的ID信息
id命令可以查看用户的uid,gid等信息
id [option] [user]
常见选项:
-u 显示uid
-g 显示gid
-G 显示用户所属组的id
-n 显示名称,需配合ugG使用
[14:33:52 root@centos7 ~]#id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [14:41:46 root@centos7 ~]#id -u 0 [14:41:47 root@centos7 ~]#id -g 0 [14:41:51 root@centos7 ~]#id -G 0 [14:41:57 root@centos7 ~]#id -n id: cannot print only names or real IDs in default format [14:42:00 root@centos7 ~]#id -nu root
3.5切换用户或以其他用户身份执行命令
su:即switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:
su [options] [-] [user]
常见选项:
-l --login su -l username 相当于 su - username -c --command <command>
切换用户的方式:
- su username:非登陆时切换,既不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - username:登陆式切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换
说明:root su至其他用户无须密码,非root用户切换时需要密码
注意:su 切换新用户后,使用exit退回至旧的用户,而不要再用su 切换至旧的用户,否则会生成很多的bash子进程,环境可能会混乱
换个身份执行命令:
su [-] username -c 'COMMAND'
范例:
[14:42:07 root@centos7 ~]#su wang [14:51:27 wang@centos7 root]$whoami wang [14:51:41 wang@centos7 root]$exit exit [14:51:43 root@centos7 ~]#su - wang Last login: Thu Apr 8 14:51:27 CST 2021 on pts/0 Hi,dangerous! [14:51:51 wang@centos7 ~]$pwd /home/wang [14:51:54 wang@centos7 ~]$whoami wang [14:51:58 wang@centos7 ~]$
3.6设置密码
passwd可以修改用户密码
格式:
passwd [options] username
常见选项:
-d 删除指定用户密码
-l 锁定指定用户
-u 解锁制定用户
-e 强制用户下次登陆修改密码
-f 强制操作
-n 指定最短使用期限
-x 最大使用期限
-w 提前多少天开始警告
-i 非活动期限
--stdin 从标准输入接受用户密码,ubuntu无此选项
范例:非交互式修改用户密码
#此方式更通用,适用于各种Linux版本,如ubuntu [14:55:27 root@centos7 ~]#echo -e '123456\n123456' | passwd wang Changing password for user wang. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. #适用于红帽系列的Linux版本 [14:55:39 root@centos7 ~]#echo '123456' | passwd --stdin wang Changing password for user wang. passwd: all authentication tokens updated successfully.
范例:设置用户下次必须更改密码
[14:56:02 root@centos7 ~]#passwd -e wang Expiring password for user wang. passwd: Success [14:57:27 root@centos7 ~]#getent shadow wang wang:$6$ZO5Lohep$FcHn72Z7QFLo.g6NfJO9Ow0pzNDFgsxVw8zPBW/Mjc1b1XrsCJ/iR8SoUOnEjaw.dvkh8Ie4Uh3Nk5Peh.a8l.:0:0:99999:7::: [14:57:41 root@centos7 ~]#su - wang Last login: Thu Apr 8 14:51:51 CST 2021 on pts/0 Hi,dangerous! [14:58:33 wang@centos7 ~]$exit logout [14:58:51 root@centos7 ~]#su lisi [14:58:54 lisi@centos7 root]$su - wang Password: You are required to change your password immediately (root enforced) Changing password for wang. (current) UNIX password:
3.7修改用户密码策略
chage 可以修改用户密码策略
格式:
chage [option] login
常见选项:
-d last_day 更改密码的时间
-m min_days
-M max_days
-W warn_days
-I INACTIVE 密码过期后的宽限期
-l 显示密码策略
[15:02:59 root@centos7 ~]#chage -l Usage: chage [options] LOGIN Options: -d, --lastday LAST_DAY set date of last password change to LAST_DAY -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -h, --help display this help message and exit -I, --inactive INACTIVE set password inactive after expiration to INACTIVE -l, --list show account aging information -m, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS -M, --maxdays MAX_DAYS set maximum number of days before password change to MAX_DAYS -R, --root CHROOT_DIR directory to chroot into -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
3.9 创建组
groupadd 实现创建组
格式:
groupadd [option] group_name
常见选项:
-g 指明gid号
-r 创建系统组
范例:
groupadd -g 48 -r apache
3.11 删除组
groupdel 可以删除组
格式:
groupdel group
常见选项:
-f,--force 强制删除,即使是用户的主组也强制删除组
3.12 更改和查看组成员
groupmems 可以管理附加组的成员关系
格式:
groupmems [option] [action]
常见选项:
-g,--group groupname 更改为制定组(只有root)
-a,--add username 指定用户加入组
-d,--delete username 从组中删除用户
-p,--purge 从组中清楚所有成员
-l,--list 显示组成员列表
groups 可查看用户组关系
格式:
groups [option] [username]
范例:
[15:12:37 root@centos7 ~]#groupmems -l -g admins groupmems: group 'admins' does not exist in /etc/group [15:13:52 root@centos7 ~]#groupmems -l -g webs nginx varnish [15:13:58 root@centos7 ~]#groupmems -a wang -g webs [15:14:11 root@centos7 ~]#groupmems -l -g webs nginx varnish wang [15:14:22 root@centos7 ~]#groupmems -d wang -g webs [15:14:42 root@centos7 ~]#groups wang wang : wang [15:14:47 root@centos7 ~]#
4 文件权限管理
4.1 文件所有者和属组属性操作
4.1.1 设置文件的所有者 chown
chown 命令可以修改文件的属主,也可以修改文件属组
格式:
chown [option]... [owner][:[group]] file
用法说明:
owner 只修改所有者
owner:group 同时修改所有者和属组
:group 只修改属组,冒号也可以用.替换
--reference=rfile 参考指定的属性,来修改
-R 递归修改
范例:
[15:29:40 root@centos7 data]#cp /etc/fstab f1.txt [15:29:48 root@centos7 data]#ll f1.txt -rw-r--r--. 1 root root 595 Apr 8 15:29 f1.txt [15:29:55 root@centos7 data]#chown wang f1.txt [15:30:02 root@centos7 data]#ll f1.txt -rw-r--r--. 1 wang root 595 Apr 8 15:29 f1.txt [15:30:04 root@centos7 data]#chown :webs f1.txt [15:30:13 root@centos7 data]#ll f1.txt -rw-r--r--. 1 wang webs 595 Apr 8 15:29 f1.txt [15:30:15 root@centos7 data]#chown root.bin f1.txt [15:30:30 root@centos7 data]#ll f1.txt -rw-r--r--. 1 root bin 595 Apr 8 15:29 f1.txt
4.1.2 设置文件的属组信息 chgrp
chgrp 命令可以只修改文件的属组
格式:
chgrp [option] group file
选项:
-R 递归
范例:
[15:30:31 root@centos7 data]#ll f1.txt -rw-r--r--. 1 root bin 595 Apr 8 15:29 f1.txt [15:32:21 root@centos7 data]#chgrp webs f1.txt [15:32:28 root@centos7 data]#ll f1.txt -rw-r--r--. 1 root webs 595 Apr 8 15:29 f1.txt
4.2 文件权限
4.2.1 文件权限说明
文件的权限主要针对三类对象进行定义
owner 属主,u
group 属组,g
other 其他,o
注意:用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限
每个文件针对每类访问者都定义了三种常用权限
r Readable w Writable x excutable
对文件的权限:
r 可使用文件查看类工具,比如:cat,可以获取其内容 w 可修改其内容 x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
对目录的权限:
r 可以使用ls查看此目录中的文件列表 w 可在此目录中创建文件,也可删除此目录中的文件,而和被删除的文件权限无关 x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限 x 只给目录x权限,不给无执行权限的文件x权限
数学法的权限:
4.2.2 修改文件权限 chmod
格式:
chmod [option] mode[,mode] file
说明:
MODE:who opt permission who:u,g,0,a opt:+,-= permission:r,w,x 修改一类用户的所有权限 u= g= o= ug= a= u=,g= 修改指定一类用户某个权限 u+ u- g+ g- o+ o- a+ a- + - -R 递归修改权限
范例:面试题
执行 cp /etc/issue /data/dir/ 所需要的最小权限? /bin/cp 需要x权限 /etc/ 需要x权限 /etc/issue 需要r权限 /data 需要x权限 /data/dir/ 需要xw权限