setgid g+s
这里还有一个setgid的权限,对应的数字是2。概念和setuid是一样的。当一个程序具有setgid的时候,当一个用户执行这个程序的时候会以这个程序所属组的身份去执行。
授予的命令是chmod g+s。或者chmod 2755。
如果要同时授予setuid和setgid的权限就可以使用chmod 6755。下面的实验和上面的一样
[root@desktop0 ~]# ls -l /usr/bin/touch
-rwxr-xr-x. 1 root root 62432 Jan 25 2014 /usr/bin/touch
[root@desktop0 ~]# chmod g+s /usr/bin/touch
[root@desktop0 ~]# ls -l /usr/bin/touch
-rwxr-sr-x. 1 root root 62432 Jan 25 2014 /usr/bin/touch
[root@desktop0 ~]# su - student
Last login: Mon Apr 9 18:14:15 CST 2018 on pts/2
[student@desktop0 ~]$ touch newtest
[student@desktop0 ~]$ ls -l newtest --可以看到所属组是root,因为touch命令被授予的setgid的权限。
-rw-rw-r--. 1 student root 0 Apr 9 18:32 newtest
很多命令不适合授予setuid的权限,比如vim/vi这些命令,如果设置为setuid权限就相当于给黑客留留一个后门,如果vi授予了setuid权限,那么随便切换到一个普通用户下面,那么就可以使用vi编辑/etc/passwd,将普通用户的uid改为0,这样普通用户登入就是以1root身份登入,所以不要随便将一个命令授予setuid权限。
在linux那些命令被授予了setuid权限呢?
[root@desktop0 ~]# find / -perm -4000 -o -perm -2000 -- -o代表了或者
find: ?.proc/4649/task/4649/fd/6?. No such file or directory
find: ?.proc/4649/task/4649/fdinfo/6?. No such file or directory
find: ?.proc/4649/fd/6?. No such file or directory
find: ?.proc/4649/fdinfo/6?. No such file or directory
/run/log/journal
/run/log/journal/946cb0e817ea4adb916183df8c4fc817
/usr/bin/wall
/usr/bin/write
/usr/bin/mount
/usr/bin/chage
[root@desktop0 ~]# ls -l /usr/bin/mount
-rwsr-xr-x. 1 root root 44232 Mar 28 2014 /usr/bin/mount
o+t
上面介绍了权限位第一位的两个特殊权限,还剩下一个特殊权限,这个权限是粘着位,这一位的权限是1。
[root@desktop0 ~]# mkdir -p /test
[root@desktop0 ~]# chmod 777 /test --如果一个目录有写权限,那么就可以对目录里面文件进行删除和创建
[root@desktop0 ~]# touch /test/mytest
[root@desktop0 ~]# su - student
Last login: Mon Apr 9 18:32:40 CST 2018 on pts/2
[student@desktop0 ~]$ rm -rf /test/mytest
[student@desktop0 ~]$ ls /test
[student@desktop0 ~]$
上面可以看出,root创建的文件,在普通用户下可以删除。
有没有一个目录,每一个用户都可以在该目录下面创建文件,但是每一个用户不能删除其他用户创建的文件。答案是有的,这个目录就是/tmp目录。
[hellow@server0 test]$ ls -ld /tmp
drwxrwxrwt. 9 root root 4096 Apr 10 02:03 /tmp
[hellow@server0 test]$ touch /tmp/hellow.txt
[hellow@server0 test]$ su - test
Password:
Last login: Tue Apr 10 02:03:15 CST 2018 on pts/0
[test@server0 ~]$ rm -rf /tmp/hellow.txt --可以看到虽然tmp目录的其他人对目录具有rwx权限,但是test用户不能对hellow用户创建的文件进行删除,因为这里有一个粘着位t。
rm: cannot remove ?.tmp/hellow.txt?. Operation not permitted
总结:
特殊权限
u+s
[root@localhost tmp]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root test 27832 Jan 29 2014 /usr/bin/passwd
x:以用户自身的权限去执行的
s:是以文件所有者 形式去执行的(root)
[root@localhost tmp]# ll /etc/passwd
-rw-r--r--. 1 root root 2333 Aug 4 22:42 /etc/passwd
t---粘滞位
o+t
仅文件所有者(和root)可以删除目录中的文件,没有权限去删除其他用户的文件
[root@localhost tmp]# ll -d /tmp
drwxrwxrwt. 10 root root 4096 Aug 4 23:57 /tmp
希望目录下创建文件、目录 继承父目录的组设置(RHCSA)
g+s
用符号表示: setuid = u + s; setgid = g + s ; sticky = o + t;
用数值表示(第四位):setuid = 4; setgid = 2 ; sticky = 1;
X760
特殊权限 | 对文件的影响 | 对目录的影响 |
u+s | 以拥有文件的用户身份,而不是以 | 无影响 |
g+s | 以拥有文件的组身份执行文件 | 在目录中最新创建的文件将其组所有者设置为目录的组所有者 |
o+t | 无影响 | 对目录具有写入权限的用户仅可以删除其所拥有的文件,而无法删除其他用户拥有的文件 |
特殊权限位的在RAC安装时候的作用请参考: RAC 安装用户组和权限设置