Fork me on GitHub

Linux命令——umask、setuid、setgid、sticky bit、chmod、chown

umask

权限遮罩码,用于控制文件,文件夹的默认权限

文件默认权限:     666-umask

文件夹默认权限:  777-umask

管理员root:                  umask=022   文件默认权限644,文件夹755

普通用户:                  umask=002   文件默认权限664,文件夹775

通常,在类Unix操作系统上,文件和目录的所有权基于创建它们的用户的uid(user-id)和gid(group-id)。

启动进程时也会发生同样的情况:以启动这个进程的 用户标识和组标识运行,并具有相应的权限。 此行为可以通过使用特殊权限进行修改。

每个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般就是文件所有者所在的组。

对于可执行文件, 在执行时, 通常情况下其权限是调用这个文件的用户的权限。Linux下/usr/bin/passwd命令可以修改密码,如果按照这个套路,那么普通用户是没办法修改自己密码的,但实际情况普通用户也可以修改自己的密码。这是怎么做到的呢?

解决上面问题引出setuid、setgid、sticky bit   这些只是标记位,不是指令

setuid位

但设置了setuid位时,前面表述的典型权限做法就会改变。对于可执行文件,在执行时,其权限不再是发起执行动作这个用户的权限,而是文件本身用户所具有的权限。例如,一个可执行文件属主是root,并且设置了setuid,那么普通用户也可以执行这个文件。某种程度上,使用不当会对系统安全有潜在风险。

Linux下的一个例子就是passwd命令

[root@51cto ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd
View Code

怎样标识setuid位呢? 正如上面命令输出所示,setuid使用s表示,他取缔了原本x的位置。这表明x(可执行标记为)实际上已经被设置了。如果setuid或setgid被设置了,但是x(可执行标记位)没有被设置,会显示成大写字母S。对于没有设置x(可执行标记位)的情况,setuid和setgid是不会生效的。此外setuid对目录没有效果,只针对文件。

setgid位

不像setuid只对文件起作用。setgid对文件、目录都有效果。在上面那个/usr/bin/passwd例子中,当执行passwd这个命令的时候,其权限不再是发起执行动作这个用户属组的权限,而是passwd这个文件本身属组的权限。换句话说,当前进程的GID变成了passwd的GID,而不再是发起这个进程的GID。

在目录上使用时,setgid位会改变标准行为,目录内文件/目录的GID不再是创建者的GID,而是父目录本身的GID。 这通常用于简化文件共享(文件将由父目录GID内所有组成员修改)。 就像setuid一样,setgid位很容易被发现,例如:

ls -ld test
drwxrwsr-x. 2 egdoc egdoc 4096 Nov  1 17:25 test
View Code

标准行为指什么?

谁创建的文件/目录,那么他的GID就是这个用户的GID

s标记位替换了属组那一坨的x标记为。注意这里是小写s

sticky位

sticky标记位(也可以理解成防删除位)以一种不同的方式工作,他对于文件没有效果。但用于一个目录时,这个目录下所有文件只可以被他的所有者修改。举个例子

[root@51cto ~]# ls -ld /tmp
drwxrwxrwt. 4 root root 4096 Jun 12 04:57 /tmp
View Code

/tmp这个目录可以被系统上所有用户修改,但是加了sticky标价位,一个用户就不能去删除另一个用户的文件。

怎样判断一个目录下文件能不能被删除呢?

该文件的属主一帮都是rwx,如果属主都没有w,那就尴尬了。。。。自己不能删除自己创建的文件

该文件的属组如果有w,那么组内其他人也可以删除、修改这个文件。如果没有w,组内其他人便不能删除、修改这个文件,更甚至不能添加文件。在/tmp这个例子中,GID内用户,Others都有w权限,加上s标记为,就做到了防删除。你可以添加文件,但是不能删除文件。只有这个文件本身的owner才可以删除文件。

如何设置特殊标记位

chmod  +  数字 或者 ugo/rwx

设置setgid位

$ chmod 2775 test

或者

$ chmod g+s test

两者等价

设置setuid位

$ chmod u+s file

设置sticky位

$ chmod o+t test

 

posted @ 2018-06-11 22:19  克拉默与矩阵  阅读(629)  评论(0编辑  收藏  举报