Linux的文件权限
参考《Linux就该这么学》《Linux就是这个范》《鸟哥的Linux私房菜》
Linux的文件权限大致可以分为4类,分别是:
- 普通权限
- 特殊权限
- 隐藏属性
- 访问控制列表(ACL)
1. 普通权限
普通权限就是最为常见的Linux的文件属性,使用命令ls -l
就可以查看了,例如:
其中第一个字符表示文件的类型,常见的包括:
- -:普通文件
- d:文件夹
- l:链接文件
- b:块设备
- c:字符设备
- p:管道文件
后面的9个字符以三个为一组,分别表示文件所有者、文件所有组和其他人的“读”、“写”、“可执行”权限,分别以r
、w
和x
表示。对于文件而言,这三种权限比较明确,但是对于文件夹而言,其含义略有不同:
- r:表示能够读取文件夹内文件的列表
- w:表示能够在文件夹内新增、删除和重命名文件
- x:表示能够进入该目录
除了使用rwx来表示外,还可以用数字来表示,rwx对应于数字421,在上图中每个文件对应的普通权限分别为:600、755、755、755...
2. 特殊权限
在Linux有三种特殊权限,可以为Linux提供更加方便的文件管理,分别为SUID、SGID以及SBIT
2.1 SUID
SUID是让程序的执行者临时拥有程序执行者的权限,如果具备该权限,会将第一组rwx的最后一位变成s
或S
,其中:
- s:表示该文件具备x权限
- S:表示该文件不具备X权限
可以 - 用命令
chmod -R u+s <path>
来赋权 - 用命令
chmod -R u-s <path>
来除权
2.2 SGID
SGID的作用有两个:
- 让文件的执行者临时拥有文件所属组的权限(对于可执行文件)
- 让文件夹中的创建的文件自动继承该目录的用户组(对于文件夹)
如果具备该权限,会将第二组rwx中的最后一位变成s或者S,其中:
- s:表示该文件具备x权限
- S:表示该文件不具备X权限
可以
- 用命令
chmod -R g+s <path>
来赋权 - 用命令
chmod -R g-s <path>
来除权
2.3 SBIT
对一个文件夹设置了SBIT后,会使得该文件夹中的所有文件只能被拥有者所删除。
如果具备该权限,会将第三组rwx中的最后一位变成t或者T,其中:
- t:表示该文件具备x权限
- T:表示该文件不具备X权限
可以
- 用命令
chmod -R o+t <path>
来赋权 - 用命令
chmod -R o-t <path>
来除权
对于使用了特殊权限的文件而言,可以使用四位数字来表示,其中第一位表示SUID(4)、SGID(2)与SBIT(1)的和
3. 隐藏属性
文件的隐藏属性可以使用lsattr命令来查看,隐藏属性主要包括:
- i:无法对文件进行修改;如果文件夹具备该属性,则只能修改其中子文件夹的内容,不能新建或删除文件
- a:仅允许追加文件内容,无法覆盖和删除(对于日志文件比较好)
- S:文件内容更新后,会立即同步到硬盘
- s:彻底从硬盘中删除(磁盘充零)
- A:不再修改这个文件或文件夹的最后访问时间(atime,我猜是access time)
- b:不再修改这个文件或文件夹的存取时间
- D:检查压缩文件中的错误
- d:使用dump命令备份时忽略本文件或文件夹
- c:默认将文件或文件夹进行压缩
- u:当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
- t:让文件系统支持尾部合并(tail-merging)
- X:可以直接访问压缩文件中的内容
要想查看文件的隐藏属性,可以使用命令lsattr
,要修改隐藏属性,可以使用chattr
命令
4. 文件访问控制列表
- 如果针对某个文件夹设置了ACL,则文件夹中的文件都会继承其ACL
- 如果针对某个文件设置了ACL,则问价不再继承其所在目录的ACL
要想查看一个文件的ACL信息,可以使用命令
getfacl <path>
要想给一个文件/文件夹设置ACL,则需要使用命令
setfacl [参数] <path>
setfacl
常用的参数包括:
- -m 更改文件的访问控制列表
- -b 删除访问控制列表
- -R 递归操作子目录
例如:
setfacl -Rm u:linuxprob:rw- /root/anaconda-ks.cfg
可以为用户linuxprob对文件anaconda-ks.cfg添加读写的权限
setfacl -Rm g:linuxprob:r-x /root/anaconda-ks.cfg
可以为用户组linuxprob添加写和可操作的权限
如果一个文件被设置了ACL,那么在执行ls
命令后则会看见普通权限后的原点变成了一个+