Linux命令之 umask命令
warning:
这篇文章距离上次修改已过1694天,其中的内容可能已经有所变动。
显示/修改默认的文件权限
命令语法
umask [-p] [-S] [模式]
info:如果使用命令时省略了模式选项,则显示当前默认权限码
附加参数
参数 | 说明 |
---|---|
-p | 如果省略 MODE 模式,以可重用为输入的格式输入 |
-S | 以符号形式输出,否则以八进制数格式输出 |
常用范例
显示当前默认权限
umask
info:解释下
0022
这个权限如何来的:第一个0
是特殊权限,这里不做讨论;传送门
后面的022
是用户能拥有的最大权限777
减去当前用户拥有的权限(八进制)得到的数。
比如,你默认权限是755
(u=rwx,g=rx,o=rx)用最大权限777
减去拥有的权限就得到了022
这个数。再加上特殊权限的0
,就是现在的0022
了。
warning:注意:umask命令只能修改文件的权限,第一位的特殊权限无法更改。
显示当前默认权限(以符号形式输出)
umask -S
修改默认权限为777
umask 000
warning:权限的修改只在当前环境临时生效。可以看到上图中新开的终端的权限并没有被修改。
Linxu附加权限
本部分摘抄 @bluemonkey 的《LINUX的权限(摘抄自用)》
SET位权限(suid,sgid)
suid/sgid
是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。
一般用于给可执行的程序或脚本文件进行设置,其中SUID
表示对属主用户增加SET位权限,SGID
表示对属组内用户增加SET位权限。
执行文件被设置了SUID
、SGID
权限后,任何用户执行该文件时,将获得该文件属主、属组账号对应的身份。
在许多环境中,suid
和sgid
很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。
所以应该尽量避免使用SET位权限程序。(passwd 命令是为数不多的必须使用suid
的命令之一)。
suid(set User ID,set UID)
的意思是进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。sgid(set Group ID,set GID)
的意思也是一样,只是把上面的进程拥有者改成进程组就好了。
SET位权限表示形式(10位权限)
如果一个文件被设置了suid
或sgid
,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid
还设置了x(执行)位,则相应的执行位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。
权限 | 说明 |
---|---|
-rwsr-xr-x | 表示设置了suid,且拥有者有可执行权限 |
-rwSr--r-- | 表示suid被设置,但拥有者没有可执行权限 |
-rwxr-sr-x | 表示sgid被设置,且群组用户有可执行权限 |
-rw-r-Sr-- | 表示sgid被设置,但群组用户没有可执行权限 |
设置方式
SET位权限可以通过chmod命令设置,给文件加suid
和sgid
的命令如下(类似于上面chmod赋予一般权限的命令)
#设置suid位
chmod u+s filename
#去掉suid设置
chmod u-s filename
#设置sgid位
chmod g+s filename
#去掉sgid设置
chmod g-s filename
粘滞位权限(sticky)
粘滞位权限表示形式(10位权限)
一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上。如果文件设置了sticky还设置了x(执行)位,其他组用户的权限的可执行位为t(小写)。但是,如果没有设置x位,它将表示为T(大写)。
如:
权限 | 说明 |
---|---|
-rwsr-xr-t | 表示设置了粘滞位且其他用户组有可执行权限 |
-rwSr--r-T | 表示设置了粘滞位但其他用户组没有可执行权限 |
设置方式
sticky权限同样可以通过chmod命令设置
chmod +t <文件列表..>
- suid 的八进制数字是4
- sgid 的八进制数字代表数字是 2
- sticky 位八进制数字代表数字是1