2.17 特殊权限set_uid
- linux系统中支持普通用户自己更改用户密码,改密码意味着要改密码的文件:/etc/shadow,但该文件的权限是000,故普通用户没有权限去改该文件,root用户具有更改该文件权限的权限,给某一命令赋予特殊权限set_uid可解决这一矛盾,set_uid的作用是保证普通用户临时拥有该命令所有者的身份,例如:passwd命令的所有者为root,给passwd赋予set_uid权限,当普通用户执行passwd命令时,它就会临时拥有root用户的身份;给一个文件设置set_uid权限的前提是这个文件是一个二进制且可执行文件,给非二进制文件赋予该命令没有意义,给某一命令设置了set_uid权限之后,对应文件的权限位为“s”(ll命令可查看)
-
例如在 普通用户情况下,没有权限对/root目录执行#ls 命令,此时在root用户下执行命令 #chmod u+s /usr/bin/ls 给ls命令设置 set_uid权限,使普通用户临时拥有root用户的权限,之后再在普通用户登录情况下就可执行ls命令(例如#ls /root/)
-
可以执行 #chmod u=rws /usr/bin/ls 给命令ls添加set_uid权限,前提是ls命令的所有者已经具有x权限,否则会是“S”(实际不受影响,普通用户依然能执行相应命令)
-
执行命令 #chmod u-s /usr/bin/ls给ls命令取消set_uid权限
-
系统中具有s权限的命令不多,常见的命令为:/usr/bin/passwd
-
目录也可设置set_uid权限,但无实际意义
set_gid使普通用户临时拥有
该命令
所属组的身份,
- #chmod g+s /usr/bin/ls #给ls命令(文件)设置set_gid权限,使普通用户临时具有root用户组的权限,root用户组对于/root目录具有读和可执行权限,故使用命令后,普通用户可执行ls命令查看/root命目录
- #chmod g-s /usr/bin/ls #给ls命令取消set_gid权限;
- #chmod g+s /directory-1 #给目录directory-1设置set_gid权限,那么在此目录下新创建的子目录和子文件的所属组(包括子目录的子目录和子文件)就和目录directory-1的所属组一致
- #chmod g-s /directory-1 #给目录directory-1取消set_gid权限后,再在该目录下新创建子目录和子文件后其所属组就是当前用户对应的默认所属组
- stick_bit权限(t权限). 系统目录/tmp默认具有t权限(/tmp默认权限值为777),命令#ls -ld /tmp查看/tmp,对应的其他用户的权限位为“t”(即使是t,也是具有x权限的),又叫“防删除位”,“谁的文件谁做主”,在/tmp目录下普通用户user1创建的文件/目录不能被其他普通用户删除(可更改vi,可看,可被root用户删除),这个权限由这个文件的父级目录(/tmp)决定的
- #chmod o+t /directory-1 #给一个目录设置t权限
- 若用户user1在/tmp下创建了一个目录d1,并将其权限设为777,用户user2在该目录d1下新创建了一个子目录d2和一个子文件f2,那么用户user1可以删除子目录d2和子文件f2(尽管d2和f2对其他用户均没有可写权限),此时由d2和f2所在的父目录(d1)的读写权限(777)决定;如果一个目录设置了t权限,那就会具有防删除的功能
1. 软链接
- #ln -s [源文件f1,大文件] [软链接文件f2,小文件,类似于Win系统的快捷方式]
例如:#ln -s /tmp/yum.log /root/fei/yum.log,即给文件/tmp/yum.log做软链接,链接到/root/fei/yum.log,用命令#ll /root/fei可看到yum.log->/tmp/yum.log.
- 配置软链接文件,源文件和软链接文件尽量使用绝对路径。注意:如果源文件和软链接文件在同一目录下,在执行软链接命令时要么使用绝对路径,要么要先执行cd命令进入当前目录下再执行才可
- 软链接文件大小和路径有关,路径越长,文件越大
- 对于软连接,不能删除源文件,否则软链接文件找不到源
- #ln -s [源目录d1] [软链接目录d2] 软链接不仅可以链接文件,也可以链接目录,而且可以跨分区进行软链接
2.软连接应用实例
例如某个服务srv1一直在向/boot/srv1.log中写日志,几乎要占满/boot分区,服务srv1不能停,其写日志的路径不能变。解决:将/boot/srv1.log移动到/srv1.log(根分区:/,空间更大),#cp /boot/srv1.log /srv1.log,然后#rm /boot/srv1.log,再做软链接:#ln -s /srv1.log /boot/srv1.log,这样服务srv1依然往/boot/srv1.log写日志(服务srv1写日志的路径不会变的),但实际是写到了/srv1.log,(/boot/srv1.log-->/srv1.log)
2.21 硬链接文件
- #ln file1 file1_hard 此时file1和file1_hard的inode号一样,大小相同,编辑时间相同。若两个文件的inode号一样,则这两个文件相互为硬链接文件,大小相同,谁为源、谁为硬链接均无所谓
- 对于硬链接,即使删除了file1,file1_hard文件依然存在而不受影响,其inode号不变,只不过通过ll命令查看时其inode信息减少了1(实际是inode存文件信息,inode记录文件的属性;两个硬链接文件名相当于两张皮,均指向同一个inode)
- 硬链接文件不会占两个空间,因只有同一个inode
- 不支持对目录做硬链接,只支持对文件做硬链接,且不能跨分区做硬链接(因两个分区下存在相同inode的文件,分区跟目录不同);一个分区格式化的时候就会创建inode,inode号是从1开始的。,所以每个独立分区自然是有相同的inode号的
- 硬链接比较大的用处是,作为文件备份,其中一个被删除,还有另外一个