那么如何设置SUID呢?
其实很简单,用chmod命令就可以了,chmod有两种配置权限的形式,一种是数字形式,一种是字符形式,数字形式通常用于全量权限的配置,而字符的可以更方便的做单个属性的加减,因此,这里就用字符形式来配置。
如果你要在拥有者那里增加SUID权限,那么用chmod u+s就可以,如果要去掉这个属性,那么用chmod u-s就可以完成。
这里还是用passwd来做测试
[root@VM-0-14-centos ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd
[root@VM-0-14-centos ~]# ls -l /usr/bin/passwd
-rwxr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd
[jack@VM-0-14-centos root]$ passwd
新的 密码:
重新输入新的 密码:
passwd: 鉴定令牌操作错误
[jack@VM-0-14-centos root]$
可见,一旦把passwd命令的SUID给去掉了,那么用户就无法更改密码了,赶快改回去。。
[root@VM-0-14-centos ~]# chmod u+s /usr/bin/passwd
[root@VM-0-14-centos ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd
以上就是关于SUID的解释,接下来看看SGID。其实,理解了SUID,SGID就很容易理解。SGID的英文是set group id,就是说设置组id,那是设置谁的组id呢?按照SUID的类似的,就是把命令、可执行文件的组id临时设置给调用它的用户,让这个用户具有这个命令、可执行文件的组id,从而在命令、可执行文件执行期间,这个用户的组id临时变成这个命令、可执行文件的组id,即改变调用者的有效用户组。
跟改变SUID类似,你也可以用chmod命令来改变可执行文件的SGID:
chmod g+/-s executable_file
除了可以用在可执行文件外,这个SGID也可以用在文件夹,如果用在文件夹,那么一旦用户进入这个文件夹后,所创建的任何内容的组id都是当前文件夹的组id
[jack@VM-0-14-centos tmp]$ mkdir setdir
[jack@VM-0-14-centos tmp]$ ls -ld setdir
drwxrwxr-x 2 jack jack 4096 1月 31 22:01 setdir
[root@VM-0-14-centos tmp]#chmod g+s setdir
[root@VM-0-14-centos tmp]# ls -dl setdir
drwxr-sr-x 2 jack jack 4096 1月 31 22:01 setdir
[root@VM-0-14-centos tmp]# chown jack:rock setdir
[root@VM-0-14-centos tmp]# ls -ld setdir
drwxr-sr-x 2 jack rock 4096 1月
[jack@VM-0-14-centos setdir]$ touch afile
[jack@VM-0-14-centos setdir]$ ls -l
总用量 0
-rw-rw-r-- 1 jack rock 0 1月 31 22:17 afile
以上就是关于SGID的介绍,接下来在介绍sticky bit。这个属性比较简单,只用于文件夹,一旦被设置,那么用户只能删除文件夹中属于自己的东西,其他人的东西无法删除,改变这个属性也是用chmod,命令是 chmod o+t。
[root@VM-0-14-centos tmp]# chmod 777 setdir
[root@VM-0-14-centos tmp]# ls -dl setdir
drwxrwsrwx 2 root root 4096 1月 31 22:17 setdir
[rock@VM-0-14-centos setdir]$ touch rockfile
[rock@VM-0-14-centos setdir]$ su jack
[jack@VM-0-14-centos setdir]$ touch jackfile
[jack@VM-0-14-centos setdir]$ ls -l
总用量 0
-rw-rw-r-- 1 jack rock 0 1月 31 22:17 afile
-rw-rw-r-- 1 jack rock 0 1月 31 22:26 jackfile
-rw-rw-r-- 1 rock rock 0 1月 31 22:26 rockfile
[jack@VM-0-14-centos setdir]$
[root@VM-0-14-centos setdir]# chmod o+t ../setdir
[root@VM-0-14-centos setdir]# ls -ld ../setdir
drwxrwxrwt 2 root root 4096 1月 31 22:26 ../setdir
[jack@VM-0-14-centos setdir]$ rm rockfile
rm:是否删除有写保护的普通空文件 "rockfile"?y
rm: 无法删除"rockfile": 不允许的操作
总结一下
SUID
这个属性仅仅对二进制文件有用
这个属性仅仅在程序运行的时候才有用
使用这在运行这个程序的过程中,可以获得程序拥有者的权限
要这个属性生效,首先要获得x属性,如果没有获得x属性,那么这个s属性会变成大写,表示无效
SGID
对于可执行文件。这个权限是用在二进制文件里头的,当你运行这个二进制文件的时候,所获得的权限(我觉得是身份,而不是权限)就是这个组的权限,即以这个组的权限来运行这个程序。
2.对于文件夹。如果你能够进入这个文件夹,那么你的有效群组就会变成当前文件夹的群组,如果你对文件夹有w权限,那么你创建的任何东西的群组就是这个文件夹的群组。
Sticky Bit
一旦配置了这个属性,里面所创建的东西只有创建者或者root用户才能够删除。