Linux的文件权限

参考《Linux就该这么学》《Linux就是这个范》《鸟哥的Linux私房菜》

Linux的文件权限大致可以分为4类,分别是:

  • 普通权限
  • 特殊权限
  • 隐藏属性
  • 访问控制列表(ACL)

1. 普通权限

普通权限就是最为常见的Linux的文件属性,使用命令ls -l就可以查看了,例如:

普通权限

其中第一个字符表示文件的类型,常见的包括:

  • -:普通文件
  • d:文件夹
  • l:链接文件
  • b:块设备
  • c:字符设备
  • p:管道文件

后面的9个字符以三个为一组,分别表示文件所有者、文件所有组和其他人的“读”、“写”、“可执行”权限,分别以rwx表示。对于文件而言,这三种权限比较明确,但是对于文件夹而言,其含义略有不同:

  • r:表示能够读取文件夹内文件的列表
  • w:表示能够在文件夹内新增、删除和重命名文件
  • x:表示能够进入该目录
    除了使用rwx来表示外,还可以用数字来表示,rwx对应于数字421,在上图中每个文件对应的普通权限分别为:600、755、755、755...

2. 特殊权限

在Linux有三种特殊权限,可以为Linux提供更加方便的文件管理,分别为SUID、SGID以及SBIT

2.1 SUID

SUID是让程序的执行者临时拥有程序执行者的权限,如果具备该权限,会将第一组rwx的最后一位变成sS,其中:

  • s:表示该文件具备x权限
  • S:表示该文件不具备X权限
    可以
  • 用命令chmod -R u+s 来赋权
  • 用命令chmod -R u-s 来除权

2.2 SGID

SGID的作用有两个:

  • 让文件的执行者临时拥有文件所属组的权限(对于可执行文件)
  • 让文件夹中的创建的文件自动继承该目录的用户组(对于文件夹)

如果具备该权限,会将第二组rwx中的最后一位变成s或者S,其中:

  • s:表示该文件具备x权限
  • S:表示该文件不具备X权限

可以

  • 用命令chmod -R g+s 来赋权
  • 用命令chmod -R g-s 来除权

2.3 SBIT

对一个文件夹设置了SBIT后,会使得该文件夹中的所有文件只能被拥有者所删除。

如果具备该权限,会将第三组rwx中的最后一位变成t或者T,其中:

  • t:表示该文件具备x权限
  • T:表示该文件不具备X权限

可以

  • 用命令chmod -R o+t 来赋权
  • 用命令chmod -R o-t 来除权

对于使用了特殊权限的文件而言,可以使用四位数字来表示,其中第一位表示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 

要想给一个文件/文件夹设置ACL,则需要使用命令

setfacl [参数] 

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命令后则会看见普通权限后的原点变成了一个+

image.png

你可能感兴趣的:(Linux的文件权限)