1. SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者(仅对拥有执行权限的二进制程序有效)
chmod u+s FILE
chmod u-s FILE
如果FILE本身原来就有执行权限,则SUID显示为s,否则显示为S
例如:所有用户都可以执行用于修改用户密码的passwd命令,而用户密码是被保存在/etc/shadow文件中的,但只要仔细的看下就会发现这个文件的默认权限是000,也就是说除了不受系统限制的root管理员用户以外的所有用户都没有查看或编辑该文件的权限。那么把passwd命令加上SUID特殊权限位,便可让普通用户临时获得程序所有者的身份,即以root用户的身份把变更的密码信息写入到shadow文件中
[root@libaoliang ~]# ls -l /etc/shadow
----------. 1 root root 1378 Jun 21 12:44 /etc/shadow
[root@libaoliang ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
2. SGID 功能一:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组(对拥有执行权限的二进制程序设置)
chmod g+s FILE
chmod g-s FILE
SGID 功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
例如:工作中需要设置一个部门内的共享目录,让所有组内的人都能够读取里面的内容,那么咱们就可以创建部门共享目录后,把该目录设置上SGID特殊权限位,这样任何用户在里面创建的任何文件都会归属于本目录的所有组,而不再是自己的基本用户组。
[root@libaoliang ~]# cd /tmp/
[root@libaoliang tmp]# mkdir sharedDir
[root@libaoliang tmp]# ls -ald sharedDir/
drwxr-xr-x. 2 root root 4096 Jun 21 19:45 sharedDir/
[root@libaoliang tmp]# chmod -Rf 777 sharedDir/
[root@libaoliang tmp]# chmod -Rf g+s sharedDir/
[root@libaoliang tmp]# ls -ald sharedDir/
drwxrwsrwx. 2 root root 4096 Jun 21 19:45 sharedDir/
这样设置好777权限以保证普通用户可以写入文件,并为该目录设置了SGID特殊权限位后,就可以切换至一个普通用户尝试在该目录创建文件,看看新建出来的文件是否会继承上级目录的所有组名称
[root@libaoliang tmp]# su - xiaobao
[xiaobao@libaoliang ~]$ cd /tmp/sharedDir/
[xiaobao@libaoliang sharedDir]$ echo "test SGID" > test
[xiaobao@libaoliang sharedDir]$ ls -al test
-rw-r--r--. 1 xiaobao root 10 Jun 21 19:52 test
创建的test文件的属主为xiaobao,属组不在是用户xiaobao的基本组,而是继承了 上级(具有SGID权限)目录 的属组。
3. SBIT(Sticky Bit):在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件(仅对目录有效)
chmod o+t
chmod o-t
用户xiaobao创建的文件,xiaoliang可以删除
[xiaobao@libaoliang ~]$ su - xiaoliang Password:
[xiaoliang@libaoliang ~]$ cd /tmp/sharedDir/
[xiaoliang@libaoliang sharedDir]$ ls
test
[xiaoliang@libaoliang sharedDir]$ rm test
rm: remove write-protected regular file `test'? y
[xiaoliang@libaoliang sharedDir]$ ls
[xiaoliang@libaoliang sharedDir]$
给sharedDir目录加上SBIT权限
[root@libaoliang ~]# chmod o+t /tmp/sharedDir/
[root@libaoliang ~]# ls -ald /tmp/sharedDir/
drwxrwsrwt. 2 root root 4096 Jun 21 20:00 /tmp/sharedDir/
用户xiaobao创建文件test
[xiaobao@libaoliang sharedDir]$ ls -l
total 4
-rw-r--r--. 1 xiaobao root 10 Jun 21 20:00 test
再用xiaoliang删除 xiaobao创建的test文件,已经无法删除
[xiaoliang@libaoliang sharedDir]$ ls -l
total 4
-rw-r--r--. 1 xiaobao root 10 Jun 21 20:00 test
[xiaoliang@libaoliang sharedDir]$ rm -f test
rm: cannot remove `test': Operation not permitted
知识总结
四位数字表示权限的话,第一位表示特殊权限
chmod 1755 /backup/test:表示/backup/test的权限是rwx rwx rwt
chmod 2755 /backup/test:表示/backup/test的权限是rwx rws rwx
chmod 4755 /backup/test:表示/backup/test的权限是rws rwx rwx
练习:配置 在/home/devlopTeam目录下,用户xiaobao,xiaoming,xiaoliang都可以创建,修改文件(可修改其他人创建的文件)删除文件(只能删除自己的文件,不能删除别人的文件)
①查看xiaobao,xiaoming,xiaoliang的所属组
[root@libaoliang ~]# id xiaobao
uid=502(xiaobao) gid=502(policeman) groups=502(policeman)
[root@libaoliang ~]# id xiaoming
uid=501(xiaoming) gid=501(xiaoming) groups=501(xiaoming)
[root@libaoliang ~]# id xiaoliang
uid=504(xiaoliang) gid=503(tufei) groups=503(tufei)
②将xiaobao,xiaoming,xiaoliang的基本组改为 devlop组
[root@libaoliang ~]# usermod -g devlop xiaobao
[root@libaoliang ~]# usermod -g devlop xiaoming
[root@libaoliang ~]# usermod -g devlop xiaoliang
[root@libaoliang ~]# id xiaobao
uid=502(xiaobao) gid=5001(devlop) groups=5001(devlop)
[root@libaoliang ~]# id xiaoming
uid=501(xiaoming) gid=5001(devlop) groups=5001(devlop)
[root@libaoliang ~]# id xiaoliang
uid=504(xiaoliang) gid=5001(devlop) groups=5001(devlop
③创建devlopTeam目录,并设置SGID 和 SBIT权限
[root@libaoliang ~]# ls -ld /home/
drwxr-xr-x. 16 root root 4096 Jun 15 21:18 /home/
#由于 /home/目录的属主 属组是root,只有属主才有写权限,所用用root用户创建devlopTeam目录
[root@libaoliang ~]# cd /home/
[root@libaoliang home]# mkdir devlopTeam
[root@libaoliang home]# ls -ld devlopTeam/
drwxr-xr-x. 2 root root 4096 Jun 21 20:53 devlopTeam/
#设置SGID和SBIT权限
[root@libaoliang home]# chmod 3777 devlopTeam/
[root@libaoliang home]# ls -ld devlopTeam/
drwxrwsrwt. 2 root root 4096 Jun 21 20:53 devlopTeam/
#四位数字表示权限,第一位表示特殊权限,第一位的3表示 具有SGID(2) 和 SBIT(1) 的权限
# 修改属组为devlop
[root@libaoliang home]# chown root:devlop devlopTeam/
[root@libaoliang home]# ls -ld devlopTeam/
drwxrwsrwt. 2 root devlop 4096 Jun 21 20:57 devlopTeam
③现在已经设置完毕,可以用xiaobao创建文件,用xiaolming 和 xiaoliang修改,但是xiaoming和xiaoliang无法删除。
#xiaobao创建文件,并设置属组可写
[xiaobao@libaoliang devlopTeam]$ echo "xiaobao创建的文件" >> xiaobaoFile
[xiaobao@libaoliang devlopTeam]$ ls -l
total 4
-rw-r--r--. 1 xiaobao devlop 23 Jun 21 21:02 xiaobaoFile
[xiaobao@libaoliang devlopTeam]$ chmod 664 xiaobaoFile
[xiaobao@libaoliang devlopTeam]$ ls -l
total 4
-rw-rw-r--. 1 xiaobao devlop 23 Jun 21 21:02 xiaobaoFile
#用xiaoliang修改xiaobao创建的文件
[xiaoliang@libaoliang devlopTeam]$ echo "xiaoliang修改xiaobao创建的文件" >> xiaobaoFile
[xiaoliang@libaoliang devlopTeam]$ cat xiaobaoFile
xiaobao创建的文件
xiaoliang修改xiaobao创建的文件
#用xiaoliang删除xiaobao创建的文件
[xiaoliang@libaoliang devlopTeam]$ rm -f xiaobaoFile
rm: cannot remove `xiaobaoFile': Operation not permitted
#xiaoliang无法删除xiaobao创建的文件,xiaobao可以删除自己创建的文件
[xiaobao@libaoliang devlopTeam]$ rm -f xiaobaoFile
[xiaobao@libaoliang devlopTeam]$ ls
[xiaobao@libaoliang devlopTeam]$