SUID权限简介
SUID简介:
1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
2.命令执行者要对该程序文件拥有执行(x)权限.
3.命令执行者在执行该程序时获得该程序文件属主的身份.
4.SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
以passwd命令说明
1 [vampire@LAMP ~]$ whereis passwd 2 passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
passwd是一个命令,即一个可执行二进制文件,可以使用这个命令来修改用户密码
由于用户密码是存储在/etc/shadow文件中,但是该文件权限是000,就是不允许任何人修改(root除外),
使用该命令能修改用户密码,是因为执行该命令的时候我们拥有了一个特殊权限,这个特殊权限让我们可以
修改/etc/shadow文件
查看passwd文件的详细信息
1 [vampire@LAMP ~]$ ll /usr/bin/passwd 2 -rwsr-xr-x. 1 root root 25980 Feb 17 2012 /usr/bin/passwd //可以看到该文件所属主权限标志位上是rws,文件属主是root,其他人具有执行权限(x),就是说当其他人执行该命令是会暂时获得文件属主权限,即root权限,而root是可以操作/etc/shadow文件的
查看shadow文件得权限
1 [vampire@LAMP ~]$ ll /etc/shadow 2 ---------- 1 root root 969 May 16 22:44 /etc/shadow 3 4 [vampire@LAMP ~]$ cat /etc/shadow 5 cat: /etc/shadow: Permission denied //尝试查看shadow文件,没有权限,会发现使用vim,tail,head也一样没有权限
这样就相当于把shadow文件保护起来了,只有使用执行passwd命令修改密码那一刻才能修改shadow文件
给文件设定SUID权限
1 [vampire@LAMP vampire]$ touch test.file //创建一个新文件 2 [vampire@LAMP vampire]$ ll 3 total 0 4 -rw-rw-r-- 1 vampire vampire 0 May 20 10:34 test.file 5 [vampire@LAMP vampire]$ chmod u+s test.file //给文件添加SUID权限 6 [vampire@LAMP vampire]$ ll 7 total 0 8 -rwSrw-r-- 1 vampire vampire 0 May 20 10:34 test.file
上面给文件添加SUID权限貌似成功了,但是是错误的,正常的拥有SUID权限的文件中属主标志位第三位是s.
之所以出现S,是因为我们设置的文件之前就没有执行权限,test.file权限为664
1 [vampire@LAMP vampire]$ chmod 4775 test.file //给文件赋予可执行权限,再设置SUID权限 2 [vampire@LAMP vampire]$ ll 3 total 0 4 -rwsrwxr-x 1 vampire vampire 0 May 20 10:34 test.file
取消文件SUID权限
1 [vampire@LAMP vampire]$ chmod 755 test.file 2 [vampire@LAMP vampire]$ ll 3 total 0 4 -rwxr-xr-x 1 vampire vampire 0 May 20 10:34 test.file
注:给文件赋予SUID权限之前,该文件一定要有可执行权限(x)
给文件赋予SUID权限的两种方式
chmod 4xxx test.file (后面xxx中任何一个有可执行权限即可)
chmod u+x test.file