zoukankan      html  css  js  c++  java
  • linux文件的特殊权限及隐藏权限

      

      基础知识

      相信大家应该都知道linux的文件基本权限,使用ls -l命令可以显示文件的基本权限,"-rwxrwxrwx.",第一位表示文件的属性(是文件-  ,目录d等),后面每隔三位为属主、属组、其他用户 对应的读写执行权限。这个比较简单很容易理解。

      文件特殊权限

      单纯的读写执行权限无法满足我们的基本要求,因此对应有了特殊权限位(SUID、SGID、SBIT),这些权限 位用来弥补一般权限不能实现的功能,帮助没有权限的用户执行需要root权限的工作。下面我们就详细了解一下这三个特殊权限位的功能和用法。

      1、SUID

      SUID可以让普通用户对某个可执行命令拥有属主的权限,比如普通用户可以用passwd命令,然而passwd的权限为:

    [root@linux-node2 cron]# ll /bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jan 30  2014 /bin/passwd
    

      可以看到passwd的属主权限是rws,即x被赋予了特殊权限,其他用户执行该命令的时候也会拥有属主的权限。我们就拿rm命令举一个例子(生产环境中不建议使用):

    [root@linux-node2 cron]# ll /bin/rm
    -rwxr-xr-x. 1 root root 62808 Jan 25  2014 /bin/rm
    [root@linux-node2 cron]# chmod u+s /bin/rm
    [root@linux-node2 cron]# ll /bin/rm
    -rwsr-xr-x. 1 root root 62808 Jan 25  2014 /bin/rm
    [root@linux-node2 cron]# touch /data/test
    [root@linux-node2 cron]# ll /data/test 
    -rw-r--r-- 1 root root 0 Jan 10 17:52 /data/test
    [root@linux-node2 cron]# su bing
    [bing@linux-node2 cron]$ rm -f /data/test 
    

      通过上面的例子可以看出,当我们赋予rm特殊权限后,即使普通用户对文件没有写入权限,也可以使用特殊权限对其操作。

      2、SGID

      SGID可以让其他用户对某个可执行命令拥有属组权限,原理同SUID,只是这个是属组中x被赋予特殊权限,具体不再详解,请看例子:

    [bing@linux-node2 cron]$ ll /usr/bin/wall
    -r-xr-sr-x. 1 root tty 15344 Jan 27  2014 /usr/bin/wall
    

      删除SGID特殊权限:chmod g-s /usr/bin/wall,关于chmod的命令这里就不解释了。

      3、SBIT

      SBIT是针对others来设置的,和上面两个一样,只是功能不同而已。

      SBIT目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅自己与root用户才有权限删除。

      像/tmp目录(drwxrwxrwt.),任何人可以在/tmp内增加、修改文件,但是这个目录只有root和自己才能够删除文件。举例说明:

    [bing@linux-node2 ~]$ cd /data/
    [bing@linux-node2 data]$ touch test1
    [bing@linux-node2 data]$ chmod o+t test1 
    [bing@linux-node2 data]$ ll test1
    -rw-rw-r-T 1 bing bing  0 Jan 10 18:20 test1
    

    上面的例子是错误示范,删除文件是看上级目录权限的,所以这样创建SBIT文件并没有什么作用,这个SBIT特殊权限建议对目录操作,目录下的文件会生效哦。  

    这里我就不演示切换到其他用户删除该文件了,感兴趣的自己测试。

      文件隐藏权限

      linux中有些文件,虽然我们对这个文件有权限,却没有办法编辑和删除,或者仅能对这个文件追加等操作,这个就涉及到了linux的隐藏权限。

      1、chattr命令用于设置文件的隐藏权限,用法“chattr [+|-参数] [文件]”。

      参数:

     1 A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
     2 S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
     3 a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
     4 b:不更新文件或目录的最后存取时间。
     5 c:将文件或目录压缩后存放。
     6 d:当dump程序执行时,该文件或目录不会被dump备份。
     7 D:检查压缩文件中的错误。
     8 i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
     9 s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
    10 u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
    11 t:文件系统支持尾部合并(tail-merging)。
    12 X:可以直接访问压缩文件的内容。

       举例说明:我们想把某个文件锁定只读,不允许任何人修改或删除,可以用+i选项。

    [root@linux-node2 data]# ll test 
    -rw-r--r-- 1 root root 0 Jan 11 09:25 test
    [root@linux-node2 data]# lsattr test 
    ---------------- test
    [root@linux-node2 data]# chattr +i test
    [root@linux-node2 data]# lsattr test 
    ----i----------- test
    [root@linux-node2 data]# rm -f test
    rm: cannot remove ‘test’: Operation not permitted
    

      可以看出,使用隐藏文件属性保护文件很重要,即使root用户也无法对文件进行编辑,例如可以把很重要的日志文件保存,可以用+a选项,只能对日志文件进行追加写入,无法查看可编辑,这样保证了日志文件的安全性。

      删除文件隐藏权限也很简单(chattr -i test)。

      2、lattr 查看隐藏权限,用法:“lattr [文件]”。

      ACL权限设置命令(setfacl、getfacl)

      访问控制列表(Access Control List, ACL)在很多地方都能看到,比如路由交换命令中,防火墙规则中都能看到这个名词,主要是限制细节的功能。

      以上的权限管理都是基于用户和用户组的,而无法做到更精细的文件权限管理。这里就引入了setface命令可以对单一用户、单一文件或目录进行rwx权限控制。

      1、 setfacl

      用法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

      选项:  

    -m,       --modify-acl 更改文件的访问控制列表
    -M,       --modify-file=file 从文件读取访问控制列表条目更改
    -x,       --remove=acl 根据文件中访问控制列表移除条目
    -X,       --remove-file=file 从文件读取访问控制列表条目并删除
    -b,       --remove-all 删除所有扩展访问控制列表条目
    -k,       --remove-default 移除默认访问控制列表
              --set=acl 设定替换当前的文件访问控制列表
              --set-file=file 从文件中读取访问控制列表条目设定
              --mask 重新计算有效权限掩码
    -n,       --no-mask 不重新计算有效权限掩码
    -d,       --default 应用到默认访问控制列表的操作
    -R,       --recursive 递归操作子目录
    -L,       --logical 依照系统逻辑,跟随符号链接
    -P,       --physical 依照自然逻辑,不跟随符号链接
              --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
              --test 测试模式,并不真正修改访问控制列表属性
    -v,       --version           显示版本并退出
    -h,       --help              显示本帮助信息

      例如:去掉user用户对data的访问权限:setfacl -x u:user /data/  

      2、getfacl

      getfacl是查看文件或文件夹的访问控制权限

      用法:

      getfacl file

      这里就举例说一下访问控制列表的用法:

      针对用户的设定方式:(u:用户名:权限)

      设定权限用m选项,删除权限用x选项,

    [root@linux-node2 data]# ll test2 
    -rw-r--r-- 1 root root 0 Jan 11 11:21 test2
    [root@linux-node2 data]# setfacl -m u:bing:rwx test2 
    [root@linux-node2 data]# getfacl test2 
    # file: test2
    # owner: root
    # group: root
    user::rw-
    user:bing:rwx
    group::r--
    mask::rwx
    other::r--
    #授权用户bing对该文件有写入权限,切换到bing用户
    [bing@linux-node2 data]$ echo "haha" >test2 
    [bing@linux-node2 data]$ cat test2 
    haha

    参考文献:https://blog.csdn.net/ttt111zzz/article/details/78779247

  • 相关阅读:
    centos7下更新firefox
    Centos7宽带连接
    CAS和AQS
    java中锁的概念
    并发队列
    Callable和Future
    juc下的并发工具类和线程池
    死锁和线程安全的问题
    HashMap源码分析(java1.8)
    List集合框架面试题
  • 原文地址:https://www.cnblogs.com/zhanbing/p/10251736.html
Copyright © 2011-2022 走看看