一,ACL 权限
1.1 简介
【添加图片】
ACL权限简介:
但创建的一个用户的权限与属主(rwx),属组(rwx),其他人(—)不同时,也就是需要创建除属主,属组,其他人外的第四种用户是,则需要ACL权限。
查看分区ACL权限是否开启
我们前面的rwx是用户操作文件的权限,ACL本身也是用户操作文件的权限,但是是否可以支持ACL权限,不是说看文件或者用户是否支持,而是看文件所在的分区是否支持ACL权限。
一般是默认开启ACL权限的。
[root@markling ~]# dumpe2fs -h /dev/vda
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block while trying to open /dev/vda
Couldn't find valid filesystem superblock.
开启ACL权限
[root@markling ~]# vim /etc/fstab
1.2 查看与设定
1.2.1 查看ACL权限:
getfacle 文件名
1.2.2 设定ACL权限
setfacl 选项 文件名
选项:
-m #设定ACL权限
-x #删除指定的ACL权限
-b #删除所有的ACL权限
-d #设定默认ACL权限
-k #删除默认ACL权限
-R #递归设定ACL权限
1.3 最大有效权限和删除ACL权限
1.3.1 最大有效权限
上面我们查看ACL权限时,会看到有一个mask,这个就是最大有效权限。
其实我们所赋予的ACL权限并不是用户真正的权限,还需要与mask**“相与”**之后才能得到用户的真正权限。
【相与】:两边都为真,既为真;有一假,则假。
mask权限是可以通过下列命令进行修改的:
setfacl -m m:rx /project
当我修改为rw后,用户最大拥有的ACL权限就只能是rw了。
1.3.2 删除ACL权限
setfacl -x u:用户名 文件名 #删除指定用户的ACL权限
setfacl -x g:组名 文件名 #删除指定组的ACL权限
setfacl -b 文件名 #删除文件的所有ACL权限
1.4 默认ACL权限和递归ACL权限
1.4.1 默认ACL权限
setfacl -m d:u:用户名:权限 文件名
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件/目录都会继承父目录的ACL权限。
注意!!!
该命令是针对新创建文件/目录的,对已经存在的文件/目录无效,已经存在的文件/目录要进行递归ACL权限
1.4.2 递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
setfacl -m u:用户名:权限 -R 文件名
但如果我再创建一个新目录或文件,该新目录或文件仍然是不具有ACL权限的,原因很简单,这是在递归命令结束之后才创建的。
这时候我们就需要用到下面的默认权限了
二,文件特殊权限
2.1 SetUID
2.1.1 功能
- 只有可以执行的二进制程序才可以设定SUID权限。
- 命令执行者要对程序拥有执行(x)权限。
- 命令执行者在执行该程序时获得该程序文件属主的身份。(执行时暂时获得所有者身份)
例如:shadow没有任何权限,但是用户在更改密码时会获得暂时的shadow权限
[root@markling ~]# ll /etc/shadow
---------- 1 root root 1290 Aug 7 19:59 /etc/shadow
- SetUID权限只有在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码,我们看看passwd的权限,发现多了一个s,也就是说在这个文件的所有者范围内拥有SUID权限。(如果是S,即不能使用)
红色即危险的SetUID
2.1.2 设定SetUID的方法
chmod 4755 文件名 #第2个数代表属主权限,在前面+4则说明赋予SUID权限
chmod u+s 文件名 #执行这个命令用户必须有x权限
- 取消SUID权限
chmod 755 文件名
chmod u-s 文件名
2.2 SetGID
2.2.1 SetGID针对文件的作用
(与SetUID很相似)
- 只有可以执行的二进制程序才可以设定SGID权限。
- 命令执行者要对程序拥有执行(x)权限。
- 在执行该程序时,组身份获得该程序文件属组的身份。
- SetUID权限只有在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。
locate命令拥有SGID权限,在对应的所属组权限的x的位置改为s。
2.2.2 SetGID针对目录的作用
- 普通用户必须对此目录拥有r和x权限,才能进入目录。
- 普通用户在此目录中的有效组会变成此目录的数组。
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组。
2.2.3 设定SGID
chmod 2755 文件名
chmod g+s 文件名
2.3 Sticky BIT
2.3.1 SBIT 粘着位作用(只针对目录)
- 粘着位目前只对目录有效。
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户即使有w权限,也只能删除自己建立的文件。
tmp目录拥有SBIT,我们可以看到在其他人的权限里有个t。
2.3.2 设置与取消粘着位
设置(两种方法)
chmod 1755 目录名
chmod o+t 目录名
取消:
chmod 755 目录名
chmod o-t 目录名
三,文件系统属性chattr权限
chattr [+-=][选项] 文件或目录名
+:增加权限
-:删除权限
=:等于某权限
针对root也限制
选项:
- i:如果对文件设置i属性,不允许对文件进行删除、改名,也不能添加和修改内容;如果对目录设置i属性,那么只能修改目录下文件的内容,但不允许创建和删除文件。
- a:如果对文件设置a属性,只能在文件中添加内容(这里只能有echo命令追加内容,不能使用vim),但不能删除、修改内容;如果对目录设置a属性,那么只能在目录中建立和修改文件,但不能删除。
lsattr 文件名 #查看attract权限
四,系统命令sudo权限
4.1 Sudo权限
- root把本来只能超级用户执行的命令赋予普通用户执行。
- sudo的操作对象是系统命令。
4.2 Sudo使用
visudo #实际修改的是/etc/sudoers文件
例如现在我给用户Tony赋予shutdown -r 关机重启命令,则可以这样写
但我们不能像root用户一样直接敲命令shutdown -r now示例如下:
sudo -l #确定该用户为Tony
sudo /sbin/shutdown -r now #输入命令要输入绝对路径