![a0b68aa2ed4984d323ee711e01d37eae.png](https://i-blog.csdnimg.cn/blog_migrate/a151eb83a3d1837ff16b2cb2439ccda2.jpeg)
我在上篇文章中详细介绍了 Linux 下文件和目录的权限:
Eglinux:Linux 权限管理zhuanlan.zhihu.com![b58d7454bf6e831b7bbac549ace637f3.png](https://i-blog.csdnimg.cn/blog_migrate/a5119f2860161a9162df842c9c06cf91.jpeg)
在介绍掩码 umask 的时候有提到高级权限,但是没有具体讲,今天我们就来看看这些特殊的权限是怎么样的。
Eglinux:Linux 权限管理zhuanlan.zhihu.com![b58d7454bf6e831b7bbac549ace637f3.png](https://i-blog.csdnimg.cn/blog_migrate/a5119f2860161a9162df842c9c06cf91.jpeg)
这篇文章中,umask 掩码的使用的时候,都是用文件的原始权限减去掩码中后三位八进制数展开为二进制数后为 1 的位的权限得到文件的默认权限。那为什么第一位省略了呢?其实不是省略了,是一般情况下用不到,只在特殊的情况下才会用到。虽然我们通常看到一个八进制的权限掩码用后三位数字来表示,但是从技术层面上来讲, 用四位数字来表示它更确切些。为什么呢?因为除了读取、写入和执行权限之外,还有其它较少用到的权限设置。
1. setuid 位
我们在讲 sudo 命令的时候,sudo 的作用就是让普通用户使用 root 用户的权限去运行其他命令。这是怎么做到的呢?其实是使用 sudo 执行命令后,运行的程序会把用户 ID 设置成 root 用户的 ID,也就是要运行的程序属于 root 用户。这种操作通常会应用到一些由超级用户所拥有的程序。当一个普通用户运行一个程序,这个程序由根用户 (root) 所有,并且设置了 setuid 位,这个程序运行时具有超级用户的特权,这样程序就可以访问普通用户禁止访问的文件和目录。很明显,因为这会引起安全方面的问题,所有可以设置 setuid 位的程序个数,必须控制在绝对小的范围内。
setuid 的 umask 是:4000
2. setgid 位
如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。对于共享目录来说, 当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时, 那么设置 setgid 位很有用处。
setgid 的 umask 是:2000
3. sticky 位
sticky 位继承于 Unix,在 Unix 中,它可能把一个可执行文件标志为“不可交换的”。在 Linux 中,会忽略文件的 sticky 位,但是如果一个目录设置了 sticky 位, 那么它能阻止用户删除或重命名文件,除非用户是这个目录的所有者,或者是文件所有者,或是超级用户。这个经常用来控制访问共享目录,比方说 /tmp。
sticky 的 umask 是:1000
4. 其他
还有一些例子,使用 chmod 命令和符号表示法,来设置这些特殊的权限。
- 首先, 授予一个程序 setuid 权限
chmod u+s program
- 下一步,授予一个目录 setgid 权限
chmod g+s dir
- 最后,授予一个目录 sticky 权限
chmod +t dir
当我们使用 ls 命令查看文件的时候,会看到类似下面的例子:
- setuid 属性
-rwsr-xr-x
- setgid 属性
drwxrwsr-x
- 设置了 sticky 位
drwxrwxrwt
今天的内容很少,但是不容小觑,它是非常重要的,在以后的使用中会非常的有用。
到目前为止,和 Linux shell 的基本操作相关的内容就介绍玩了。
好了,今天的分享就到这里了。