文件默认权限umask
我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢? 答案是umask?
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。
如何计算默认权限值?
在Linux系统下,有初始最大权限的概念,文件是666,文件夹是777,这就相当于锁定一个初始值。
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。
对于文件来说,这一数字的最大值分别是6。
系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。
目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。
该命令的一般形式为:umask nnn (其中nnn为umask置000 - 777)
我们只要记住umask是从权限中“拿走”相应的位即可。(做减法)
如:umask值为022,则默认目录权限为755,默认文件权限为644。(如果普通文件权限值是奇数那么加一)
文件的特殊权限值
setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写。我们一般会再次把它们缩写为 suid 和sgid。它们是控制文件访问的权限标志(flag),它们分别允许用户以可执行文件的 owner 或 owner group 的权限运行可执行文件。
SUID
SUID 权限仅对二进制可执行文件有效例如
[root@localhost ydy]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
使用可以获取属主的权限
具体原理如下
下面我们来看 tester 用户是如何利用 SUID 权限完成密码修改的:
tester 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
passwd 程序的所有者为 root
tester 用户执行 passwd 程序的过程中会暂时获得 root 权限
因此 tester 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
SGID
当 s 标志出现在用户组的 x 权限时称为 SGID。当用于可执行文件时,SGID 的特点与 SUID 相同,区别是它用于获取属组的权限。
除二进制程序外,SGID 也可以用在目录上。当一个目录设置了 SGID 权限后,它具有如下功能:
用户若对此目录具有 r 和 x 权限,该用户能够进入该目录
用户在此目录下的有效用户组将变成该目录的用户组
若用户在此目录下拥有 w 权限,则用户所创建的新文件的用户组与该目录的用户组相同
总结的话就是此文件夹下不论什么用户创建的文件或文件夹的属组都与此文件夹的属组保持一致。
SBIT
其实 SBIT 与 SUID 和 SGID 的关系并不大。
SBIT 是 the restricted deletion flag or sticky bit 的简称。
SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件。比较常见的例子就是 /tmp 目录:
[root@localhost ydy]# ll -d /tmp
drwxrwxrwt. 40 root root 4096 9月 16 15:58 /tmp
参考文章 https://www.cnblogs.com/sparkdev/p/9651622.html