title: linux基础_4.权限管理date: 2020-10-11 09:22:17
tags: linux
categories: linux基础

ACL权限

Access Control List (访问控制列表)它在UGO权限管理的基础上为文件系统提供额外的、更灵活的权限管理机制。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

查看分区ACL权限是否开启

  1. 查看分区
    df -h linux基础-4-权限管理 - 图1
  1. 查看ACL权限
    dumpe2fs -h /dev/sda2 查看分区情况 linux基础-4-权限管理 - 图2

临时开启分区ACL权限
  1. mount -o remount,acl /#重新挂载根分区,并加入ACL权限

永久生效
  1. 1.修改/etc/fstab文件,加,acl
  2. UUID=910dedc7-2b9e-4e2b-a82e-db2dda090854 / xfs defaults,acl 0 0
  3. 2.重新挂载mount -o remount /或重启系统

设定与查看ACL权限

  1. setfacl 选项 文件名
  2. -m 设定ACL权限
  3. -x 删除指定的ACL权限
  4. -b 删除所有的ACL权限
  5. -d 设定默认的ACL权限
  6. -k 删除默认--
  7. -R 递归设定ACL权限

假设:
linux基础-4-权限管理 - 图3

设置下条件

linux基础-4-权限管理 - 图4

为用户设定ACL权限
  1. setfacl -m u:用户名:权限 文件名

setfacl -m u:st:rx project/

为组分配ACL权限
  1. setfacl -m g:组名:权限 文件名

setfacl -m g:tgroup2:rwx project/

linux基础-4-权限管理 - 图5

  • 最大权限mask
    修改mask权限,不影响所有者权限(user),影响ACL权限(st)和其所属组权限(tgroup,tgroup2)

调整最大用户权限mask
  1. setfacl -m m:权限 目录/文件

setfacl -m m:rx project/

linux基础-4-权限管理 - 图6

删除ACL权限
  1. setfacl -x u:用户名 文件
  2. -x g:组名 文件
  3. -b 文件 删除文件下所有ACL权限

setfacl -x g:tgroup2 project 删除组tgroup2的ACL权限

linux基础-4-权限管理 - 图7

setfacl -b project/ 删除project下所有ACL权限

linux基础-4-权限管理 - 图8

文件夹有ACL权限时,会有一个+

linux基础-4-权限管理 - 图9

递归设定ACL权限

父目录设定ACL,子目录和子文件也会拥有相同ACL权限

  1. setfacl -m u:用户名:权限 -R 文件名/目录

setfacl -m u:st:rx -R project/

linux基础-4-权限管理 - 图10

假设在project目录递归创建ACL权限后,该目录下所有子目录文件均受影响但是对于新创建的文件不受影响。

linux基础-4-权限管理 - 图11

设定默认ACL权限

新建文件/目录遵守父目录ACL权限设定

  1. setfacl -m d:u:用户名:权限 文件名 #d:default 新文件遵守父目录权限

setfacl -m d:u:st:rx -R project/

linux基础-4-权限管理 - 图12

文件默认没有执行权限,对于目录

linux基础-4-权限管理 - 图13

查看project目录acl权限

linux基础-4-权限管理 - 图14

文件特殊权限

查看默认文件权限时显示数字有四位,如下

linux基础-4-权限管理 - 图15

后三位与ugo权限有关,反转之后是755(—- -w- -w-到rwx r-x r-x)。首位就是特殊权限代表的数字和(SUID4,SGID2,SBIT 1)

SetUID: u+s

执行者执行时暂时获得文件属主身份(类似sudo root可执行命令)

条件:

  • 可执行的二进制程序,可设定SUID权限

  • 执行者需对程序有x权限

  • SUID权限只在执行程序过程中有效

eg. passwd拥有SetUID权限(标志s),普通用户在执行passwd命令时暂时拥有root权限,将密码写入shadow中

linux基础-4-权限管理 - 图16

cat没有setUID权限,查看shadow文件警告权限不足

设定SUID权限
  1. chmod 4755 文件名 #设定SUID权限
  2. chmod 755 文件名 #取消SUID权限
  3. chmod u+s 文件名
  4. chmod u-s 文件名

linux基础-4-权限管理 - 图17

注意
  1. 关键目录严格控制写权限,eg./,/usr,/bin
  2. 白字红底-错误文件,危险文件,权限过高的文件
  3. 错误示范:给vim添加SUID权限,使得普通用户可修改任意文件
  4. 对系统中默认应具有SUID权限的文件作一列表,定时检查是否有之外的文件被赋予SUID权限

SetGID:g+s

执行者执行时组身份暂时升级为文件属组身份,针对对象有二进制文件和目录两类

  1. chmod 2755 文件名
  2. chmod 755 文件名
  3. chmod g+s 文件名
  4. chmod g-s 文件名

针对二进制文件

可执行的二进制程序,可设定SGID权限

条件:

  • 执行者需对程序有x权限
  • SGID权限只在执行程序过程中有效

eg. locate命令。普通用户对locate有执行权限,locate具有SGID权限,普通用户执行locate时,所属组变为slocate,对数据库有r权限,而普通用户对数据库权限为0,命令结束后所属组重新变为原来组

linux基础-4-权限管理 - 图18

针对目录

在此目录有效组会变为目录所属组

条件:

  • 普通用户对SGID目录有rx权限,才能进入
  • 普通用户对目录有写权限时,新建文件默认属组为该目录属组

实例:

  1. 创建目录test添加SGID权限,给目录添加写权限。
  2. 切换至普通用户jen,jen对目录有rxw权限,可进入,且新建的文件默认属组为test的所属组root

linux基础-4-权限管理 - 图19

  1. 若普通用户对目录不具备rx权限则无法进入目录

linux基础-4-权限管理 - 图20

Sticky BIT文件黏着位:o+t(针对目录)

粘着位,限制普通用户(对root无效)。若普通用户对目录有w权限,只能删除自己建立的文件,不能删除其他用户的文件。

条件:

  • 只针对目录有效
  • 普通用户对该目录有wx权限,可写入
  • 粘着位,限制普通用户,对root无效。普通用户有w权限,只能删除自己建立的文件,不能删除其他用户文件
  1. chmod 1755 目录名
  2. chmod 755 目录名
  3. chmod o+t 目录名
  4. chmod o-t 目录名

常见有粘着位的目录-/tmp

linux基础-4-权限管理 - 图21

测试一下:

linux基础-4-权限管理 - 图22

注意

特殊权限位 _ugo(第一位)一般不为7,针对对象不同,SUID-二进制文件,SGID-文件/目录,SBIT-针对目录

文件系统属性权限chattr

设置文件系统属性chattr(文件锁)

  1. chattr [+-=][选项] 文件或目录名
  2. +:增加权限
  3. -:删除权限
  4. =:赋予权限
  5. 选项:
  6. +i 针对文件:不允许修改文件(删除,改名,修改数据),对root有效
  7. 针对目录:允许 修改目录下文件数据,不允许建立和删除文件
  8. +a 文件:只能在文件中追加数据(不能使用vi等编辑器,只能使用echo追加),
  9. 不能删除修改数据,相当于锁现有数据,可写入
  10. 目录:允许在目录中建立修改文件,不允许删除

+i 针对文件:

位文件myfile添加文件锁 chattr +i myfile。不允许再修改文件(删除,改名,修改数据),对root有效

linux基础-4-权限管理 - 图23,

查看权限变化,ll无效,需使用lsattr -a 文件名

linux基础-4-权限管理 - 图24

尝试再写入,失败。也无法删除,移动/重命名也不可以。

linux基础-4-权限管理 - 图25

+i针对目录

对目录project赋予-i权限

linux基础-4-权限管理 - 图26

可看到实际上子文件/目录并未获得-i权限,所以可以修改文件内数据,但是无法删除/重命名/移动

linux基础-4-权限管理 - 图27

也不可创建文件/目录

linux基础-4-权限管理 - 图28

+a针对文件

对文件ccc写入内容后,加a权限

linux基础-4-权限管理 - 图29

不可覆盖写入,即不能修改原数据,但可以追加

linux基础-4-权限管理 - 图30

不能使用vim编辑修改,即便是追加

linux基础-4-权限管理 - 图31

查看文件系统属性lsattr

  1. ls 选项 文件名
  2. -a 显示所有文件
  3. -d 所目标是目录,仅列出目录属性而非子文件

sudo

  1. sudo操作对象是系统命令,其他-普通文件
  2. root将命令权限赋予普通用户,
  1. visudo #修改/etc/sudoers文件

linux基础-4-权限管理 - 图32

修改格式:

参照

  1. root ALL=(ALL) ALL
  2. %wheel ALL=(ALL) ALL
  3. 用户名 被管理主机地址/网段=(转换后可使用身份,默认root 授权命令(绝对路径)
  • 此处被管理ip指允许某用户在登录到该ip的主机上使用任意命令,而非允许源ip是该ip的主机登陆任意主机执行任意命令。定义的是目的ip而非来源ip。

实例:

linux基础-4-权限管理 - 图33

  1. eg.
  2. st ALL=/sbin/shutdown -r now #授权st用户重启服务器
  3. st ALL=/usr/bin/vim #vim 权限,实际上慎重赋予普通用户vim权限,转换身份后为root

linux基础-4-权限管理 - 图34

此时st用户关机不再需要sudo shutdown -r now 而是直接使用命令shutdown -r now

sudo -l命令可查看用户被赋予sudo权限的命令,需要输入用户密码

linux基础-4-权限管理 - 图35