chmod:更改文件模式位

chmod:更改文件模式位

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

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

  • setfacl扩展了传统的位ugo:rwx和.tchmod
  • setcapug:s比 的位提供更细粒度的权限控制 chmod
  • chattr允许对文件进行一些其他控制(有点混合)。

还有其他人吗?

答案1

chmod:更改文件模式位

用法(八进制模式):

    chmod八进制模式 文件...

用法(符号模式):

    chmod [参考][[操作员][模式]]文件...

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

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

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

operator是字符之一+-=

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

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

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

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

各个部分的chmod解释:

  • 访问控制(另请参阅setfacl
    • rwx— 读 ( r)、写 ( w) 和执行/遍历 ( x) 权限
      • 读取 (r) 影响是否可以读取文件或是否可以列出目录。
      • 写入 (w) 影响是否可以写入文件,或者是否可以修改目录(添加、删除、重命名文件)。
      • 执行 (x) 影响文件是否可以运行、用于脚本和其他可执行文件。
      • 遍历(x),也称为“搜索”,影响一个目录是否可以遍历;即,进程是否可以通过该目录中的条目访问(或尝试访问)文件系统对象。
    • s和—目录上的 t粘滞位 ( t) 和 setgid ( )s
      • 粘滞位仅影响目录。将阻止除文件所有者和 root 之外的任何人删除目录中的文件。
      • 目录上的 setgid 位将导致新文件和目录将组设置为同一组,并导致新目录设置其 setgid 位(另请参阅 中的默认值setfacl)。
    • s— setuid、setgid,在可执行文件上
      • 如果您不知道自己在做什么,这可能会严重影响安全性。
      • 当可执行文件运行时,如果设置了这些位之一,则可执行文件的用户/组将成为进程的有效用户/组。这样程序就运行了作为那个用户。请参阅setcap更现代的方法来执行此操作。

chown chgrp:


chattr: 改变文件属性

用法:

    查特尔操作员[属性]文件...

operator是字符之一+-=

  • +将选定的属性添加到现有属性中attributesfiles
  • -删除选定的attributes
  • =用指定的值覆盖文件当前的属性集attributes

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

  • a仅附加
  • c压缩的
  • d没有转储
  • e范围格式
  • i不可变的
  • j数据日志
  • m不要压缩
  • s安全删除
  • t没有尾部合并
  • u不可删除
  • x直接访问文件
  • A没有atime更新
  • C写入时无副本
  • D同步目录更新
  • F不区分大小写的目录查找
  • P项目层次结构
  • S同步更新
  • T目录层次结构的顶部

其中许多属性的使用都受到限制。例如,其中许多只能由超级用户(即 root)或其他特权进程来设置或清除。


setfattr: 改变扩展文件属性

用法(设置属性):

    setfattr-n姓名-v价值 文件...

用法(删除):

    setfattr-x姓名 文件...

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

value是扩展属性的新值


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

用法:

    设定值选项[默认:][目标:][参数][:烫发]文件...

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

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

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

  • uusers指定用户的权限由param, 如果省略则默认为文件所有者 UID
  • ggroup指定组的权限由param, 如果省略,则默认为所属组 GID
  • m,mask有效权限掩码
  • o,other他人的权限

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

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

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


setcap: 改变文件功能

用法:

    设定帽能力条款 文件

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

可用的运算符有=,+-。可用的标志是和e,它们对应于ip有效的,可继承允许能力集。

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


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

用法:

    chcon [-u用户] [-r角色] [-t类型]文件...

user是 SELinux 用户,例如user_usystem_uroot

role是 SELinux 角色(始终object_r针对文件)

type是 SELinux 主题类型


chsmack: 改变斯玛克扩展属性

SMACK 是简化的强制访问控制内核。

用法:

    chsmack -a价值 文件

valueSMACK64是为扩展文件属性设置的 SMACK 标签


塞特里查尔:更改丰富的访问控制列表

里查尔这是一项将添加更多高级 ACL 的功能。

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

另请参阅这个问题除了传统的“rwx”和 POSIX ACL 之外,是否还有更高级的文件系统 ACL?手册页

答案2

从高层次来看:

  • 支持的基本文件系统权限所有Linux 和 全部Unix友好文件系统-rwxrwxrwx由 处理 ,以及与由 和 chmod处理的文件系统上的每个文件或文件夹相关联的所有者和组标识符;这部作品大家基本上都知道了。chownchgrp
  • 扩展文件属性,缩写为或已知为属性。它们是文件系统功能,使用户能够将文件与文件系统未解释的元数据相关联,而常规属性具有由文件系统严格定义的用途;属性是与文件和目录关联的名称:值对,类似于与进程关联的环境字符串。有一些特定的 Linux 命令与简单地将此元数据设置到各种文件/文件夹相关。
  • 安全增强的 Linux(俗称SELinux)。看 selinuxproject.org维基百科。还知道 SELinux 有替代品,例如 AppArmor,可能还有其他。此时,这些是提供执行 MAC(强制访问控制)功能和机制的内核模块 通过使用 xattr; SELinux 在 xattrs 中存储文件安全标签。并且还有特定的 SELinux 相关命令。

其他要点:

  • GNU/Linux 的时代和版本xattr 对于可用和功能性的 SELinux 很重要。

  • 据悉,并非所有文件系统都支持xattr;最好留给个人根据所使用的 Linux 发行版和版本进行研究(RHEL/SUSE/Debian、IRIX、Solaris、AIX、20 世纪 60 年代的 Unix)。

  • 实际上,固有的基本文件/文件夹权限以及 UID/GID 和xattrs 使一切成为可能; SELinux 使用xattrs 来存储文件/文件夹安全标签...使用 SELinux,所有低级工作都在xattrs 中完成/定义,供您使用。因此,如果您的古老文件系统不支持xattr,您将不会使用 SELinux。

  • 您可以启用或禁用 SELinux(或 AppArmor 或任何其他内核模块)。

  • 根据您的 Linux 版本,您可以xattr为给定的已安装文件系统启用或禁用 s;我记得在 SLES 11 中fstab的挂载选项user_xattr ,我可以选择xattr在安装时在根文件系统上不可用;我想现在 RHEL/CentOS 7 是xattr默认存在的,你无法删除它。

  • 在执行 时ls -l,如果您看到-rwxrwxrwx+,则+表明该对象上存在扩展文件属性。

  • 访问控制列表(ACL) 是附加到对象的权限列表。 ACL 指定哪些用户或系统进程被授予对对象的访问权限,以及允许对给定对象执行哪些操作。

  • 来自 CentOS 维基文章关于SELinux:

    SELinux 是在内核中实现的 MAC 安全机制。 ...在没有启用SELinux的情况下,只能使用传统的自由访问控制(DAC)方法,例如文件权限或访问控制列表(ACL)来控制用户的文件访问。用户和程序都可以向其他人授予不安全的文件权限,或者相反,可以访问正常操作不需要的系统部分。 ...本质上,在传统的 DAC 模型下,有两个权限级别:root 和 user,并且没有简单的方法来强制执行最小权限模型​​。许多由 root 启动的进程随后会放弃以受限用户身份运行的权限...

    值得阅读以正确看待 s 和 ACL 的使用xattr,因为 Linux [内核] 将所有内容视为文件(块设备或网络端口),您可以使用 标记几乎所有内容 xattr并通过 SELinux 强制执行某种访问控制;它不仅仅是文件/文件夹。 https://wiki.centos.org/HowTos/SELinux

  • xattr可能会导致在系统和文件系统以及 NFS 之间移动数据时出现问题,其中[较新的]系统与较旧的系统相比具有更全面的支持,xattr而较旧的系统可能无法识别所有这些扩展属性[如果有的话]。注意使用taron 的东西xattr;如果它保留在该系统上没有问题,但如果它很重要,则如果它转移到其他地方可能会出现问题xattr(例如,Samba 以及 Windows 10 NTFS 和 Linux ext3/4、btrfs、XFS 之间的复制;或网络附加存储之间的来回复制( NAS)设备)。

  • 如果没有 SELinux 或其他机制通过xattrs 中定义的内容强制执行 ACL,那么xattr理论上 s 就没有任何意义,可以被删除或剥离,因为此时它只是额外的包袱。

  • 当心禁用SELinux 现在位于 RHEL/CentOS 7 中,因为如果文件系统标签xattr丢失,将 SELinux 更改回时会出现问题执行或者宽容的;同样,这取决于您的 Linux 版本以及它如何xattr通过 SELinux使用。

基本 Samba 共享在 RHEL/CentOS 7 中不起作用...因为 SELinux 默认设置为强制; SELinux 会拒绝一切,直到您允许为止,因此要么禁用 SELinux(不好),要么将其设置为宽松。如果您将 SELinux 保留为强制执行,则必须使用扩展属性标记要 Samba 共享的文件夹,以便 SELinux 能够识别并允许共享。因此,如果您让 SELinux 强制执行所有 SELinux 命令(然后将设置必要的xattrs):

# from CentOS 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use
# the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it
# with samba_share_t so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/, with samba_share_t,
# as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in SELinux
# if the folder does not have the xattr "samba_share_t" then the rule in SELinux
# (when enforced) will prevent access via Samba to the folder.

chcon -t samba_share_t /mydatashare

您可以在具有此 Samba 共享的 Linux 系统上进一步使用 SELinux,对该 Samba 共享下的文件/文件夹实施限制(使用任何扩展属性)。由于这些文件/文件夹是共享的,用户可以合法地将其中一些文件/文件夹复制到其 Windows 10 PC,然后再复制回来,从而丢失扩展属性。现在,在来回复制之后,在该 Linux 系统上,SELinux 将限制对所述文件的访问,因为xattr不再存在必要的文件,并且用户/管理员绞尽脑汁想知道为什么某些东西刚刚起作用,但现在不起作用......设置 SELinux允许并认识到xattr审计日志中出现丢失 s 的问题,但它不会直接表明这是由于来回副本丢失xattr.如果您想基于正确的sxattr强制执行安全性,还应考虑数据备份和恢复,以及除了 UID/GID 之外还需要记住 s 的潜在工作。xattr

答案3

我强烈推荐 chmod

$ chmod [选项] [文件名]

$ chmod [选项1] [运算符] [选项2] [文件名]


在数字表示中,我们有以下选项:

“0”代表“无权限”

“1”代表“执行权限”

“2”代表“写权限”

“4”代表“读权限”

符号形式的选项:

“u”表示文件所有者

“g”表示组

“o”表示其他

“a”表示所有用户作为所有者、组和其他 (ugo)

而 chmod 命令接受以下运算符:

“+”:该运算符用于添加指定的权限

“-”:该操作符用于删除指定的权限

“=”:该运算符用于定义任何用户的确切文件权限。

相关内容