在 Unix 上,很久以前,我了解到chmod
:在 Unix 上设置权限的传统方法(并允许程序获得权限,使用 setuid 和 setgid)。
我最近在 GNU/Linux 上发现了一些较新的命令:
setfacl
扩展了传统的位ugo:rwx
和.t
chmod
setcap
ug:s
比 的位提供更细粒度的权限控制chmod
。chattr
允许对文件进行一些其他控制(有点混合)。
还有其他人吗?
答案1
chmod
:更改文件模式位
用法(八进制模式):
chmod八进制模式 文件...
用法(符号模式):
chmod [参考][[操作员][模式]]文件...
references
是字母的组合ugoa
,指定哪个用户可以访问files
将被修改:
u
拥有它的用户g
文件组中的其他用户o
不在文件组中的其他用户a
全部用户
如果省略,则默认为所有用户,但仅修改允许的权限umask
。
operator
是字符之一+-=
:
+
将指定的文件模式位添加到每个文件的现有文件模式位中file
-
从每个文件的现有文件模式位中删除指定的文件模式位file
=
添加指定的位并删除未指定的位,为目录设置的setuid
和setgid
位除外,除非明确指定。
mode
由字母的组合组成rwxXst
,指定要修改哪些权限位:
r
读w
写x
(小写X
)执行(或搜索目录)X
(大写)仅当文件是目录或已为某些用户类别设置了执行位时才执行/遍历s
setuid 或 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
是字符之一+-=
:
+
将选定的属性添加到现有属性中attributes
的files
-
删除选定的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
(或如下所示的较长形式):
u
,users
指定用户的权限由param
, 如果省略则默认为文件所有者 UIDg
,group
指定组的权限由param
, 如果省略,则默认为所属组 GIDm
,mask
有效权限掩码o
,other
他人的权限
perms
是字母的组合rwxX
,对应于权限:
r
读w
写x
执行X
仅当文件是目录或已具有某些用户的执行权限时才执行
或者,perms
可以是表示权限集的八进制数字 ( 0
- )。7
setcap
: 改变文件功能
用法:
设定帽能力条款 文件
Acapability-clause
由逗号分隔的列表组成能力名称后跟操作符标志对列表。
可用的运算符有=
,+
和-
。可用的标志是和e
,它们对应于i
p
有效的,可继承和允许能力集。
操作员=
将提升指定的能力集并重置其他能力集。如果没有与操作员一起给出标志,则=
所有功能集都将被重置。+
和运算符-
将分别提高或降低一个或多个指定的能力集。
chcon
: 更改文件SELinux 安全上下文
用法:
chcon [-u用户] [-r角色] [-t类型]文件...
user
是 SELinux 用户,例如user_u
、system_u
或root
。
role
是 SELinux 角色(始终object_r
针对文件)
type
是 SELinux 主题类型
chsmack
: 改变斯玛克扩展属性
SMACK 是简化的强制访问控制内核。
用法:
chsmack -a价值 文件
value
SMACK64
是为扩展文件属性设置的 SMACK 标签
塞特里查尔:更改丰富的访问控制列表
里查尔这是一项将添加更多高级 ACL 的功能。
目前这项工作正在进行中,所以我不能告诉你太多关于它们的信息。我没有用过它们。
答案2
从高层次来看:
- 支持的基本文件系统权限所有Linux
和 全部Unix友好文件系统
-rwxrwxrwx
由 处理 ,以及与由 和chmod
处理的文件系统上的每个文件或文件夹相关联的所有者和组标识符;这部作品大家基本上都知道了。chown
chgrp
- 扩展文件属性,缩写为或已知为属性。它们是文件系统功能,使用户能够将文件与文件系统未解释的元数据相关联,而常规属性具有由文件系统严格定义的用途;属性是与文件和目录关联的名称:值对,类似于与进程关联的环境字符串。有一些特定的 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 和
xattr
s 使一切成为可能; SELinux 使用xattr
s 来存储文件/文件夹安全标签...使用 SELinux,所有低级工作都在xattr
s 中完成/定义,供您使用。因此,如果您的古老文件系统不支持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/SELinuxxattr
可能会导致在系统和文件系统以及 NFS 之间移动数据时出现问题,其中[较新的]系统与较旧的系统相比具有更全面的支持,xattr
而较旧的系统可能无法识别所有这些扩展属性[如果有的话]。注意使用tar
on 的东西xattr
;如果它保留在该系统上没有问题,但如果它很重要,则如果它转移到其他地方可能会出现问题xattr
(例如,Samba 以及 Windows 10 NTFS 和 Linux ext3/4、btrfs、XFS 之间的复制;或网络附加存储之间的来回复制( NAS)设备)。如果没有 SELinux 或其他机制通过
xattr
s 中定义的内容强制执行 ACL,那么xattr
理论上 s 就没有任何意义,可以被删除或剥离,因为此时它只是额外的包袱。当心禁用SELinux 现在位于 RHEL/CentOS 7 中,因为如果文件系统标签
xattr
丢失,将 SELinux 更改回时会出现问题执行或者宽容的;同样,这取决于您的 Linux 版本以及它如何xattr
通过 SELinux使用。
基本 Samba 共享在 RHEL/CentOS 7 中不起作用...因为 SELinux 默认设置为强制; SELinux 会拒绝一切,直到您允许为止,因此要么禁用 SELinux(不好),要么将其设置为宽松。如果您将 SELinux 保留为强制执行,则必须使用扩展属性标记要 Samba 共享的文件夹,以便 SELinux 能够识别并允许共享。因此,如果您让 SELinux 强制执行所有 SELinux 命令(然后将设置必要的xattr
s):
# 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 命令接受以下运算符:
“+”:该运算符用于添加指定的权限
“-”:该操作符用于删除指定的权限
“=”:该运算符用于定义任何用户的确切文件权限。