linux-4. 权限管理(ACL,SetUID, SetGID, Sticky BIT, 文件系统属性chattr权限, 系统命令sudo权限)

一、ACL权限简介与开启

  1. 简介
    看这样一个情境:一个老师创建了一个目录:/project,有rwx权限,这个文件属于tgroup组,将班级所有的学生加入到这个组,有rwx权限,其他人没有权限,现在来了一个视听的学生,需要有rx的权限,如何解决?
    对于这个问题,用所有者,所属组,其他人的身份不能解决这个问题,于是就出现了ACL权限。
    ACL用于解决身份不足的问题

  2. 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. 常用命令

    # 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 文件或目录名
    
  2. 最大有效权限与删除ACL权限

    # 1. 最大有效权限mask
    # mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
    #	修改最大有效权限
    setfacl -m m:rx 文件或目录名
    # 设定mask权限为r-x。使用“m:权限”格式
    
  3. 默认的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

  1. 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文件
    
  1. SetGID针对目录的作用
  • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录中的有效组会变成此目录的属组
  • 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
  1. SetGID设定与取消命令
    # 1. 设定SetGID
    chmod 2755 文件名
    chmod g+s 文件名
    
    # 2. 取消SetGID
    chmod 755 文件名
    chmod g-s 文件名
    

3.3 Sticky BIT

  1. SBIT粘着位作用

    • 粘着位目前只对目录有效
    • 普通用户对此目录拥有w和x权限
    • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件;
      如果赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
    # 有SBIT的目录,经典的有/tmp目录
    ls -ald /tmp/
    # 显示drwxrwxrwt. 普通用户只能删除自己在/tmp/中建立的文件或目录,但不能删除其他用户建立的文件和目录
    
  2. 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
发布了140 篇原创文章 · 获赞 44 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章