本文共 4248 字,大约阅读时间需要 14 分钟。
上次整理了关于linux系统的文件及目录权限,其实为了系统的安全性:
linux还有一些特殊权限: set_uid:(主) set_gid:(组) stick_bit:(其他)
1、set_uid: 授权普通用户临时拥有文件/目录所有者的权限:该权限只能授于二进制可执行文件:
如:当普通用户要给自己修改密码:则需要临时拥有root用户对passwd的属主权限才可以:如下:
1 2 3 4 | [root@localhost ~] # which passwd #查看passwd的路径 /usr/bin/passwd [root@localhost ~] # ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd #其所属主为rws.拥有uid权限. |
1.1;那么如何设置让普通用户拥有对文件的临时权限呢:
格式: chmod u+s filename #u表示文件所属主的加上s权限则表示拥有uid权限:
1 2 3 4 5 6 | [root@localhost ~] # chmod u+s /usr/bin/ls #给用户添加get_uid权限: [root@localhost ~] # ls -ld /usr/bin/ls #查看get_uid权限: -rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls [root@localhost ~] # su - yuanhh #切换到普通用户: [yuanhh@localhost ~]$ ls /root/ anaconda-ks.cfg #可以查看此目录: |
即一般普通用户是不能查看/root/的目录的文件:只有加入了set_uid才可以。
1.2:如何取消普通用户对文件的临时权限:
格式:chmod u-s filename #表示取消文件的所属主的s权限则表示取消uid:
1 2 3 4 5 | [root@localhost ~] # chmod u-s /usr/bin/ls #取消二进制文件的uid权限: [root@localhost ~] # su - yuanhh 上一次登录:四 10月 26 21:26:41 CST 2017pts /0 上 [yuanhh@localhost ~]$ ls /root/ ls : 无法打开目录 /root/ : 权限不够 #发现会无法查看root的目录: |
另外:如果二进制文件的所属主有执行权限,则会显示小s,如果没有执行权限,只会显示大S权限:
2、set_gid:针对用户组来操作,有以下两种用法:
2.1:可以用于文件,可以让普通用户临时拥有所属组的身份及权限,同set_uid的用法相同:
2.2:可以用于目录,但对此目录修改了set_gid权限后,再在此目录下再创建文件/目录,其所属组与其父目录是一致的。
2.3:那么如何给目录增加set_gid权限:
格式:chmod g+s filename/dir #给某个目录/文件增加set_gid权限:
[root@localhost ~]# ls -ld yuan/
drwxr-sr-x 4 root yuanhh 42 10月 27 00:18 yuan/ 1 2 3 4 5 6 7 8 | [root@localhost ~] # chmod g+s yuan #给yuan这个目录增加gid权限: [root@localhost ~] # ls -ld yuan drwxr-sr-x 2 root yuanhh 6 10月 27 00:14 yuan [root@localhost ~] # cd yuan/ [root@localhost yuan] # touch 1 & mkdir 2 创建文件1和目录2. [root@localhost yuan] # ls -al -rw-r--r-- 1 root yuanhh 0 10月 27 00:15 1 #两个文件的所属组都变化。 drwxr-sr-x 2 root yuanhh 6 10月 27 00:15 2 #两个文件的所属组都变化。 |
2.4:那么如何取消给目录增加的set_gid权限呢:
格式:chmod g-s filename/dir #给某个目录/文件减去set_gid权限:
1 2 3 4 5 6 7 | [root@localhost ~] # chmod g-s yuan #给文件减去gid权限: [root@localhost yuan] # touch 3 & mkdir 4 #并创建文件3和目录4: [root@localhost ~] # ls -la yuan/ -rw-r--r-- 1 root yuanhh 0 10月 27 00:15 1 drwxr-sr-x 2 root yuanhh 6 10月 27 00:15 2 -rw-r--r-- 1 root root 0 10月 27 00:18 3 #取消gid后,重新创建的文件: drwxr-xr-x 2 root root 6 10月 27 00:18 4 #取消gid后,重新创建的文件: |
3、sticky_bit: 防删除位(在此目录下各个用户创建的文件和目录只有他自己可以删除,其他用户不能删除)
在linux下tmp就是一个sticky_bit的文件:
3.1:那么如何给某个目录添加sticky_bit的权限:
格式: chmod o+t dir #给某个目录增加t权限:
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt. 13 root root 4096 10月 26 21:49 /tmp/ 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@localhost ~] # su - yuanhh #首先我们全切换都普通用户yuanhh: [yuanhh@localhost tmp]$ touch 1 & mkdir 2 #并创建文件1和目录2. [root@localhost ~] # su - user1 #然后切换到普通用户user1. [user1@localhost tmp]$ mkdir 3 & touch 4 #并创建文件4和目录3. [user1@localhost tmp]$ ls -la -rw-rw-r-- 1 yuanhh yuanhh 0 10月 27 00:27 1 #用户yuanhh创建的文件 drwxrwxr-x 2 yuanhh yuanhh 6 10月 27 00:27 2 #用户yunhh创建的文件 drwxrwxr-x 2 user1 user1 6 10月 27 00:28 3 #用户user1创建的文件 -rw-rw-r-- 1 user1 user1 0 10月 27 00:28 4 #用户user1创建的文件 [user1@localhost tmp]$ rm -fr 1 #然后在user1用户下,无法1文件。 rm : 无法删除 "1" : 不允许的操作 [user1@localhost tmp]$ rm -fr 2 #然后在user1用户下,无法2目录。 rm : 无法删除 "2" : 不允许的操作 |
3.2:那么如何取消sticky_bit的权限:
格式:chmod o-t dir #取消目录的stick_bit的权限:
1 | [root@localhost ~] # chmod o-t /tmp/ |
二、硬链接和软连接:
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
硬链接等于复制了一份属性信息:相当于多个文件有了同一个inode的多张皮,等于多个文件使用同一个inode信息,它们之间相互的为硬链接文件:
可以删除源文件后,硬链接不受影响:
注意:不会占双份的空间,因为只有一个inode.
目录不支持硬链接:
不支持跨分区链接: 因为不同的分区有自己inode体系,inode不能重复:
硬链接可由命令 ln 创建,如:
ln ln /root/1 /tmp/2
2、软链接又称之为符号连接(Symbolic Link)。软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
软连接文件删除源文件会影响文件本身:
如下图:相当于在这个文件里存了另外一个文件的路径:常用在/lib64/下居多,以粉绿色显示:
[root@localhost ~]# ls -l /bin
lrwxrwxrwx. 1 root root 7 10月 16 22:16 /bin -> usr/bin
链接文件大小与后面的路径有关系,
那么如何做软连接了:如下:
ln -s 源连接文件 目标文件(不存在)
ln -s old.
dir
soft.link.
dir
如下实验:我们把yum.log链接到/root/下的111目录:
[root@localhost tmp]# ln -s /tmp/yum.log /root/111/yum1.log
[root@localhost tmp]# ls -l /root/111/
lrwxrwxrwx 1 root root 12 12月 21 14:38 yum1.log -> /tmp/yum.log
建议使用写成绝对路径的方式,不然容易出现问题:
软连接:可用于工作中解决磁盘占用 空间的问题:
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接.
注意:硬链接不能链接目录,不能跨分区连接: