在很久以前的Unix上,我了解了chmod
:在Unix上设置权限的传统方法(以及使用setuid,setgid允许程序获得特权)。
我最近在GNU / Linux上发现了一些更新的命令:
setfacl
扩展了传统的ugo:rwx
位和的t
位chmod
。setcap
比的ug:s
位提供更多的细粒度控制chmod
。chattr
允许文件的某些其他控件(混合使用)。
还有其他吗?
在很久以前的Unix上,我了解了chmod
:在Unix上设置权限的传统方法(以及使用setuid,setgid允许程序获得特权)。
我最近在GNU / Linux上发现了一些更新的命令:
setfacl
扩展了传统的ugo:rwx
位和的t
位chmod
。setcap
比的ug:s
位提供更多的细粒度控制chmod
。chattr
允许文件的某些其他控件(混合使用)。还有其他吗?
Answers:
chmod
:更改文件模式位用法(八进制模式):
chmod <octal-mode> files...
用法(符号模式):
chmod <references><operator><modes> files..
references
是字母的组合ugoa
,用于指定files
将修改哪个用户的访问权限:
u
拥有它的用户 g
file
的组中的其他用户o
不在文件组中的其他用户a
所有用户
如果省略,则默认为所有用户使用,但仅umask
修改允许的权限。
operator
是以下字符之一+-=
:
+
将指定的文件模式位添加到每个文件的现有文件模式位 file
-
将指定的文件模式位删除为每个文件的现有文件模式位 file
=
除非明确指定,否则将添加指定的位并删除未指定的位(为目录设置的setuid
和setgid
位除外)。mode
由字母的组合组成,这些字母rwxXst
指定要修改的权限位:
r
读 w
写 x
执行(或搜索目录)X
仅当文件是目录或已经为某些用户设置了执行位时才执行/搜索s
setuid或setgid(取决于指定的references
)t
限制删除标志或粘性位或者,mode
可以由字母之一组成ugo
,在这种情况下,模式对应于当前授予所有者的权限(u
),file
组的成员(g
)或上述两个类别中的用户的权限(o
)。
chmod
解释:setfacl
)
rwx
—读取(r),写入(w)和执行/交叉(x)权限。
#!
)以及其他可执行文件。s
和t
—目录上的粘滞位(t)和setgid(s)
s
—可执行文件上的setuid,setgid。
setcap
一个更现代的方式来做到这一点。chown
chgrp
:chattr
:更改文件属性用法:
chattr <operator><attribute> files...
operator
是字符之一+-=
:* +
将所选的属性是对现有attributes
的的files
* -
中删除所选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...
用法(删除):
setfattr -x <name> files...
name
是要设置或删除的扩展属性的名称
value
是扩展属性的新值
setfacl
:更改文件访问控制列表用法:
setfacl <option> [default:][<target>:][<param>][:<perms>] files...
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
A capability-clause
由以逗号分隔的功能名称列表和后面的操作员标记对列表组成。
可用的运营商=
,+
和-
。可用标志是e
,i
并且p
与有效,可继承和允许的功能集相对应。
该=
运营商将提高特定功能集和重置等。如果未与=
操作员一起给出任何标志,则将重置所有功能集。在+
和-
运营商将分别升高或降低一个或多个指定的功能集。
chcon
:更改文件SELinux安全上下文用法:
chcon [-u <user>] [-r <role>] [-t <type>] files...
用户是SELinux的用户,例如user_u
,system_u
或root
。
角色是SELinux角色(始终object_r
用于文件)
type是SELinux主题类型
chsmack
:更改SMACK扩展属性用法:
chsmack -a <value> file
value
是要为SMACK64
扩展文件属性设置的SMACK标签
richacl的功能将添加更多高级ACL。
目前尚在进行中,因此无法向您详细介绍。我没有用过。
从高层次:
-rwxrwxrwx
由处理chmod
,与所有者和组标识符绑定到每一文件或文件夹上由处理文件系统沿chown
和chgrp
; 基本上每个人都知道这部分。其他要点:
user_xattr
我可以选择在安装时在根文件系统上不提供xattr。我认为现在使用RHEL / CentOS 7,默认情况下存在xattr,而您不能拥有它。ls
if 时-rwxrwxrwx+
,+
表明该对象上存在扩展文件属性。tar
在xattr 上使用东西,如果它停留在该系统上没问题,但是如果xattr很重要(例如samba并在win10 ntfs和linux ext3 / 4,btrfs,xfs之间复制),则返回到其他地方可能会出现问题。在网络连接的存储设备之间来回移动)xattr
s中定义的selinux或其他机制来强制ACL ,则xattr
s从理论上讲就没有任何意义,可以被丢弃或剥离,因为在那一点上,这只是多余的负担。基本的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:
# this is an selinux command, not
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共享下的文件/文件夹实施限制(使用任何扩展属性)。由于这些文件/文件夹被共享,因此用户可以合法地将某些文件/文件夹复制到他们的win10 pc,然后再复制回去,从而失去扩展属性。现在,在该来回复制之后,在该linux系统上,selinux将限制对所述文件的访问,因为不再存在必需的xattr,并且用户/管理员大为惊讶,为什么现在事情不能正常工作了……设置selinux允许并认识到xattr
在审计日志中显示丢失s 的问题,但这不会直接表明这是由于来回副本丢失了xattr的结果。还应考虑数据备份和还原以及需要记住的潜在工作xattr
如果要基于正确的xattr
s 强制执行安全性,则除了uid / gid之外还包括s。
chmod