概述

简单的文件rwx权限不能满足我们对安全和便捷的需求,所以便有了SUID与SGID的特殊权限机制

案例1

/etc/passwd文件存储着用户的相关设置,/etc/shadow存储着用户加密后的密码。/etc/passwd的拥有者是root,所属组是root,根据权限的知识普通用户应该是不能修改/etc/passwd的内容的,但是普通用户可以通过passwd命令修改自己的密码。这是因为passwd设置了suid位,让用户临时拥有了文件拥有者的权限。

➜  test ll /etc/passwd
-rw-r--r--. 1 root root 2609 8月   4 18:18 /etc/passwd
➜  test ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

SUID(set uid)

让执行者临时拥有拥有者的权限(仅对拥有执行权限的二进制程序有效)

  • 添加suid
    chmod u+s <文件名...>
    
  • 去除suid
    chmod u-s <文件名...>
    

SGID(set gid)

SGID有两个功能,一个是让执行者临时拥有文件所属组的权限,另外一个是让文件下创建的文件的所属组是目录的所属组

  • 添加suid
    chmod g+s <文件名...>
    
  • 去除suid
    chmod g-s <文件名...>
    

案例2

一般老师希望学生可以将作业上传到某个特定目录。但为了避免某些小破坏份子有意或无意删掉别人的文件,那就要设置SBIT位了(也叫粘滞位)来限制用户删除其他人文件。

SBIT(Sticky)

只可管理自己的数据而不能删除他人文件(仅对目录有效)。对于所属组可写或全部可写的目录,当为此类目录设置sticky权限,则每个用户只能删除拥有者为自己的文件

  • 添加sticky
    chmod o+t <文件名...>
    
  • 去除sticky
    chmod o-t <文件名...>
    

文件的隐藏属性

文件权限除了读写执行与SUID、SGID、SBIT外还有一种隐藏权限,例如明明有权限删除某个文件却报错了,或者仅能为某个文件追加内容而不能减少内容,遇到这种很“奇怪”的文件,就要怀疑文件可能被设置隐藏权限了

查看隐藏属性(lsattr)

格式如下

lsattr [选项] <文件名...>

选项如下

选项 说明
-a 显示所有文件和目录
-d 若目标文件为目录,显示本身,而不是子目录和文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理

lsattr -> list attribute

修改隐藏属性(chattr)

格式如下

chattr <+/-模式> <文件名...>

模式如下

模式 说明
i 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除
a 仅允许追加内容,无法覆盖/删除
S 文件内容变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 当使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
X 可以直接访问压缩文件的内容

chattr -> change attribute

案例3

rwx权限、特殊权限、隐藏权限都是对某一类用户设置的,而有时候需要对某个指定的用户进行单独的权限设置,那么就需要用文件的访问控制列表来实现啦

查看文件访问控制列表(getfacl)

格式如下

getfacl [选项] <文件名...>

选项如下

选项 说明
-d, --default 显示默认的文件访问控制权限
-R, --recursive 递归处理,将指定目录下的所有文件及子目录一并处理

getfacl -> get file access control list

设置文件访问控制列表(setfacl)

格式如下

setfacl [选项] <文件名...>

选项如下

选项 说明
-R, --recursive 递归处理,将指定目录下的所有文件及子目录一并处理
-m FORMAT 设置文件的acl规则
-b 删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留

格式如下(详细参考这里

[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限 
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限
[d[efault]:] o[ther] [:perms] 其他的权限 
[d[efault]:] m[ask][:] [:perms] 有效权限掩码 

setfacl -> set file access control list



参考

linux文件特殊权限讲解
setfacl命令

Copyright © zhujipeng 2017 all right reserved,powered by Gitbook 该文件修订时间: 2017-11-04 14:57:24

results matching ""

    No results matching ""