本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

Linux基础(30)之文件系统上的特殊权限

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


回顾安全上下文

一个进程运行时,它拥有的权限取决于发起这个进程的用户的权限,所以这个进程的拥有的权限实际上就是发起该进程用户的权限。即:文件有属主和属组,进程同样有属主和属组。

1、任何一个可执行程序文件能不能启动为进程,取决于发起者对该程序文件是否拥有执行权限;
2、可执行程序文件启动为进程后,该进程的属主为发起者,进程的属组则为发起者的基本组;
3、进程访问文件时的权限,取决于进程的发起者:

  • 如果进程的发起者是要访问文件的属主,则应用该文件属主权限;
  • 如果进程的发起者的属组也是要访问文件的属组,则应用该文件的属组权限;
  • 否则应用文件的“其它”权限;

三种特殊权限

SUID

1、任何一个可执行程序文件能不能启动为进程,取决于发起者对该程序文件是否拥有执行权限;
2、可执行程序文件启动为进程后,该进程的属主为原程序文件的属主

示例

我们已经知道用户密码的配置文件为 /etc/passwd,查看该文件权限:

[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1171 9月  13 15:14 /etc/passwd

可以看到,其它用户只拥有该文件的读权限,但是实际上我们使用普通用户也能通过 passwd 命令来修改密码,也修改了该文件的内容。而普通用户并没有对该文件的写权限,那么它为什么可以被普通用户间接修改呢?
查看 passwd 命令对应的可执行程序文件:

[root@localhost ~]# ls -l `which passwd`
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

可以看到,passwd 的程序文件的属主执行权限位为 s,则表示该程序文件拥有 SUID 权限,所以任何普通用户都可以启动 passwd 为进程并间接使用 root 用户的身份来访问其它文件,/etc/passwd 文件对 root 用户来说是可写的,所以总结下来就是普通用户执行了 passwd 命令间接使用 root 用户的身份来修改了该文件。

权限的设定

  • chmod u+s FILE...:让文件拥有 SUID 权限;
  • chmod u-s FILE...:取消文件的 SUID 权限;

SGID

默认情况下,每一个用户使用命令来创建一个文件或目录时,被创建文件或目录的属组就为创建者用户所属的基本组。
一旦给了一个目录 SGID 权限,那么任何对此目录有写权限的用户在该目录中创建的目录或文件的属组就为该目录自身的属组,而不是创建者用户所属的基本组。

用户能否删除一个文件,取决于该用户对该文件所在的目录是否拥有写权限。

权限设定

chmod g+s DIR...:让目录拥有 SGID 权限;
chmod g-s DIR...:取消目录的 SGID 权限;

Sticky

Sticky 权限也叫粘滞位权限,对于一个多人可写的目录,如果设置了 Sticky 权限,则每个用户在该目录下只能删除自己的文件。
在 linux 中,/tmp/var/tmp 目录本身就具有 Sticky 权限,所以在该目录中,用户只能删除自己创建的文件。

权限设定

chmod o+t DIR...:让目录拥有 Sticky 权限;
chmod o-t DIR...:取消目录的 Sticky 权限;

特殊权限的八进制

可用八进制数按 SUID SGID STICKY 的顺序来同时表示三种特殊权限,如下:

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

在之前给文件或目录设置权限时我们通常使用一个 3 位的八进制数来分别表示属主、属组和其它用户拥有的权限,实际上我们还可以在前面补上一位来表示特殊权限,如 chmod 4666 /tmp/dir1 就是设置 /tmp/dir1 目录拥有 SUID 权限且属主、属组和其它用户同时拥有读写权限。

特殊权限位映射

  • SUID:占据属主的执行权限位,如果属主同时拥有执行权限,则该位 SUID 权限表现为 s,否则为 S
  • SGID:占据属组的执行权限位,如果属组同时拥有执行权限,则该位 SGID 权限表现为 s,否则为 S
  • Sticky:占据其它用户的执行权限位,如果其它用户同时拥有执行权限,则该位 STICKY 权限表现为 t,否则为 T
# Linux 基础  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×