SUID属性apache
passwd命令能够用于更改用户的密码,通常用户可使用这个命令修改本身的密码。可是保存用户密码的/etc/shadow文件的权限是400,也就是说只有文件的全部者root用户能够写入,那为何其余用户也能够修改本身的密码呢?这就是因为Linux的文件系统中的文件有SUID属性。ide
[root@srv ~]# ll /etc/shadow翻译
-r-------- 1 root root 1128 Feb 15 14:33 /etc/shadowit
SUID属性只能运用在可执行文件上,当用户执行该执行文件时,会临时拥有该执行文件全部者的权限。passwd命令启用了SUID功能,因此通常用户在使用passwd命令修改密码时,会临时拥有了passwd命令全部者root用户的权限,这样通常用户才能够将本身的密码写入/etc/shadow文件。在使用“ls -l”或“ll”命令浏览文件时,若是可执行文件全部者权限的第三位是一个小写的“s”就代表该执行文件拥有SUID属性。class
[root@srv ~]# ll /usr/bin/passwdtest
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd配置
若是在浏览文件时,发现全部者权限的第三位是一个大写的“S”则代表该文件的SUID属性无效,好比将SUID属性给一个没有执行权限的文件。权限
SGID属性charles
SGID于SUID不一样,SGID属性能够应用在目录或可执行文件上。当SGID属性应用在目录上时,该目录中全部创建的文件或子目录的拥有组都会是该目录的拥有组。好比“/charles”目录的拥有组是charles,当“/charles”目录拥有SGID属性时,任何用户在该目录中创建的文件或子目录的拥有组都会时charles;当SGID属性应用在可执行文件上时,其余用户在使用该执行文件时就会临时拥有该执行文件拥有组的权限。好比/sbin/apachectl文件的拥有组是httpd,当/sbin/apachectl文件有SGID属性时,任何用户在执行该文件时都会临时拥有用户组httpd的权限。在使用“ls -l”或“ll”命令浏览文件或目录时,若是拥有组权限的第三位是一个小写的“s”就代表该执行文件或目录拥有SGID属性。密码
[root@srv tmp]# ll
total 4
drwxr-sr-x 2 root root 4096 Feb 15 22:25 test4
-r-xr-sr-x 1 root root 6144 Feb 15 22:25 test6
若是在浏览文件时,发现拥有组权限的第三位是一个大写的“S”则代表该文件的SGID属性无效,好比将SGID属性给一个没有执行权限的文件。
Sticky属性
Sticky属性只能应用在目录,当目录拥有Sticky属性全部在该目录中的文件或子目录不管是什么权限只有文件或子目录全部者和root用户能删除。好比当用户test8在“/charles”目录中创建一个文件并将该文件权限配置为777,当/charles目录拥有Sticky属性时,只有root和test8用户能够将该文件删除。在使用“ls -l”或“ll”命令浏览目录时,若是其余用户权限的第三位是一个小写的“t”就代表该执行文件或目录拥有Sticky属性。
[root@srv tmp]# ll
total 4
drwxrwxrwt 2 root root 4096 Feb 15 22:34 test4
配置SUID/SGID/Sticky属性
配置普通权限时可使用字符或数字,SUID、SGID、Sticky也是同样。使用字符时s表示SUID和SGID、t表示Sticky;4表示SUID、2表示SGID、1表示Sticky。在配置这些属性时仍是使用chmod命令。
l 当前目录目前状况。
[root@srv tmp]# ll
total 52
drwxr-xr-x 2 root root 4096 Feb 15 22:47 test2
drwxr-xr-x 2 root root 4096 Feb 15 22:47 test3
drwxr-xr-x 2 root root 4096 Feb 15 22:46 test4
drwxr-xr-x 2 root root 4096 Feb 15 22:46 test5
-r-xr-xr-x 1 root root 5120 Feb 15 22:46 test6
-r-xr-xr-x 1 root root 3072 Feb 15 22:50 test7
drwxr-xr-x 2 root root 4096 Feb 15 22:56 test1
-r-xr-xr-x 1 root root 6144 Feb 15 22:48 test8
-r-xr-xr-x 1 root root 9216 Feb 15 22:51 test9
为文件test6增长SUID属性。
[root@srv tmp]# chmod u+s test6
l 为文件test8增长SUID属性。在使用数字表示时,原来的三位不变,只是增长了一个千位专门用于SUID、SGID、Sticky属性。下面的4就是SUID属性。
[root@srv tmp]# chmod 4555 test8
l 为目录test2增长SGID属性。
[root@srv tmp]# chmod g+s test2/
l 为目录test3增长SGID属性。
[root@srv tmp]# chmod 2755 test3/
l #为文件test7增长SUID和SGID属性,6=4(SUID)+2(SGID)。
[root@srv tmp]# chmod 6555 test7
l 为目录test4增长Sticky属性。
[root@srv tmp]# chmod o+t test4/
l 为目录test5增长Sticky属性。
[root@srv tmp]# chmod 1755 test5/
l 为目录test1增长SGID和Sticky属性,3=2(SGID)+1(Sticky)。
[root@srv tmp]# chmod 3755 test1/
l 执行上述更改命令后当前目录的状况。
[root@srv tmp]# ll
total 52
drwxr-sr-x 2 root root 4096 Feb 15 22:47 test2
drwxr-sr-x 2 root root 4096 Feb 15 22:47 test3
drwxr-xr-t 2 root root 4096 Feb 15 22:46 test4
drwxr-xr-t 2 root root 4096 Feb 15 22:46 test5
-r-sr-xr-x 1 root root 5120 Feb 15 22:46 test6
-r-sr-sr-x 1 root root 3072 Feb 15 22:50 test7
drwxr-sr-t 2 root root 4096 Feb 15 22:56 test1
-r-sr-xr-x 1 root root 6144 Feb 15 22:48 test8
-r-xr-xr-x 1 root root 9216 Feb 15 22:51 test9
l 取消目录test1的SGID属性。
[root@srv tmp]# chmod g-s test1/
在使用umask命令显示当前的权限掩码时,千位的“0”就是表示SUID、SGID、Sticky属性。
提示:在有些资料上SUID、SGID被翻译为“强制位”,Sticky被翻译为“冒险位”。