[toc]
特殊权限-Set_uid,set_gid,stick_bit,软硬链接
一 特殊权限 set_uid
即下图出现的s
set_uid的作用是让普通用户临时拥有该命令所有者的权限,给一个文件设置uid的前提是该文件是二进制可执行文件,例如上图中红色高亮部分“/usr/bin/passwd”
chomd u+s 即 user+set_uid
[root@xavi-001 ~]# chmod u+s /usr/bin/ls
[root@xavi-001 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
在另外一个窗口使用普通用户切换
chmod u=rws /usr/bin/ls
[root@xavi-001 ~]# chmod u=rws /usr/bin/ls
[root@xavi-001 ~]# ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls //这里显示的是大S
现在通过给ls命令增减s权限,我们实验成功,但是给一个文件set_uid的前提是该文件是++二进制++可执行文件;那么怎么确认像ls这种文件是不是二进制文件,我们需要用"file"这个命令。而文本都不是的。如/etc/下,而命令/bin/都是的。所以不确定,我们需要用"file"检测下;
[root@xaviyunserver ~]# file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped
[root@xaviyunserver ~]# file /bin/mv
/bin/mv: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1484f933593cbd1ec348781b1b35ff5bb3caf4a1, stripped
[root@xaviyunserver ~]# file /etc/passwd
/etc/passwd: ASCII text
[root@xaviyunserver ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1e5735bf7b317e60bcb907f1989951f6abd50e8d, stripped
二 set_gid
该权限可以作用在文件上(二进制可执行文件),也可作用在目录上
当作用于文件上时,其功能和set_uid一样,它会使文件在执行阶段具有文件所属组的权限,
[xavi@xavi-001 ~]$ ls /root //正常查看
2.txt anaconda-ks.cfg.1 initial-setup-ks.cfg [root@localhost
目录被设置权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组,即权限一致
总结:目录原来存在的子目录和文件,无论改变其目录的所属组和gid,子目录和文件均未变化;在未添加gid的目录下,原来的文件和目录gid均未变化;在已经改变所属组的目录下,新建的目录和文件,和父目录是一样的所属组;在已经添加gid的目录下,新建的目录同样被添加上gid;
三 特殊权限stick bit
防删除位,文件是否可以被用户删除,主要取决于该文件所在的目录是否对该用户具有写权限,如果没有,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。
[root@xaviyunserver ~]# ls -ld /tmp/
drwxrwxrwt. 9 root root 4096 Jul 3 10:43 /tmp/
查看目录tmp权限,发现它是rwt,而不是rwx,而t就是stick_bit,防删除权限;
[root@xaviyunserver ~]# cd /tmp/
[root@xaviyunserver tmp]# mkdir 123
[root@xaviyunserver tmp]# touch 123/1.txt
[root@xaviyunserver tmp]# touch 11.txt
[root@xaviyunserver tmp]# useradd xavi
[root@xaviyunserver tmp]# su - xavi
[xavi@xaviyunserver ~]$ cd /tmp/
[xavi@xaviyunserver tmp]$ head -n3 /etc/passwd > 123/1.txt
-bash: 123/1.txt: Permission denied
[xavi@xaviyunserver tmp]$ rm -rvf 123
rm: cannot remove ‘123/1.txt’: Permission denied
[xavi@xaviyunserver tmp]$ rm -rf 11.txt
rm: cannot remove ‘11.txt’: Operation not permitted
在root用户下,在tmp目录下创建新目录和文件,普通用户无法写入,无法删除;
chmod o+t 目录/文件
由此,一个目录下的文件能不能删除,不取决于这个目录下的文件的权限,而是取决于这个文件所在目录的权限,是否可写。例如上面的/tmp目录删除,而目录8下面的8.txt;
四 软链接文件,软链接是建立一个独立的文件,当读取这个链接文件时,会把读取的行为转发到该文件所链接的文件上。
概念:软连接类似于windows的快捷方式,软链接不只可以连接文件,也可以链接目录。软连接后面可以跟绝对路径;也可以跟相对路径,相对路径的话得在你要去的目录下;### 建议使用绝对路径。
命令如下:ln -s [源文件] [目标文件] 如果你创建软连接不存在的时候,会红色常闪,那么直接在这个路径下touch一个文件即可。
[root@xavi-001 tmp]# ls -l /bin
lrwxrwxrwx. 1 root root 7 8月 9 05:31 /bin -> usr/bin
[root@xavi-001 tmp]# /bin/ls
11.txt
123
123.11.txt
1.txt
22.txt
[root@xavi-001 tmp]# /usr/bin/ls
11.txt
123
123.11.txt
1.txt
22.txt
-
以上的软链接和原文件显示的是相同的
-
如何创建软链接:ln -s 来源文件 目的文件/ 新链接 以下为文件的软链接示例:
[root@xavi-001 ~]# ln -s /tmp/yum.log /root/111/yum.log
[root@xavi-001 ~]# ls -l /root/111
总用量 0
lrwxrwxrwx. 1 root root 12 12月 21 23:03 yum.log -> /tmp/yum.log
除了文件,目录也可以做软链接
[root@xavi-001 ~]# ln -s /tmp/xavi2 /root/111/xavi3
[root@xavi-001 ~]# ls -l !$
ls -l /root/111/xavi3
lrwxrwxrwx. 1 root root 10 12月 21 23:07 /root/111/xavi3 -> /tmp/xavi2
软链接最好是绝对路径,如果是相对路径,如果复制移动到其他电脑或盘符,都有可能丢失
五、硬链接
概念:硬链接不支持对目录做硬链接,只支持对文件做。 即便是硬链接源地址被删除,也不受影响,相当于windows复制。 inode号如果相同有N个文件,也不会占用空间,因为数据都存在了inode里面。 文件做硬链接可以,但是有一个前提,不可以跨分区 命令如下 :ln [源地址] [目标地址]
直接再建立一个inode链接到文件放置的块区域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。
[root@xavi-001 ~]# ln -s 2.txt 2_sorft.txt
[root@xavi-001 ~]# ln 2.txt 2_heard.txt
[root@xavi-001 ~]# ls -l
总用量 11
-rwx------. 3 root root 2322 12月 19 21:37 2_heard.txt
lrwxrwxrwx. 1 root root 5 12月 21 23:27 2_sorft.txt -> 2.txt
-rwx------. 3 root root 2322 12月 19 21:37 2.txt
-rw-------. 1 root root 1422 8月 9 05:35 anaconda-ks.cfg.1
-rw-r--r--. 1 root root 1647 8月 9 00:17 initial-setup-ks.cfg
-rw-r--r--. 1 root root 0 12月 13 00:01 [root@localhost
lrwxrwxrwx. 1 root root 12 12月 21 22:59 yum.log -> /tmp/yum.log
硬链接限制:1 不能夸文件系统,因为不同文件系统有不同的inode table; 比如/boot下的不能放到/root下;2 是不能链接目录,只能对文件
[root@xavi-001 ~]# ln /boot/config-3.10.0-514.el7.x86_64 /tmp/config.1
ln: 无法创建硬链接"/tmp/config.1" => "/boot/config-3.10.0-514.el7.x86_64": 无效的跨设备连接
硬链接总结:
当系统要读取一个文件时,就会先去读 inode table, 一个文件对应一个 inode, 然后再根据 inode 中的信息到块区域去将数据取出来;
硬链接是直接使用了和源文件相同的 inode, 硬链接文件直接链接到文件放置的块区域。 也就是说,进行硬链接时实际上该文件内容没有任何变化,只是制定了相同的 inode;
创建硬链接会增加额外的记录项以引用文件,对应于同一文件系统上一个物理文件每个文件引用相同的 inode 号 创建时链接数递增;
删除文件时:rm 命令递减计数的链接,文件要存在,至少有一个链接数当链接数为零时,该文件被删除不能跨越驱动器或分区。