正式班D19
2020.10.30星期五 正式班D19
10.5 用户权限管理之高级权限
10.5.1 ACL
-
定义
用命令setfacl设置的ACL权限就是ugo权限的扩展,可以用来细分Linux下的权限
可以让某一用户对某一文件具有某种权限
ACL:(Access Control List)独立于传统的ugo的rwx权限之外的具体权限设置,可以针对单一用户、单一文件或目录来进行rwx的权限控制,对于需要特殊权限的使用状况有一定帮助。
-
基本用法
修改属主的权限setfacl -m u::权限 文件
修改属组的权限setfacl -m g::权限 文件
修改其他的权限setfacl -m o::权限 文件
修改具体某一用户的权限setfacl -m u:用户名:权限 文件
修改具体某一组的权限setfacl -m g:组名:权限 文件
清除所有acl权限setfacl -b 文件
清除某一acl权限 setfacl -x u:用户名/g:组名 文件
特殊情况:
1、当其他人对文件没有权限,单独设置user01有r权限,user02有w权限,且不高于mask最高权限,user01、user02执行文件会按照单独设置的权限来执行(user01-->r,user02-->w)
2、当其他人对文件有rw权限,单独设置user01有r权限,user02有w权限,且不高于mask最高权限,user01、user02执行文件还是会按照单独设置的权限来执行(user01-->r,user02-->w)
3、当其他人对文件有rw权限,单独设置user01有r权限,user02有w权限,但高于mask最高权限,user01、user02执行文件会按照其他人权限来执行(user01-->rw,user02-->rw)
=========================修改具体某一用户的权限========================== [root@ccc ~]# echo 111 >> /a.py [root@ccc ~]# chmod o=- /a.py # 将其他用户的权限去掉,制造实验环境 [root@ccc ~]# ll /a.py -rw-r----- 1 root root 4 10月 30 09:30 /a.py [root@ccc ~]# getfacl /a.py getfacl: Removing leading '/' from absolute path names # file: a.py # owner: root # group: root user::rw- group::r-- other::--- [root@ccc ~]# setfacl -m u:zzz:r /a.py # 单独给其他用户zzz加上文件/a.py的r读权限 [root@ccc ~]# getfacl /a.py getfacl: Removing leading '/' from absolute path names # file: a.py # owner: root # group: root user::rw- user:zzz:r-- group::r-- mask::r-- other::--- [root@ccc ~]# useradd cjx [root@ccc ~]# setfacl -m u:cjx:w /a.py # 单独给其他用户cjx加上文件/a.py的w写权限 [root@ccc ~]# su - zzz -c "cat /a.py" 111 [root@ccc ~]# su - cjx -c "echo 222 >> /a.py" [root@ccc ~]# su - zzz -c "cat /a.py" 111 222 ==========================修改具体某一组的权限=========================== [root@ccc ~]# setfacl -m g:nice:r /a.py setfacl: Option -m: 无效的参数 near character 3 # 设置的组必须存在 [root@ccc ~]# groupadd nice [root@ccc ~]# setfacl -m g:nice:r /a.py # 单独给组nice加上文件/a.py的r读权限 [root@ccc ~]# setfacl -m g::- /a.py # 将文件/a.py的主组权限全部拿掉,制作环境 [root@ccc ~]# getfacl /a.py getfacl: Removing leading '/' from absolute path names # file: a.py # owner: root # group: root user::rw- user:zzz:r-- user:cjx:-w- group::--- group:nice:r-- mask::rw- other::--- [root@ccc ~]# useradd user01 [root@ccc ~]# useradd user02 [root@ccc ~]# gpasswd -a user01 root 正在将用户“user01”加入到“root”组中 [root@ccc ~]# gpasswd -a user02 nice 正在将用户“user02”加入到“nice”组中 [root@ccc ~]# su - user01 -c "cat /a.py" # 主组root的用户user01没有任何权限 cat: /a.py: 权限不够 [root@ccc ~]# su - user02 -c "cat /a.py" # 组nice的用户user02有读权限 111 222 333 ============================mask值的作用=============================== [root@ccc ~]# chmod g=- /a.py # chmod改权限会导致一系列问题,应用setfacl修改 [root@ccc ~]# ll /a.py -rw-------+ 1 root root 8 10月 30 09:38 /a.py [root@ccc ~]# getfacl /a.py getfacl: Removing leading '/' from absolute path names # file: a.py # owner: root # group: root user::rw- user:zzz:r-- #effective:--- user:cjx:-w- #effective:--- group::r-- #effective:--- mask::--- other::--- [root@ccc ~]# su - zzz -c "cat /a.py" cat: /a.py: 权限不够 [root@ccc ~]# su - cjx -c "echo 333 >> /a.py" -bash: /a.py: 权限不够 [root@ccc ~]# setfacl -m m:rwx /a.py # mask决定能达到的最高权限 [root@ccc ~]# getfacl /a.py getfacl: Removing leading '/' from absolute path names # file: a.py # owner: root # group: root user::rw- user:zzz:r-- user:cjx:-w- group::r-- mask::rwx other::--- [root@ccc ~]# su - cjx -c "echo 333 >> /a.py" [root@ccc ~]# [root@ccc ~]# su - zzz -c "cat /a.py" 111 222 333
-
default继承
仅改用户对某文件夹的权限不会作用到以后创建的子文件或子文件夹
要用d赋予继承权限
注:仅作用到之后创建的文件,对已经创建的不做修改
[root@ccc ~]# mkdir /test [root@ccc ~]# setfacl -m u:cjx:rwx /test/ # 仅改文件夹ACL [root@ccc ~]# getfacl /test getfacl: Removing leading '/' from absolute path names # file: test # owner: root # group: root user::rwx user:cjx:rwx # 注意此行 group::r-x mask::rwx other::r-x [root@ccc ~]# mkdir /test/aaa [root@ccc ~]# getfacl /test/aaa # 可以看到对创建的文件没有继承ACL getfacl: Removing leading '/' from absolute path names # file: test/aaa # owner: root # group: root user::rwx group::r-x other::r-x [root@ccc ~]# setfacl -m d:u:cjx:rwx /test # d赋予继承权限 [root@ccc ~]# mkdir /test/bbb [root@ccc ~]# touch /test/1.py [root@ccc ~]# getfacl /test/bbb/ # 可以看到新创建的目录有ACL getfacl: Removing leading '/' from absolute path names # file: test/bbb/ # owner: root # group: root user::rwx user:cjx:rwx group::r-x mask::rwx other::r-x default:user::rwx default:user:cjx:rwx default:group::r-x default:mask::rwx default:other::r-x [root@ccc ~]# getfacl /test/1.py # 新建的文件也有ACL getfacl: Removing leading '/' from absolute path names # file: test/1.py # owner: root # group: root user::rw- user:cjx:rwx #effective:rw- group::r-x #effective:r-- mask::rw- other::r-- [root@ccc ~]# getfacl /test/aaa # 对之前创建的目录或文件不做修改 getfacl: Removing leading '/' from absolute path names # file: test/aaa # owner: root # group: root user::rwx group::r-x other::r-x
10.5.2 特殊属性
-
+a # 只允许追加
+i # 禁止任何修改
+A # 不更改访问时间
去掉的方法:
-a
-i
-A
```python
[root@ccc test]# touch {1..3}.txt
[root@ccc test]# chmod 000 {1..3}.txt
[root@ccc test]# lsattr /test/ # 查看文件属性
---------------- /test/1.txt
---------------- /test/2.txt
---------------- /test/3.txt
[root@ccc test]# chattr +a 1.txt # 只允许追加
[root@ccc test]# chattr +i 1.txt #
[root@ccc test]# lsattr 1.txt
----ia---------- 1.txt
[root@ccc test]# chattr -i 1.txt #
[root@ccc test]# lsattr 1.txt
-----a---------- 1.txt
[root@ccc test]# chattr +i 2.txt # 禁止任何修改
[root@ccc test]# chattr +A 3.txt # 不更改访问时间
[root@ccc test]# lsattr /test/
-----a---------- /test/1.txt
----i----------- /test/2.txt
-------A-------- /test/3.txt
[root@ccc test]# echo 111 >> 1.txt
[root@ccc test]# echo 111 >> 1.txt
[root@ccc test]# cat /test/1.txt
111
111
[root@ccc test]# rm -rf /test/1.txt
rm: 无法删除"/test/1.txt": 不允许的操作
[root@ccc test]# echo 222 > 1.txt
-bash: 1.txt: 不允许的操作
[root@ccc test]# echo 111 >> 2.txt
-bash: 2.txt: 权限不够
[root@ccc test]# echo 222 > 2.txt
-bash: 2.txt: 权限不够
[root@ccc test]# rm -rf /test/2.txt
rm: 无法删除"/test/2.txt": 不允许的操作
[root@ccc test]# stat 3.txt
文件:"3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:803h/2051d Inode:4831802 硬链接:1
权限:(0000/----------) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2020-10-30 11:29:51.386353314 +0800
最近更改:2020-10-30 11:29:51.386353314 +0800
最近改动:2020-10-30 11:31:51.742208197 +0800
创建时间:-
[root@ccc test]# cat 3.txt
[root@ccc test]# stat 3.txt
文件:"3.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:803h/2051d Inode:4831802 硬链接:1
权限:(0000/----------) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2020-10-30 11:29:51.386353314 +0800
最近更改:2020-10-30 11:29:51.386353314 +0800
最近改动:2020-10-30 11:31:51.742208197 +0800
创建时间:-
```
10.6 su与sudo
root拥有所有权限 -------->sudo------分配部分管理权限 ------------->普通用户
普通用户在经过sudo授权后,执行命令时必须加上sudo前缀,如果需要输入密码,输入的是用户的密码
10.6.1 su
-
切换用户身份:从一个用户切换到另一个用户
-
Linux中shell分为两种级别:
登陆级别shell:
输入账号密码登陆进来
su - 用户名(管理员root切换到普通用户无需输入密码,反之需要)
非登录级别shell:
su 用户名
-
登陆级别不同,加载的配置文件不一样
登陆级别shell:/etc/profile--->/etc/profile.d/*.sh--->/.bash_profile--->/.bashrc--->/etc/bashrc
非登录级别shell:~/.bashrc--->/etc/bashrc--->/etc/profile.d/*.sh
如果想针对所有用户,以及登陆与非登录shell设置统一的配置,应写到/etc/bashrc,后加export PATH
生效方式:①source /etc/bashrc ②重启
/etc/profile---------------------------->登陆级别的所有用户
-
切换身份执行命令
su - 用户名 -c "命令"
10.6.2 sudo
-
提权:不切换用户,即用户身份不变,但是可以获取root的部分权限
-
在管理员下修改配置文件/etc/sudoers来分配
vim /etc/sudoers # 风险高
visudo # 不用接文件路径
格式:用户 主机ip或主机名=(转换的用户身份) 管理命令
如: ccc ALL=(ALL) /usr/sbin/ifconfig
ccc ALL=(ALL) NOPASSWD:/usr/ifconfig
ccc ALL=(ALL) NOPASsWD:命令的别名
ccc ALL=(ALL) ALL,!/usr/bin/vim /test/a.txt # 以root身份运行所有除了/test/a.txt
ALL代表的是服务端的IP地址,与客户端无关
格式:组 主机ip或主机名=(转换的用户身份) 管理命令
如: %devops ALL=(ALL) /usr/sbin/ifconfig # 系统里建组,将用户加进去
ADMINS ALL=(ALL) NOPASSWD:/usr/ifconfig # 别名,不用将用户加组
-
visudo -c # 检查配置是否正确
-
sudo -l # 查看权限
10.6.3 总结
-
su
①特点:直接切换到root账号下进行操作,输入的是root的密码
②优点:简单粗暴
③缺点:root密码泄露,普通用户获取了所有管理员权限
-
sudo
①特点:在当前普通用户下进行操作,不需要切换到root账号下,执行命令格式为:sudo 命令,输入的是普通用户自己的密码
②优点:root密码没有泄露,普通用户有部分root权限
③缺点:相对复杂