一、ACL权限简介与开启
-
简介
看这样一个情境:一个老师创建了一个目录:/project,有rwx权限,这个文件属于tgroup组,将班级所有的学生加入到这个组,有rwx权限,其他人没有权限,现在来了一个视听的学生,需要有rx的权限,如何解决?
对于这个问题,用所有者,所属组,其他人的身份不能解决这个问题,于是就出现了ACL权限。
ACL用于解决身份不足的问题 -
ACL权限开启
# 1. 查看分区ACL权限是否开启 # dumpe2fs命令是查询指定分区详细文件系统信息的命令 # -h:仅显示超级块中信息,而不显示磁盘块组的详细信息 dumpe2fs -h /dev/sda1 # 查看Default mount options中分区是否支持acl权限 # 2. 临时开启分区ACL权限 # 重新挂载根分区,并挂载加入acl权限 mount -o remount,acl / # 3. 永久开启分区ACL权限 # 编辑/etc/fstab,加入acl权限 vim /etc/fstab /dev/sda1 / ext4 defaults,acl 1 1 # 重新挂载文件系统或重启动系统,使修改生效 mount -o remount /
二、查看与设定ACL权限
1. ACL权限
-
常用命令
# 1. 查看ACL命令 # 查看acl权限 getfacl 文件名 # 2. 设定ACL权限的命令 setfacl 选项 文件名 # -m: 设定ACL权限 # -x:删除指定的ACL权限 # -b:删除所有的ACL权限 # -d:设定默认ACL权限 # -k:删除默认ACL权限 # -R:递归设定ACL权限 mkdir /project adduser px1 adduser px2 groupadd tgroup gpasswd -a px1 tgroup gpasswd -a px2 tgroup chown root:tgroup /project chmod 770 /project adduser st # 给用户设定权限是u,给组设定权限是g # 给用户st赋予目录/project/的r-x权限 setfacl -m u:st:rx /project/ # 3. 给用户组设定ACL权限 groupadd tgroup2 setfacl -m g:tgroup2:rwx project/ # 4. 删除ACL权限 # 删除指定用户的ACL权限 setfacl -x u:用户名 文件或目录名 # 删除指定用户组的ACL权限 setfacl -x g:组名 文件或目录名 # 删除文件所有的ACL权限 setfacl -b 文件或目录名
-
最大有效权限与删除ACL权限
# 1. 最大有效权限mask # mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限 # 修改最大有效权限 setfacl -m m:rx 文件或目录名 # 设定mask权限为r-x。使用“m:权限”格式
-
默认的ACL权限和递归ACL权限
# 1. 递归ACL权限 # 递归父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限 # -R:只能放在文件或目录名前 setfacl -m u:用户名:权限 -R 文件或目录名 # 2. 默认ACL权限 # 默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限 setfacl -m d:u:用户名:权限 目录名
三、文件特殊权限
3.1 SetUID
- 只有可以执行的 二进制程序 才能设定SUID权限
- 命令执行者对该程序拥有x权限
- 命令执行者在执行该程序时获得该程序文件属主的身份
- SetUID权限只在该程序执行过程中有效,也就是身份改变只在程序执行过程中有效
# 1. passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
# 修改密码时要向/etc/shadow文件中写入内容,但是查看/etc/shadow的文件属性时,是什么权限都没有的,
# 但passwd有了SetUID权限,可以对文件/etc/shadow文件进行写操作,所有普通用户可以修改自己的密码
ls -al /usr/bin/passwd
# 2. 设定SetUID的方法,以下两种均可
chmod 4755 文件名
chmod u+s 文件名
# 3. 取消SetUID的方法,以下两种均可
chmod 755 文件史
chmod u-s 文件名
# 4. 危险的SetUID
- 关键目录应严格控制写权限。比如“/”,"/usr"等
- 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
# 5. 正常的SetUID权限是小写的s标志,但有时候会出现S标志,S标志表示:设置有问题,SetUID权限不生效
如给一个非二进制文件设置了SetUID权限,就会出现这种情况
3.2 SetGID
- SetGID针对文件的作用
-
只有可以执行的 二进制程序 才能设定SGID权限
-
命令执行者对该程序拥有x权限
-
命令执行者在执行该程序时,组身份升级为该程序文件的属组
-
SetGID权限只在该程序执行过程中有效,也就是组身份改变只在程序执行过程中有效
ls -al /usr/bin/locate # /usr/bin/locate命令权限为-rwx--s--x 1 root slocate: 有SetGID权限 # 在执行命令/usr/bin/locate时,会去读文件/var/lib/mlocate/mlocate.db ls -al /var/lib/mlocate/mlocate.db # /var/lib/mlocate/mlocate.db文件属性为-rw-r----- root slocate, 普通的用户没有读权限 # 但是当执行命令/usr/bin/locate时,由于SetGID权限会使用用户获得slocate组的权限, # 而slocate是有权限读取/var/lib/mlocate/mlocate.db文件
- SetGID针对目录的作用
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
- SetGID设定与取消命令
# 1. 设定SetGID chmod 2755 文件名 chmod g+s 文件名 # 2. 取消SetGID chmod 755 文件名 chmod g-s 文件名
3.3 Sticky BIT
-
SBIT粘着位作用
- 粘着位目前只对目录有效
- 普通用户对此目录拥有w和x权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件;
如果赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
# 有SBIT的目录,经典的有/tmp目录 ls -ald /tmp/ # 显示drwxrwxrwt. 普通用户只能删除自己在/tmp/中建立的文件或目录,但不能删除其他用户建立的文件和目录
-
SBIT设定与取消命令
# SBIT只能由root赋予 # 1. 设置SBIT chmod 1755 目录名 chmod o+t 目录名 # 2. 取消粘着位 chmod 777 目录名 chmod o-t 目录名
四、 文件系统属性chattr权限
# 1. chattr命令格式
chattr [+-=] [选项] 文件名或目录名
# +:增加权限
# -:删除权限
# =:等于某权限
# 选项:
i: 如果对文件设置i属性,那么不允许对文件进行删除、改名、也不能添加和修改数据;
如果对目录设置i属性,那么只能修改目录下文件的数据,但不能新建和删除文件。
a: 如果对文件设置a属性,那么只能在文件中增加数据,不能删除和修改数据;
如果对目录设置a属性,那么只能在目录中新建和修改文件,不能删除。
# 设置的权限对root也有效
# 2. 查看文件系统属性
lsattr 选项 文件名
# -a: 显示所有文件和目录
# -d: 若目标是目录,仅列出目录本身的属性,而不是子文件的
五、系统命令sudo权限
# 1. sudo权限
- root把本来只能超级用户执行的命令普通用户执行
- sudo的操作对象是系统命令
# 2. sudo使用授权
# 修改/etc/sudoers文件,以下两个命令都可以
visudo
vim /etc/sudoers
# root ALL=(ALL) ALL
# 用户名 被管理主机的地址= (可使用的身份) 授权命令(绝对路径)
# %wheel ALL=(ALL) ALL
# %组名 被管理主机的地址= (可使用的身份) 授权命令(绝对路径)
# eg: 授权sc用户可以重启服务器
sc ALL= /sbin/shutdown -r now
# eg:用户lisa可以运行任何命令在CUNETS网段的所有主机上。假设 CUNETS = 128.138.0.0/255.255.0.0
lisa CUNETS = ALL
# 3. 普通用户查看可用的sudo命令
sudo -l