zoukankan      html  css  js  c++  java
  • 特殊权限set_uid /特殊权限set_gid/特殊权限stick_bit/软链接文件/硬连接文件

     

    • 2.18 特殊权限set_uid 
    • 2.19 特殊权限set_gid
    • 2.20 特殊权限stick_bit
    • 2.21 软链接文件
    • 2.22 硬连接文件

    特殊权限set_uid(s权限用户user权限

    [root@centos_1 ~]# ls -l /usr/bin/passwd 

    -rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

    权限中的s 就是特殊权限 set_uid

     

    psswd 命令支持普通用户改自己的密码

     

    [root@centos_1 ~]# ls /etc/shadow

    /etc/shadow

    [root@centos_1 ~]# ls  -l !$

    ls  -l /etc/shadow

    ---------- 1 root root 642 11月 20 20:50 /etc/shadow

     

    /etc/shadow 是没有权限的

     

    psswd有set_uid权限,当普通用户执行passwd的时候临时有root身份的权限;

     

    给文件设置set_uid前提文件是二进制可执行文件

     

    切换用户

    [root@centos_1 ~]# su - xiaobo

    [xiaobo@centos_1 ~]$ 

     

    给ls设置set_uid权限(s权限):

    root用户下

    chmod u+s  /usr/bin/ls

    ls -l /usr/bin/ls

    [root@centos_1 xiaobo]# ls -l /usr/bin/ls

    -rwxr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

    [root@centos_1 xiaobo]# chmod u+s /usr/bin/ls

    [root@centos_1 xiaobo]# ls -l !$

    ls -l /usr/bin/ls

    -rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

     

    现在ls有s权限了

    切换到xiaobo用户

    su - xiaobo

    ls /root

    [root@centos_1 ~]# su - xiaobo

    上一次登录:一 11月 20 23:04:33 CST 2017pts/0 上

    [xiaobo@centos_1 ~]$ whoami

    xiaobo

    在没有给ls设置s权限之前,普通用户是不能查看root用户下面的文件的

    [xiaobo@centos_1 ~]$ ls /root

    ls: 无法打开目录/root: 权限不够

     

    给ls设置s权限后是可以临时查看root用户下的文件:

    [xiaobo@centos_1 ~]$ ls /root

    11  anaconda-ks.cfg.1

    [xiaobo@centos_1 ~]$ ls -l /usr/bin/ls

    -rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

     

    取消set_uid(s)权限:

    chmod  u-s  /usr/bin/ls

    root@centos_1 xiaobo]# chmod u-s !$     (其中!$的意思是上一次的路径,这里为了方面而省略)

    chmod u-s /usr/bin/ls

    [root@centos_1 xiaobo]# ls -l !$

    ls -l /usr/bin/ls

    -rw-r-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

     

     

    如果没有x执行权限就是大写的S

    -rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

    如果有x权限就是小写的s

    -rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

    其实有没有x权限效果都是一样的,因为s权限包含x权限。

     

    s权限也是能给目录设置权限的,但是没有意义。

     

     

    特殊权限set_gid(group所属主权限g)

    给ls设置g权限

    [root@centos_1 xiaobo]# chmod g+s /usr/bin/ls

    [root@centos_1 xiaobo]# ls -l !$

    ls -l /usr/bin/ls

    -rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

     

    set_gid跟set_uid权限是一样的,只不过换了一个角色,这里s权限的位置放到了所属组。

    这样普通用户临时有了所属主的身份。

    这样xiaobo用户也可以查看root目录下的内容了。

    [xiaobo@centos_1 ~]$ ls -ld /root/

    dr-xr-x---. 4 root root 175 11月 20 22:21 /root/

     

    给目录设置set_gid权限:

    [root@centos_1 ~]# chmod g+s 234

    [root@centos_1 ~]# ls -ld 234

    drwxr-sr-x 2 root root 6 11月 20 23:45 234

     

     

    更改目录234的所属组:

    chown :xiaobo 234

    [root@centos_1 ~]# chgrp xiaobo 234

    [root@centos_1 ~]# ls -ld 234

    drwxrwsr-x 2 root xiaobo 6 11月 20 23:49 234

    在234目录下创建文件和目录之后,所属组跟目录保持一致都是xiaobo

    [root@centos_1 ~]# touch 234/file

    [root@centos_1 ~]# mkdir 234/xiaobo

    [root@centos_1 ~]# ls -l 234/

    总用量 0

    -rw-r--r-- 1 root xiaobo 0 11月 20 23:52 file

    drwxr-sr-x 2 root xiaobo 6 11月 20 23:57 xiaobo

     

    取消234目录set_gid权限后,在目录下创建文件,文件所属组变回root

    [root@centos_1 ~]# chmod g-s 234/

    [root@centos_1 ~]# touch 234/xiao

    [root@centos_1 ~]# ls -l 234/

    -rw-r--r-- 1 root root   0 11月 21 00:00 xiao

     

    总结:

    set_gid 不仅作用在文件上,也作用在目录上。

    作用在文件上跟set_uid作用一样,让普通用户临时拥有所属组的身份的权限。

    当作用在目录上,在目录下创建的子目录和文件的所属组跟该目录的所属组一样。

     

    特殊权限stick_bit防删除位

    权限位中有一个t权限 就是tick_bit权限(防删除位t)

     

    777权限。

     

    t权限:谁的文件谁做主;

    靠父级目录决定。

    用户xiaobo 在 /tmp/下创建myfile文件

    [xiaobo@centos_1 tmp]$ touch myfile

    [xiaobo@centos_1 tmp]$ vi myfile 

    [xiaobo@centos_1 tmp]$ chmod 777 myfile 

    [xiaobo@centos_1 tmp]$ ls -l myfile 

    -rwxrwxrwx 1 xiaobo xiaobo 25 11月 21 01:27 myfile

    用户user1可以编辑/tmp/下的myfile但是不能删除:

    [user1@centos_1 tmp]$ vi myfile 

    [user1@centos_1 tmp]$ rm -rf myfile 

    rm: 无法删除"myfile": 不允许的操作

     

    这是因为 myfile 中t权限依赖于父级目录/tmp/决定

     

    总结:

    stick_bit 作用是防止别人删除自己的文件,但是root用户可以删除。

     

    user1用户在/tmp/下创建目录user1

    [user1@centos_1 tmp]$ mkdir user1

    [user1@centos_1 tmp]$ chmod 777 user1/

    [user1@centos_1 tmp]$ ls -ld user1/

    drwxrwxrwx 2 user1 user1 6 11月 21 01:34 user1/

    touch user1/1

    mkdir user1/11

     

    因为user1目录没有写权限位t,所有user1目录下的文件都可以删除修改。

     

    软链接

    ls -l /lib64/下面有很多类似的软链接文件,两者是相互依赖的,是一个文件。

    lrwxrwxrwx.  1 root root      13 11月  9 15:58 p11-kit-trust.so -> libnssckbi.so

    创建一个软链接:左边是一个原文件,右边是链接文件

    [root@centos_1 ~]# ln -s /tmp/yum.log  /root/234/lianjie

    查看创建的软链接

    [root@centos_1 ~]# ls -l !$

    [root@centos_1 ~]# ls -l 234/lianjie 

    lrwxrwxrwx 1 root root 12 11月 21 01:59 234/lianjie -> /tmp/yum.log

    软链接闪烁,说明链接的文件不存在

    lrwxrwxrwx  1 root   root     12 11月 21 02:14 yum.log -> /tmp/yum.log

    可以touch 创建一个yum.log

    上面的都是绝对路径,那么相对路径是在当前目录下创建软连接:

    [root@centos_1 tmp]# ln -s 1.txt 11.txt

    [root@centos_1 tmp]# ls -l

    lrwxrwxrwx  1 root     root        5 11月 21 02:08 11.txt -> 1.txt

     

    使用相对路径创建软链接是有弊端的,当拷贝到其他机器上去,文件就链接不到了。所以不建议使用相对路径。

     

     

    工作实例:

    当 /boot/分区下有一个xiaobo.log文件,文件不断的写日志,快把boot分填满了,这时候可以做一个软链接,

    将/boot/xiaobo.log链接到/根目录下

    这样操作:

    1.先拷贝一份/boot/xiaobo.log到根目录下:cp   /boot/xiaobo.log    /xiaobo.log

    2.删除/boot/下的xiaobo.log   : rm -f  /boot/xiaobo.log

    3.赶快做一个软链接到跟目录:  ln    -s   /xiaobo.log    /boot/xiaobo.log

    这样就是可以了。左边是实际存在的原文件,右边是不存在的链接文件。

    链接路径是/boot/xiaobo.log ,实际写入的路径是/xiaobo.log

     

    总结:

    软链接就是一个快捷方式,不仅可以链接文件,也可以链接目录,更可以跨分区链接。

     

    硬链接

    硬链接只支持对文件做,不支持对目录做硬链接;

     

    -rw-------. 1 xiaobo xiaobo 3360 11月 17 08:43 anaconda-ks.cfg.1

    其中的1表示inode号,表示没有相同的文件使用inode号(inode作用:记录文件的属性)

     

    drwxr-xr-x  2 root   root      6 11月 21 04:46 test

     

    对于目录,2表示有两个文件使用了inode号,就是目录下的.和..

    [root@centos_1 ~]# ls -la test/

    总用量 0

    drwxr-xr-x  2 root root   6 11月 21 04:46 .

    dr-xr-x---. 5 root root 201 11月 21 04:46 ..

     

    给文件做一个硬链接:文件大小、时间、inode号跟原文件一样(就是有两个文件使用了相同的inode号)

    [root@centos_1 ~]# ln 1.txt  1_hard.txt

    -rw-r--r--  2 root   root    103 11月 21 04:51 1_hard.txt

    -rw-r--r--  2 root   root    103 11月 21 04:51 1.txt

    硬链接使用了相同的inode号:

    [root@centos_1 ~]# ls -i

    67246931 1_hard.txt  67246931 1.txt 

    删除原文件,硬链接后的文件保持不变,软连接就会显示原文件不见了。

    不能对目录做硬链接:因为目录是靠.和..串起来,如果做了硬链接这样会乱套

    [root@centos_1 ~]# ln 111/ xiaobo/

    ln: "111/": 不允许将硬链接指向目录

     

     

     

    硬链接不占空间大小,可以对文件做多个硬链接。

    不能跨分区做硬链接: 因为分区之间有独立的inode号,boot/下有一个inode号,/根目录下也有跟/boot分区下

    相同的inode号,所以不能跨分区做硬链接。

    [root@centos_1 ~]# ln /boot/symvers-3.10.0-693.el7.x86_64.gz  /tmp/system

    ln: 无法创建硬链接"/tmp/system" => "/boot/symvers-3.10.0-693.el7.x86_64.gz": 无效的跨设备连接

     

     

     

    总结:

    能对文件做硬链接,不能对目录做硬链接;
    不能跨分区做硬链接;

    硬链接可以删除,因为还有其他文件使用该inode

    硬链接好比文件的一张皮,皮有多张,每一张皮都指向了相同的inode,这张皮可以删掉,但是不能删除所有的皮,

    必须有一张皮留在身上。

     

  • 相关阅读:
    番外篇 之 JS调用
    C# 匿名方法及Lambda表达式
    番外篇 之 C#委托
    番外篇之多线程
    23----2013.07.01---Div和Span区别,Css常用属性,选择器,使用css的方式,脱离文档流,div+css布局,盒子模型,框架,js基本介绍
    22----2013.06.29---HTML--html介绍.超链接和图片,表格,表单,表单标签,meta,复习当天内容
    AccessHelper类
    WPF视频教程系列笔记
    《深入浅出WPF》 学习笔记
    基于MAVEN构建Spring MVC初始化配置
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/8082808.html
Copyright © 2011-2022 走看看