Linux——特殊权限

☆樱花仙子☆ 提交于 2020-08-16 03:40:32

一、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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!