在Linux系统中,有时候执行某个命令时,需要对另一个文件进行操作,而要做的文件又不是普通用户有权限进行操作的。例如,修改用户密码passwd,该命令文件的所有者和组都是root,同组用户和其他用户都具有执行权限,即普通用户也可以使用命令修改自己的密码,而被修改的文件/etc/passwd又没有普通用户的权限,这时就可以通过suid来解决。提示:用八进制数4000表示setuid权限位。
suid知识小结:
1、用户对应的前三位的x位上如果有s就表示设置了suid。当x位上没有x的时候,suid就是S。
2、setuid位是让普通用户可以以root(或其他)用户的角色运行root(或其他)账号才能运行的程序或命令。
3、仅对二进制命令或程序有效,不能用在shell等类似脚本文件上(因为shell脚本仅仅调用二进制命令程序而已,因此,具有权限还需要看二进制命令本身)。
4、二进制命令或程序需要可执行权限x。
5、suid修改的是执行命令的权限,而不是处理的目标文件的权限。
6、suid权限仅在程序执行过程中有效。
7、执行命令的任意系统用户都可以获得该命令程序执行期间对应的拥有者的所有权限。
8、suid是一把双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。系统中很少用到suid功能的命令将其取消suid权限(安全优化)。
举例:
[email protected]:~$ which passwd /usr/bin/passwd [email protected]:~$ ls -l `which passwd` -rwsr-xr-x 1 root root 51224 7月 22 21:49 /usr/bin/passwd [email protected]:~/test/suid$ touch suid [email protected]:~/test/suid$ ls -l -rw-rw-r-- 1 xiaorui xiaorui 0 11月 28 20:59 suid [email protected]:~/test/suid$ chmod 4664 suid [email protected]:~/test/suid$ ls -l -rwSrw-r-- 1 xiaorui xiaorui 0 11月 28 20:59 suid [email protected]:/lrz$ rm -f suid rm: cannot remove ‘suid‘: Permission denied [email protected]:/lrz# chmod u+s suid [email protected]:/lrz# ls -l -rwSr--r-- 1 root root 0 11月 28 21:13 suid [email protected]:/lrz$ rm -f suid rm: cannot remove ‘suid‘: Permission denied [email protected]:~# which rm /bin/rm [email protected]:~# chmod u+s /bin/rm [email protected]:~# ls -l /bin/rm -rwsr-xr-x 1 root root 60160 11月 5 01:45 /bin/rm [email protected]:/lrz$ ls -l suid -rwSr--r-- 1 root root 0 Nov 28 21:13 suid [email protected]:/lrz$ rm -f suid [email protected]:/lrz$ ls
如何查找拥有suid权限的文件?
[email protected]:~# find /usr/bin -type f -perm 4755 /usr/bin/passwd /usr/bin/pkexec /usr/bin/newgrp /usr/bin/sudo /usr/bin/mtr /usr/bin/chfn /usr/bin/gpasswd /usr/bin/chsh [email protected]:~# [email protected]:~# find /usr/bin -type f -perm 4755|xargs ls -l -rwsr-xr-x 1 root root 50712 7月 22 21:49 /usr/bin/chfn -rwsr-xr-x 1 root root 41432 7月 22 21:49 /usr/bin/chsh -rwsr-xr-x 1 root root 68312 7月 22 21:49 /usr/bin/gpasswd -rwsr-xr-x 1 root root 75320 10月 25 2014 /usr/bin/mtr -rwsr-xr-x 1 root root 36688 7月 22 21:49 /usr/bin/newgrp -rwsr-xr-x 1 root root 51224 7月 22 21:49 /usr/bin/passwd -rwsr-xr-x 1 root root 23304 11月 25 05:16 /usr/bin/pkexec -rwsr-xr-x 1 root root 151072 3月 13 2015 /usr/bin/sudo [email protected]:~# find /usr/bin -type f -perm 4755 -exec ls -l {} \; -rwsr-xr-x 1 root root 51224 7月 22 21:49 /usr/bin/passwd -rwsr-xr-x 1 root root 23304 11月 25 05:16 /usr/bin/pkexec -rwsr-xr-x 1 root root 36688 7月 22 21:49 /usr/bin/newgrp -rwsr-xr-x 1 root root 151072 3月 13 2015 /usr/bin/sudo -rwsr-xr-x 1 root root 75320 10月 25 2014 /usr/bin/mtr -rwsr-xr-x 1 root root 50712 7月 22 21:49 /usr/bin/chfn -rwsr-xr-x 1 root root 68312 7月 22 21:49 /usr/bin/gpasswd -rwsr-xr-x 1 root root 41432 7月 22 21:49 /usr/bin/chsh
sgid知识小结:
与suid不同的是,sgid既可以针对文件也可以针对目录设置。
对于文件,sgid的功能如下:
1、sgid仅对二进制命令及程序有效。
2、二进制命令或程序需要有可执行权限x。
3、执行程序的任意用户可以获得该命令程序执行期间所属组的权限。
对于目录,sgid的功能如下:
1、用户在此目录下创建的文件和目录,具有和此目录相同的用户组。
setgid位主要用在目录中,当为某个目录设置了setgid位之后,在该目录中新创建的文件具有该目录的所有者权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变得简单。提示:用八进制数2000表示setgid权限位。
sgid locate命令案例:
[email protected]:~# which locate /usr/bin/locate [email protected]:~# ls -l `which locate` lrwxrwxrwx 1 root root 24 9月 20 07:49 /usr/bin/locate -> /etc/alternatives/locate [email protected]:~# ls -l /etc/alternatives/locate lrwxrwxrwx 1 root root 16 9月 20 07:49 /etc/alternatives/locate -> /usr/bin/mlocate [email protected]:~# ls -l /usr/bin/mlocate -rwxr-sr-x 1 root mlocate 39520 11月 18 2014 /usr/bin/mlocate [email protected]:~# ls -l /var/lib/mlocate/mlocate.db -rw-r----- 1 root mlocate 9988044 11月 28 20:36 /var/lib/mlocate/mlocate.db
rhce考试题:
创建共享目录:创建共享目录/home/admins,属组为adminuser,adminuser组成员对目录有读写和执行的权限,其他所有用户没有任何权限(除root除外),在/home/admins目录中创建的文件,会自动继承adminuser组
[email protected]:~# groupadd adminuser [email protected]:~# mkdir /home/admins [email protected]:~# ls -ld /home/admins drwxr-xr-x 2 root root 4096 11月 28 22:09 /home/admins [email protected]:~# chown .adminuser /home/admins/ [email protected]:~# ls -ld /home/admins drwxr-xr-x 2 root adminuser 4096 11月 28 22:09 /home/admins [email protected]:~# chmod 2770 /home/admins/ [email protected]:~# ls -ld /home/admins/ drwxrws--- 2 root adminuser 4096 11月 28 22:09 /home/admins/ [email protected]:~# touch /home/admins/sgid.txt [email protected]:~# ls -l /home/admins/sgid.txt -rw-r--r-- 1 root adminuser 0 11月 28 22:10 /home/admins/sgid.txt
suid、sgid小结:
针对suid以及sgid,工作中尽量不用,多用sudo 管理,如果有可能查找系统无用suid位的命令等进行撤除。s S都是suid(用户位),sgid(用户组位)的标示,和x重合时就显示小写的字母s。
粘滞位sticky Bit(sbit)及设置方法
粘滞位的理解,我们还是先看一个例子:
[email protected]:~# ls -ld /tmp drwxrwxrwt 17 root root 4096 11月 28 23:57 /tmp
我们看到/tmp权限位最后的一个字母是t,这就是设置了粘滞位。
粘滞位的设置,用八进制的1000位来表示
粘滞位的功能现在也很少用了,不过对与像/tmp目录这样的,是整个系统临时文件存储地,还是有点意义。一个目录即使它的所有权限都放开rwxrwxrwx,如果是设置了粘滞位,除非目录的属主和root用户有权限删除它,除此之外其他用户不能删除这个目录。用途一般是把一个文件夹的权限都打开,然后来共享文件,像/tmp目录一样。
sticky:比sgid更安全,让多个用户都具有写权限的目录,每个用户只能删除自己的文件。表现在other位,用t表示,如果没有执行权限,那么就是T,如果有执行权限,那么就是t。
特殊权限对应的数字suid 4000 ,sgid 2000,粘滞位1000