Linux 特殊权限详解
1. 特殊权限:SUID,SGID,STICKY
特殊权限
-
SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
-
SGID 作用于二进制可执行文件上,用户将继承此程序所有组的权限 作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承
-
STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除
安全上下文:
-
进程以某用户的身份运行,进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作
-
权限匹配模型:
-
判断进程的属主,是否为被访问的文件属主,如果是,则应用属主的权限,否则进入第2步
-
判断进程的属主,是否属于被访问的文件属组,如果是,则应用属组的权限,否则进入第3步
-
应用other的权限
-
1.1 特殊权限SUID
默认情况下:用户发起的进程,进程的属主是其发起者,因此,其以发起者的身份在运行
SUID的功能:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,其进程的属主不是发起者,而是程序文件自己的属主
前提:进程有属主和属组;文件有属主和属组
-
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
-
启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
-
进程访问文件时的权限,取决于进程的发起者
-
进程的发起者,同文件的属主:则应用文件属主权限
-
进程的发起者,属于文件属组;则应用文件属组权限
-
应用文件“其它”权限
-
二进制的可执行文件上SUID权限功能:
-
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
-
启动为进程之后,其进程的属主为原程序文件的属主
-
SUID只对二进制可执行程序有效
-
SUID设置在目录上无意义
管理文件的SUID权限
chmod u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...
展示位置:属主的执行权限位,如果属主原本有执行权限,显示为小写s,否则,显示为大写S
示例
[root@centos ~]#ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33600 Apr 7 2020 /usr/bin/passwd
[root@centos ~]#
1.2 特殊权限SGID
功能:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户基本组,而是此目录的属组
展示位置:属组的执行权限位,如果属组原本有执行权限,显示为小写s,否则,显示为大写S
二进制的可执行文件上SGID权限功能:
-
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
-
启动为进程之后,其进程的属组为原程序文件的属组
管理文件的SGID权限
chmod g+s FILE...
chmod 2xxx FILE
chmod g-s FILE...
目录上的SGID权限功能:
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有
写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录
管理目录的SGID权限
chmod g+s DIR...
chmod 2xxx DIR
chmod g-s DIR...
示例:
在/home下创建一个目录为sysadms,要求所属的组为sysadm,组成员可以读写,其他用户没有任何权限
同组成员在目录下创建的文件所属组也为sysadm组
mkdir /home/sysadms
chown :sysadm /home/sysadms
ll -d /home/sysadms
chmod 700 /home/sysadms
#同组成员在目录下创建的文件所属组也为sysadm组,即,添加一个sgid权限
chmod g+s /home/sysadms
touch /home/sysadms/testfile
1.3 特殊权限 Sticky 位
功能:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对此目录都能创建新文件或删除所有的已有文件,
如果为此类目录设置sticky权限,则每个用户能创建新文件,且只能删除自己的文件
展示位置:其他用户执行权限位,如果其他用户原本有执行权限,显示为小写t,否则,显示为大写T
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
管理文件的Sticky权限
chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...
示例
[root@centos8 ~]#ll -d /tmp
drwxrwxrwt. 15 root root 4096 Dec 12 20:16 /tmp
注意:系统上的/tmp和/var/tmp目录默认均有sticky权限
1.4 特殊权限数字法:
suid | sgid | sticky | 八进制权限 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
示例
chmod 4777 /tmp/a.txt
权限位映射
SUID: user,占据属主的执行权限位
-
s:属主拥有x权限
-
S:属主没有x权限
SGID: group,占据属组的执行权限位
-
s: group拥有x权限
-
S:group没有x权限
Sticky: other,占据other的执行权限位
-
t:other拥有x权限
-
T:other没有x权限
基于八进制方式赋权时,可用默认的三位八进制数字左侧再加一位八进制数字,例如:chmod 1777
1.5 设定文件特殊属性
设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件
不能删除,改名,更改
chattr +i file
只能追加内容,不能删除,改名
chattr +a file
显示特定属性
lsattr
示例
[root@centos /data]#chattr +i dir/
[root@centos /data]#lsattr dir/
-------------------- dir/fstab
-------------------- dir/f1.txt
[root@centos /data]#lsattr *
-------------------- dir/fstab
-------------------- dir/f1.txt
-------------------- file.txt
-------------------- test.txt
[root@centos /data]#ll
total 4
drwxr-xr-x 2 root root 33 Mar 29 14:08 dir
-rw-r--r-- 1 root root 0 Mar 29 14:07 file.txt
-rw-r--r-- 1 root root 12 Mar 29 14:04 test.txt
[root@centos /data]#rm -rf dir/
rm: cannot remove 'dir/fstab': Operation not permitted
rm: cannot remove 'dir/f1.txt': Operation not permitted
[root@centos /data]#lsattr
-------------------- ./test.txt
-------------------- ./file.txt
----i--------------- ./dir
[root@centos /data]#chattr -i dir/
[root@centos /data]#lsattr
-------------------- ./test.txt
-------------------- ./file.txt
-------------------- ./dir
[root@centos /data]#
2. facl:file access control lists
文件的额外赋权机制,在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的机制
查看额外的权限
getfacl FILE
额外赋权
赋权给用户:
setfacl -m u:songwanbo:rw FILE
赋权组:
setfacl -m g:songwanbo:rw FILE
撤销赋权
setfacl -x u:USERNAME FILE
setfacl -x g:GROUPNAME FILE
setfacl -b FILE
示例:
把/etc/fstab拷贝到/var/tmp/fstab,文件所有是root
cp /etc/fstab /var/tmp/
任何人不具备执行权限,但是harry用户有读写权限,natasha用户没有任何权限
setfacl -m u:harry:rw- /var/tmp/fatab
setfacl -m u:natasha:--- /var/tmp/fatab
getfacl /var/tmp/fatab
示例
# 窗口1
[root@centos /data]#ll file.txt
-rw-r--r-- 1 root root 0 Mar 29 14:07 file.txt
[root@centos /data]#
[root@centos /data]#setfacl -m u:song:rw /data/file.txt # 给用户 song 增加读写 /data/file.txt 的权限,这样用户 song 就可以读写文件
[root@centos /data]#
[root@centos /data]#setfacl -m u:song:- /data/file.txt # 去掉用户 song 对 /data/file.txt 的所有权限,就是不能在读写文件了
[root@centos /data]#
# 另开一个窗口2
[root@centos /data]#su - song
Last login: Mon Mar 29 10:33:40 CST 2021 on pts/0
[song@centos ~]$cat /data/file.txt # 默认可以查看
[song@centos ~]$echo "testetstetst" >>/data/file.txt # 默认不能写
-bash: /data/file.txt: Permission denied
[song@centos ~]$ll /data/file.txt # 增加 facl 后查看
-rw-rw-r--+ 1 root root 0 Mar 29 14:07 /data/file.txt
[song@centos ~]$cat /data/file.txt # 可以查看
[song@centos ~]$echo "testetstetst" >>/data/file.txt # 增加 facl 后可以写入数据了
[song@centos ~]$ll /data/file.txt
-rw-r--r--+ 1 root root 13 Mar 29 14:19 /data/file.txt
[song@centos ~]$cat /data/file.txt # 去掉 facl 权限后无法查看了,提示权限不足
cat: /data/file.txt: Permission denied
[song@centos ~]$echo "testetstetst" >>/data/file.txt # 去掉 facl 权限后无法写入文件了,提示权限不足
-bash: /data/file.txt: Permission denied
[song@centos ~]$