在 gnu/linux 上设置文件权限等的不同方法有哪些

ctr*_*lor 20 linux filesystems permissions gnu

在 Unix 上,很久以前,我了解到chmod:在 Unix 上设置权限的传统方法(并允许程序获得权限,使用 setuid、setgid)。

我最近在 GNU/Linux 上发现了一些较新的命令:

  • setfacl扩展了传统的ugo:rwx位和tchmod
  • setcap给出比多个鳍状晶粒控制ug:s的位chmod
  • chattr 允许文件的一些其他控件(有点混合)。

还有其他人吗?

Tho*_*man 30

chmod: 更改文件模式位

用法(八进制模式):

    chmod <octal-mode> files...
Run Code Online (Sandbox Code Playgroud)

用法(符号模式):

    chmod <references><operator><modes> files..
Run Code Online (Sandbox Code Playgroud)

references是字母的组合ugoa,指定哪个用户对 的访问files将被修改:

  • u 拥有它的用户
  • gfile的组中的其他用户
  • o 不在文件组中的其他用户
  • a 全部用户

    如果省略,则默认为所有用户,但只umask修改允许的权限。

    operator是字符之一+-=

    • + 将指定的文件模式位添加到每个文件的现有文件模式位 file
    • - 将指定的文件模式位删除到每个文件的现有文件模式位 file
    • =除非明确指定,否则添加指定的位并删除未指定的位,除了为目录设置的setuidsetgid位。

    mode由字母组合组成rwxXst,用于指定要修改的权限位:

    • r
    • w
    • x 执行(或搜索目录)
    • X 仅当文件是目录或已经为某些用户设置了执行位时才执行/搜索
    • ssetuid 或 setgid(取决于指定references
    • t 受限删除标志或粘滞位

    或者,mode可以由字母 之一组成ugo,在这种情况下,模式对应于当前授予所有者 ( u)、file组成员 ( g) 或上述任一类别 ( o) 中的用户的权限。

chmod解释的各种位:

  • 访问控制(另见setfacl
    • rwx — 读 (r)、写 (w) 和执行/交叉 (x) 权限。
      • Read (r) 影响是否可以读取文件,或者是否可以列出目录。
      • Write (w) 影响是否可以写入文件,或者是否可以编辑目录(添加、删除、重命名文件)。
      • 执行 (x) 会影响文件是否可以运行、用于脚本(请参阅 参考资料#!)和其他可执行文件。
      • Cross (x) 影响是否可以遍历目录。
    • st- 粘滞位 (t) 和目录上的 setgid (s)
      • 粘滞位仅影响目录。将阻止除文件所有者和 root 之外的任何人删除目录中的文件。
      • 目录上的 setgid 位将导致新文件和目录将组设置为同一组,并且新目录将设置 setgid 位(另请参阅 setfacl 中的默认值)。
    • s — 可执行文件上的 setuid、setgid。
      • 如果您不知道自己在做什么,这可能会以一种不好的方式影响安全性。
      • 运行可执行文件时,如果设置了这些位之一,则可执行文件的有效用户/组将成为文件的有效用户/组。因此程序以该用户身份运行。请参阅setcap更现代的方法来做到这一点。

chown chgrp


chattr: 更改文件属性

用法:

    chattr <operator><attribute> files...
Run Code Online (Sandbox Code Playgroud)

operator是以下字符之一+-=: *+将选定的属性添加到现有attributesfiles *-删除选定的attributes *=用指定的文件覆盖当前的一组属性attributes

attribute是字母的组合acdeijstuADST,对应于属性:

  • a 仅附加
  • c 压缩的
  • d 没有转储
  • e 范围格式
  • i 不可变的
  • j 数据日志
  • s 安全删除
  • t 没有尾部合并
  • u 不可删除的
  • A没有atime更新
  • D 同步目录更新
  • S 同步更新
  • T 目录层次结构的顶部

setfattr: 更改扩展文件属性

用法(设置属性):

    setfattr -n <name> -v <value> files...
Run Code Online (Sandbox Code Playgroud)

用法(删除):

    setfattr -x <name> files...
Run Code Online (Sandbox Code Playgroud)

name 是要设置或删除的扩展属性的名称

value 是扩展属性的新值


setfacl: 更改文件访问控制列表

用法:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...
Run Code Online (Sandbox Code Playgroud)

option 必须包括以下内容之一:

  • --set 设置文件或目录的ACL,替换之前的ACL
  • -m| --modify修改文件或目录的ACL
  • -x| --remove 删除文件或目录的 ACL 条目

    target是字母之一ugmo(或如下所示的较长形式):

  • u,users由 标识的命名用户的权限,如果省略param,则默认为文件所有者uid

  • g,group由 标识的命名组的权限,如果省略则param默认为拥有组uid
  • m,mask有效权限掩码
  • o,other其他人的权限

    perms是字母的组合rwxX,对应于权限:

  • r

  • w
  • x 执行
  • X 仅当文件是目录或已对某些用户具有执行权限时才执行

    或者,perms可以是一个八进制数字 ( 0- 7),表示权限集。


setcap: 更改文件功能

用法:

    setcap <capability-clause> file 
Run Code Online (Sandbox Code Playgroud)

Acapability-clause由逗号分隔的功能名称列表组成,后跟操作符-标志对列表。

可用的运算符是=,+-。可用标志是ei并且p对应于EffectiveInheritablePermitted能力集。

=运营商将提高特定功能集和重置等。如果没有与=操作员一起给出标志,则所有能力集将被重置。在+-运营商将分别升高或降低一个或多个指定的功能集。


chcon: 更改文件SELinux 安全上下文

用法:

    chcon [-u <user>] [-r <role>] [-t <type>] files...
Run Code Online (Sandbox Code Playgroud)

user是 SELinux 用户,例如user_u,system_uroot

role是 SELinux 角色(始终object_r用于文件)

type是 SELinux 主题类型


chsmack: 更改SMACK扩展属性

用法:

    chsmack -a <value> file
Run Code Online (Sandbox Code Playgroud)

value是要为SMACK64扩展文件属性设置的 SMACK 标签


setrichacl:更改丰富的访问控制列表。

richacl s 是一个功能,将添加更高级的 ACL。

目前正在进行中,所以我不能告诉你太多关于它们的信息。我没有使用过它们。

另请参阅此问题是否有比传统的“rwx”和 POSIX ACL 更高级的文件系统 ACL?手册页

  • +1 如果您添加了每个 cmd 用法的示例,则此答案将非常有用,作为我们可以参考的规范答案! (5认同)