• linux特殊权限


    1.0隐藏权限lsattr_chattr

    chattr隐藏权限

    man chattr 查看用法

    语法:chattr[+-=][Asaci][文件或者目录]

    [root@linux1 ~]# chattr --help
    Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
    
       -R 递归处理,将指定目录下的所有文件及子目录一并处理。
    
      -v<版本编号> 设置文件或目录版本。
    
      -V 显示指令执行过程。
    
      +<属性> 开启文件或目录的该项属性。
    
      -<属性> 关闭文件或目录的该项属性。
    
      =<属性> 指定文件或目录的该项属性。
    • 演示
    [root@linux1 ~]# chattr +i 1.txt 
    [root@linux1 ~]# vi 1.txt 
    • 提示文件权限不够
    [root@linux1 ~]# head -n2 /etc/passwd > 1.txt 
    -bash: 1.txt: 权限不够
    
    • 查看权限是777怎么没权限呢?
    [root@linux1 ~]# ls -l 1.txt 
    -rwxrwxrwx. 1 centos centos 0 8月  29 11:26 1.txt
    
    • 这时候考虑有没有隐藏权限

    lsattr查看隐藏权限

    [root@linux1 ~]# lsattr 1.txt 
    ----i----------- 1.txt
    

    注:正常情况下新建一个文件是没有隐藏权限的,加了i权限之后不能mv(重命名,移动)rm(删除)vi(编辑)touch(更改时间)>(覆盖)

    去掉 i权限

    [root@linux1 ~]# chattr -i 1.txt 

    chattr +a 1.txt只能追加 不允许其他操作

    [root@linux1 ~]# chattr +a 1.txt 
    [root@linux1 ~]# mv 1.txt 2.txt
    mv: 无法将"1.txt" 移动至"2.txt": 不允许的操作
    [root@linux1 ~]# rm 1.txt 
    rm:是否删除普通空文件 "1.txt"?y
    rm: 无法删除"1.txt": 不允许的操作
    [root@linux1 ~]# head -n2 /etc/passwd > 1.txt 
    -bash: 1.txt: 不允许的操作
    [root@linux1 ~]# head -n2 /etc/passwd >> 1.txt 
    [root@linux1 ~]# cat 1.txt 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin

    可以看的出赋予1.txt a隐藏权限。允许追加,类似日志,还允许touch(更改时间)不允许其他操作

    如何全掉a权限?

    [root@linux1 ~]# chattr -a 1.txt

    2.特殊权限set_uid

    概述:

    1.set_uid 只能作用于二进制可执行文件,对普通文本文件无效
    2.普通用户执行拥有该权限的二进制文件时,可以使普通用户临时拥有root权限(例如:更改密码的命令 /usr/bin/passwd 对除 root 以外的用户不可读、不可写和不可执行,但是普通用户同样可以使用该命令更改自己的密码)

    • s 就是set_uid的权限
    • 代表普通用户临时拥有root权限
    • 是二进制文件,是一个可执行的文件
    • 当普通用户执行这种类型的文件,临时拥有所属者的权限

    如何给文件赋予set_uid权限

    [root@linux1 ~]# ls -l /usr/bin/ls
    -rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
    [root@linux1 ~]# chmod u+s /usr/bin/ls
    [root@linux1 ~]# ls -l /usr/bin/ls
    -rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
    
    

    赋予set_uid权限是让普通用户拥有所有者身份(临时拥有root权限)

    测试用普通用户登录系统

    [root@linux1 ~]# su - centos
    [centos@linux1 ~]$ ls -l
    总用量 0
    [centos@linux1 ~]$ ls -l /root/
    总用量 24
    drwxrwxrwx. 2 centos centos    32 8月  29 11:44 123
    -rwxrwxrwx. 1 centos centos    65 8月  30 12:26 1.txt
    -rw-rw-r--. 1 root   root       0 8月  29 12:07 3.txt
    -rw-------. 1 root   root    1177 8月  27 00:40 anaconda-ks.cfg
    

    如何给文件全掉set_uid权限

    [root@linux1 ~]# chmod u-s /usr/bin/ls
    [root@linux1 ~]# ls -l /usr/bin/ls
    -rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
    

    再用普通用户执行命令

    [centos@linux1 ~]$ ls -l /root/
    ls: 无法打开目录/root/: 权限不够
    

    另外一种方法赋予set_uid权限

    [root@linux1 ~]# chmod u=rws /usr/bin/ls
    [root@linux1 ~]# ls -l /usr/bin/ls
    -rwSr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
    

    这时候看到权限是rwS,是因为没有x可执行权限。但是不影响,普通用户还是可以执行,可以赋予x可执行权限就会S变s

    [root@linux1 ~]# chmod u+x /usr/bin/ls
    [root@linux1 ~]# ls -l /usr/bin/ls
    -rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
    

    没有x权限也可以直接执行?

    s也有执行权限,所以可以直接执行、ls命令普通用户权限本来就可以执行

    目录也可以加s权限,但是没有意义

    3.特殊权限set_gid

    概况:

    可以应用在文件上同样可以作用在目录。设置文件上和set_uid类似,前提两个文件是可以执行的二进制文件,设置set_gid,执行文件的用户临时以该文件所属组的身份执行。要是目录被设置这个权限,在此目录下创建文件或者目录与子目录和该目录的所属组相同。

    set_gid作用在组权限位上

    s权限意味着,除了这个文件的所属组之外。其他用户在执行命令一瞬间拥有所属组的权限

    [root@linux1 ~]# ls -ld /root/
    dr-xr-x---. 4 root root 227 8月  30 12:25 /root/
    

    root所属组权限位r-x,可读可执行,所以普通用户拥有set_gid权限,所以可以使用root所属组权限可以查看root目录文件

    [root@linux1 ~]# su - centos
    [centos@linux1 ~]$ ls -l /root/
    总用量 24
    drwxrwxrwx. 2 centos centos    32 8月  29 11:44 123
    -rwxrwxrwx. 1 centos centos    65 8月  30 12:26 1.txt
    -rw-rw-r--. 1 root   root       0 8月  29 12:07 3.txt
    -rw-------. 1 root   root    1177 8月  27 00:40 anaconda-ks.cfg
    

    没有所属组权限没有set_gid权限,会提示权限不够

    [root@linux1 ~]# chmod g-s /usr/bin/ls //root用户先减set_gid权限
    
    [centos@linux1 ~]$ ls -l /root/ //普通用户执行
    ls: 无法打开目录/root/: 权限不够
    

    set_gid权限可以作用在目录上。给123目录赋予s权限

    [root@linux1 ~]# chmod g+s 123/

    查看权限

    [root@linux1 ~]# ls -ld 123
    drwxrwsrwx. 2 centos centos 32 8月  29 11:44 123
    

    更改用户组

    [root@linux1 ~]# chown root:centos 123
    [root@linux1 ~]# ls -ld 123
    drwxrwsrwx. 2 root centos 32 8月  29 11:44 123
    

    在123目录下创建一个文件

    [root@linux1 ~]# touch 123/3.txt
    [root@linux1 ~]# ls -ld 123/3.txt 
    -rw-r--r--. 1 root centos 0 8月  30 13:15 123/3.txt
    

    新建文件所属组也是centos

    注:当给目录set_gid权限时,它下面创建子目录和文件都会跟着父级目录。

    4.0特殊权限stick_bit

    系统中的/tmp/目录是拥有stick_bit权限的

    [root@linux1 ~]# ls -ld /tmp/
    drwxrwxrwt. 21 root root 4096 8月  29 19:04 /tmp/
    
    • 注:它的权限位在其他用户上,防删除位,防止别人删除自己的文件,root用户除外

    普通用户(centos这是用户)在tmp创建一个文件

    [centos@linux1 tmp]$ touch 1.txt
    

    用centos1用户去删除centos用户的文件

    [centos1@linux1 tmp]$ rm 1.txt 
    rm:是否删除有写保护的普通空文件 "1.txt"?y
    rm: 无法删除"1.txt": 不允许的操作
    

    增加stick_bit放删除位

    chmod o+t 目录

    总结:

    1.这drwxrwxrwt.里面的t(t里面包含x权限),就是stick_bit权限,stick_bit(t):又叫做防删除位。

    2.只对目录有效,对文件无效。

    3.在/tmp/下有很多类似的文件,拥有777权限,说明任何一个用户都可对这个目录可写,并创建自己的文件

    5.0软连接

    软连接
    命令:  ln -s 原文件 目标文件
    特征:
    1.相当于windows的快捷方式
    2.只是一个符号连接,所以软连接文件大小都很小
    3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行
    4.所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的
    5.原文件丢失,软连接无法访问,会报找不到的错误
    6.ls -al以后,软连接后面箭头指向的是原文件

    /bin相当于/usr/bin的快捷方式

    [root@linux1 ~]# ls -l /bin
    lrwxrwxrwx. 1 root root 7 8月  27 00:34 /bin -> usr/bin
    

    链接文件的大小和路径有关,路径越长,文件越大。

    如何创建软连接

    ls -s 源文件 创建软连接文件

    [root@linux1 ~]# tree 123
    123
    ├── 1.txt
    ├── 234
    │   └── 1.txt
    ├── 2.txt
    └── 3.txt
    

    创建软连接

    [root@linux1 ~]# ln -s /root/123/2.txt /root/123/234/2.txt 
    [root@linux1 ~]# tree 123
    123
    ├── 1.txt
    ├── 234
    │   ├── 1.txt
    │   └── 2.txt -> /root/123/2.txt
    ├── 2.txt
    └── 3.txt
    
    1 directory, 5 files
    

    软连接也可以链接目录

    [root@linux1 ~]# ln -s /root/123/234/ /root/123/345/
    [root@linux1 ~]# tree 123
    123
    ├── 1.txt
    ├── 234
    │   ├── 1.txt
    │   └── 2.txt -> /root/123/2.txt
    ├── 2.txt
    ├── 345
    │   └── 234 -> /root/123/234/
    └── 3.txt
    
    3 directories, 5 files
    
    • 注:删除软连接目录时,后面不要加/

    相对路径软连接有弊端,之前我们用到的是绝对路径,在同一个路径创建软连接就是相对路径

    [root@linux1 tmp]# touch 1.txt
    [root@linux1 tmp]# ln -s 1.txt 2.txt 注:2.txt前提没有创建
    [root@linux1 tmp]# ll
    总用量 64
    -rw-r--r--. 1 root root     0 8月  30 21:15 1.txt
    lrwxrwxrwx. 1 root root     5 8月  30 21:15 2.txt -> 1.txt

    如果复制到另外一台机器上或者目录改动,那么软连接就会失效,尽量使用绝对路径。将22.txt移动到/root/123目录下,查看

    [root@linux1 tmp]# mv 1.txt /root/123/
    [root@linux1 tmp]# ll
    总用量 64
    lrwxrwxrwx. 1 root root     5 8月  30 21:15 2.txt -> 1.txt 这时候1.txt在闪烁
    

    但是新建一个改文件,恢复正常

    [root@linux1 tmp]# touch 1.txt
    

    软连接的使用场景演示:

    假设现在有一个服务器server,会生成一个日志文件run.log,路径在/boot/run.log,但是boot目录空间要满了,这时候可以把run.log复制到/目录下

    # cp -i /boot/run.log /root/run.log

    马上删除/boot下的run.log

    rm /boot/run.log

    做个软连接

    ln -s /root/run.log /boot/run.log

    这时候server服务继续使用的是/boot/run.log这个日志文件,是实上是个软连接,真正的位置是在/root目录,有效解决/boot空间内存不足问题。

    6.0硬链接

    硬连接
    命令:  ln 原文件 目标文件
    特征:
    1.原文件和连接文件的属性完全一样
    2.连接文件和原文件的关系类似于:复制+同步更新
    3.当原文件丢失,硬连接文件还可以访问
    4.不能跨分区,不能针对目录使用
    5.原理:
    原文和硬链接文件的i节点号是相同的(ls -i),1个文件名对应一个i节点,1个i节点可以通过多个文件名访问,所以,他们的属性完全相同,并且修改了其中一个的内容另一个也会跟着修改件

    语法:ln 源文件 硬链接文件

    [root@linux1 ~]# touch 1.log
    [root@linux1 ~]# ln 1.log 2.log 注:2.log存在

    1.log和2.log inode相同

    运行上面这条命令以后,源文件与目标文件inode号码相同,都是指向同一个inode,inode信息中的一项叫做硬链接,记录指向该inode的文件总数,这时就会增加1.

    反过来说,删除一个文件名,就会使得inode节点“连接数”减1。当值为0时,表示没有文件名指向这个inode,系统就会回收这个inode号码和对应的block区域

  • 相关阅读:
    github打开慢,甚至打不开
    在使用confluent-kafka-go 时遇到如下问题
    Istio Routing极简教程
    kubelet证书过期解决方法
    工具类docker for k8s
    selenium jar包 的下载地址,各版本都有
    使用TestNG进行多浏览器,跨浏览器和并行测试
    简单聊聊TestNG中的并发
    清除Git仓库多余文件及其历史记录 
    【MAVEN】maven系列--pom.xml标签详解
  • 原文地址:https://www.cnblogs.com/yantou/p/13435314.html
Copyright © 2020-2023  润新知