Linux——特殊权限
一、ACL权限
1. ACL权限作用
ACL是用于解决用户对文件身份不足的问题的
2. 开启ACL权限
[root@localhost ~]# vi /etc/fstab
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Thu Aug 31 09:47:05 2017
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=18f41a8a-5b18-4a32-a90a-f7c3036b8dde / xfs def
aults,usrquota 0 0
10 UUID=89a96566-dacf-47c4-b480-cd53fe9c0d9b /boot xfs def
aults 0 0
11 UUID=ffd86ce1-6b5c-4882-b541-0b537d12cf1d /home xfs def
aults,acl 0 0
12 UUID=7c2476cd-7322-4ae3-a497-efedc45efb20 swap swap def
aults 0 0
~
"/etc/fstab" 12L, 608C 已写入
3. ACL基本命令
查询
[root@localhost ~]# getfacl /home
getfacl: Removing leading '/' from absolute path names
# file: home
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
设定
[root@localhost ~]# setfacl -m u:user1:rwx /home
setfacl [选项] 文件名 设定ACL权限
-m 设定ACL权限
-b 删除ACL权限
-x:用户 删除单个用户的ACL权限
setfacl -m u:user1:rx /test 给tset目录赋予user1读写的ACL权限
setfacl -m u:user1:rx -R /test 赋予递归ACL权限,只能赋予目录
-R 递归
setfacl -m d:u:user1:rx -R /test ACL默认权限。默认权限只能赋予目录
注意:如果给目录赋予ACL权限,以下两条命令都要输入
setfacl -m u:user1:rx -R /test 递归:只对存在的文件生效
setfacl -m d:u:user1:rx -R /test 默认:只对以后新建的文件生效
4. 最大有效权限mask
有效权限是:赋予的权限和mask设定的权限相与的结果(逻辑与)
[root@localhost ~]# setfacl -m m:rx /home/
[root@localhost ~]# getfacl /home
getfacl: Removing leading '/' from absolute path names
# file: home
# owner: root
# group: root
user::rwx
user:user1:rwx #effective:r-x
group::r-x
mask::r-x
other::r-x
5. 删除ACL权限
[root@localhost ~]# setfacl -x u:st /home
#删除指定用户和用户组的ACL权限
[root@localhost ~]# setfacl -b /home/
#会删除文件的所有的ACL权限
二、sudo授权
1. sudo作用
给普通用户授予部分管理员权限
/sbin/
/usr/sbin
2. 设定
root登陆:visudo 赋予普通 用户权限命令,命令执行后和vi一样使用
[root@localhost a_dir]# visudo
...
91 root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用身份) 授权命令(绝对路径)
举例:
92 lyz ALL=/usr/sbin/shutdown -r now
...
三、文件特殊权限SetUID、SetGID、Sticky BIT
名称 | 代表数字 | 设定命令 | 作用 |
---|---|---|---|
SUID | 4 | chmod 4755 filename | 让二进制程序的执行者临时拥有属主的权限 |
SGID | 2 | chmod 2755 filename | 让二进制程序的执行者临时拥有属主的权限 |
SBIT | 1 | chmod 1755 filename | 某个目录中的文件只能被其所有者执行删除操作 |
1. SetUID
SUID只能设定二进制程序:
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x(权限)
- 命令在执行程序的时候获取该程序所有者的身份
- SUID权限同样只在该程序执行过程中有效
2. SetGID
SGID即可以针对文件生效,也可以针对目录生效,这和SUID明显不同
1) 针对文件
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令在执行程序的时候,组身份升级为该程序文件的属组
- SGID权限同样只在该程序执行过程中有效
2)针对目录
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录的有效组会变成此目录的属组
- 命令执行程序的时候,组身份升级为该程序文件的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
3. Sticky BIT
Sticky BIT粘着位,也简称为SBIT。SBIT目前仅针对目录有效,它的作用如下 :
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件,一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
四、文件系统属性chattr权限
1. 命令格式
[root@localhost ~]# chattr [+-=][选项] 文件或目录
#选项:
+:增加权限
-:删除权限
=:等于某权限
i:文件:不允许进行删除、改名,也不能添加和修改数据
目录:只能修改目录下文件的数据,不允许建立和删除文件
a:文件:只能在文件中增加数据,不能删除也不能修改数据
目录:只允许在目录中建立和修改文件,不允许删除
2. 赋予属性
[root@localhost test]# chattr +i test1
[root@localhost test]# chattr +a test2
2.查看属性lsattr
[root@localhost test]# lsattr -a
---------------- ./.
---------------- ./..
----i----------- ./test1
-----a---------- ./test2
---------------- ./a
---------------- ./b
3. 举例
i属性
文件赋予i属性:啥都不能做
[root@localhost test]# ls
a a_dir i i_dir
[root@localhost test]# chattr +i i
[root@localhost test]# lsattr -a i
----i----------- i
[root@localhost test]# rm -rf i
rm: 无法删除"i": 不允许的操作
[root@localhost test]# mv i f
mv: 无法将"i" 移动至"f": 不允许的操作
[root@localhost test]# echo 123 >> i
-bash: i: 权限不够
[root@localhost test]#
目录赋予i属性:只能修改该目录下文件的数据
[root@localhost test]# ls
a a_dir i i_dir
[root@localhost test]# chattr +i i_dir/
[root@localhost test]# lsattr -a i_dir/
----i----------- i_dir/.
---------------- i_dir/..
---------------- i_dir/123
[root@localhost test]# cd i_dir/
[root@localhost i_dir]# touch bcd
touch: 无法创建"bcd": 权限不够
[root@localhost i_dir]# ls
123
[root@localhost i_dir]# rm -rf 123
rm: 无法删除"123": 权限不够
[root@localhost i_dir]# echo 11111 >> 123
[root@localhost i_dir]# cat 123
abc
11111
a属性
文件赋予a属性:只能追加数据
[root@localhost test]# ls
a a_dir i i_dir
[root@localhost test]# chattr +a a
[root@localhost test]# lsattr -a a
-----a---------- a
[root@localhost test]# rm -rf a
rm: 无法删除"a": 不允许的操作
[root@localhost test]# mv a abc
mv: 无法将"a" 移动至"abc": 不允许的操作
[root@localhost test]# echo 123 >> a
[root@localhost test]# cat a
123
目录赋予a属性:可新建文件和修改文件数据
[root@localhost test]# ls
a a_dir i i_dir
[root@localhost test]# chattr +a a_dir/
[root@localhost test]# lsattr -a a_dir/
-----a---------- a_dir/.
---------------- a_dir/..
---------------- a_dir/abc
[root@localhost test]# rm -rf a_dir/
rm: 无法删除"a_dir/abc": 不允许的操作
[root@localhost test]# cd a_dir/
[root@localhost a_dir]# ls
abc
[root@localhost a_dir]# rm -rf abc
rm: 无法删除"abc": 不允许的操作
[root@localhost a_dir]# touch bcd
[root@localhost a_dir]# rm -rf bcd
rm: 无法删除"bcd": 不允许的操作
[root@localhost a_dir]# mv abc abc2
mv: 无法将"abc" 移动至"abc2": 不允许的操作
[root@localhost a_dir]# echo 222 >> abc
[root@localhost a_dir]# cat abc
1111
222
来源:oschina
链接:https://my.oschina.net/u/4277979/blog/4465599