2.18 特殊权限set_uid
主要用在命令文件上,赋予普通用户执行此命令时临时拥有此命令所有者的权限,系统中passwd命令默认拥有此命令。
在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置。
问题是:用户的信息保存在文件/etc/passwd中,用户的密码保存在文件/etc/shadow中,也就是说用户更改自己密码时是修改了/etc/shadow文件中的加密密码,但是,
-rw-r--r-- 1 root root 1787 Oct 27 2009 /etc/passwd
-r-------- 1 root root 1187 Oct 27 2009 /etc/shadow
/etc/passwd文件每个用户都有读权限但是只有root有写权限,/etc/shadow文件只有超级用户root有读写权限,也就是说普通用户对这两个文件都没有写权限无法写入新密码,为什么普通用户可以更改密码呢?
PS:在linux中设置或更改用户密码,是先写入到/etc/passwd文件然后通过pwconv命令转换到/etc/shadow文件,执行pwunconv命令可观察到转换前效果,会观察到/etc/shadow文件神奇的消失掉了,而/etc/passwd文件中原来打x的地方变成了真正的加密密码。
其实,用户能更改密码真正的秘密不在于文件的权限,而在于更改密码的命令passwd 。
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd
passwd命令有一个特殊的权限标记s ,存在于文件所有者的权限位上。这是一类特殊的权限SetUID ,可以这样来理解它:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然灵魂附体了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(不要忘记root这个家伙是superuser什么事都可以干),命令执行完成后该身份也随之消失。
chmod u+s 给文件添加set_uid权限
chmod u-s 给文件取消set_uid权限
chmod 4755 /usr/bin/ls 在ls 3位权限的基础上加4表示添加所有者的s权限
chmod 755 /usr/bin/ls 取消所有者的s权限
不能使用chmod u=rws /usr/bin/ls 来添加所有者的s权限,因为这样设置所有者没有x权限,所有者的权限会显示rwS,需要chmod u+x /usr/bin/ls加上x权限才变成rws。
2.19 特殊权限set_gid
作用于命令文件:临时拥有此命令属组的权限
作用于目录:任何用户在此目录下创建的文件以及子目录的属组都为此目录的属组,此目录子目录下创建的文
件以及目录属组也和此目录相同。
添加此权限后会在属组的权限位上x变为s
chmod g+s 添加set_gid权限
chmod g-s 取消set_gid权限
chmod 2755 /usr/bin/ls 添加set_gid权限
chmod 755 /usr/bin/ls 取消set_uid权限
应用实例:
1.给ls命令加上setgid权限
[root@localhost ~] chmod 2755 /usr/bin/ls
[root@localhost ~] ll /usr/bin/ls
-rwxr-sr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls
2.给/tmp/SMB目录加上setgid权限
[root@localhost tmp] chmod g+s SMB
[root@localhost tmp] ll -d SMB/
drwxr-sr-x. 2 root root 6 6月 27 21:36 SMB/
如果SMB目录加上其他用户写的权限的话,切换到其他用户登录,在SMB创建的文件及目录属组就会是root
2.20 特殊权限stick_bit
防删除位作用:
普通文件的sticky位会被linux内核忽略(不对文件生效)
目录的sticky位表示这个目录里的文件只能被owner和root删除
如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者也没有文件读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,其它用户就不可以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置才可使用。
注:能否删除一个文件不取决于文件本身的权限,而在于是否有上级目录写的权限。
chmod o+t 添加防删除位权限
chmod o-t 取消防删除位权限
chmod 1777 添加防删除位权限
chmod 777 取消防删除位权限
chmod +t 添加防删除位权限
chmod -t 取消防删除位权限
系统中/tmp目录默认带有防删除位权限:
[root@localhost tmp] ll -d /tmp
drwxrwxrwt. 11 root root 4096 6月 27 21:45 /tmp
当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由:
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。
有时你设置了s或t 权限,你会发现它变成了S或T,这是因为在那个位置上你没有给它x(可执行)的权限,这样的话这样的设置是不会有效的,你可以先给它赋上x的权限,然后再给s或t 的权限。
2.21 软链接文件
软链接相当于windows中的快捷方式,它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
语法:
ln -s 源文件 目标文件
ln -s /tmp/gavin/ /root/
linux系统中默认带有很多软链接,比如/bin /sbin /lib64 /lib等,/usr/lib64目录中存在很多软链接,做软链接时最好都使用绝对路径,以免挪动位置后找不到源文件。
软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,软链接文件本身的大小和绝对路径以及文件名的长短有关。
2.22 硬连接文件
硬链接只能用在文件,不能用在目录
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
语法:
ln 源文件 目标文件
ln /etc/passwd /root/