setfacl
相关命令:chacl,getfacl
setfacl -- 设定文件访问控制列表
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
--set=acl 设定替换当前的文件访问控制列表
--set-file=file 从文件中读取访问控制列表条目设定
--mask 重新计算有效权限掩码
-n, --no-mask 不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
--restore=file 恢复访问控制列表,和“getfacl -R”作用相反
--test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
在本文中,我们将介绍Linux中setfacl命令的用法。这是为了记录我们在学习Linux知识点时的学习成果,以便在遗忘时进行回顾。有时候我们会遇到这样的问题:在Linux中,如何限制特定用户对指定文件或目录的权限?接下来,我们将回答这个问题。
首先,我们需要查阅setfacl命令的文档:
man setfacl
其次,我们需要清楚Linux中的权限问题:
最后,我们需要了解用户和用户组的相关内容。接下来,我将进行讲解和测试。我在Kali Linux上进行测试,除了root用户外,还有一个名为xyl的普通用户。
例如,我在root用户下创建了一个任意的sh文件,并赋予它执行权限:
chmod +x test.sh
通过查看ACL权限,我们可以获取文件的信息:
getfacl test.sh
从上面的group和other权限可以看出,用户xyl对test.sh脚本具有执行权限。为了测试,我们暂时移除xyl用户对该脚本文件的执行权限:
setfacl -x u:xyl test.sh
在设定文件访问控制列表之前,我们可以看到xyl用户具有test.sh脚本文件的执行权限。修改xyl用户的ACL访问权限后:
setfacl -m u:xyl:--- test.sh
很明显,xyl用户执行test.sh文件时受到了权限限制。
接下来,让我们来玩一个刺激的(嘿嘿,手动滑稽中~):
注意:由于Kali和Windows 10之间共享了一个文件夹,Linux无法对该文件夹中的内容进行操作,所以我们只能将音视频文件复制到Linux的其他目录下。我们选择了一张图片和一个音视频文件进行尝试,如上图所示,用户xyl可以正常打开”汉服小姐姐.jpg”和”Take me hand.flac”音视频文件。接下来:
setfacl -x u:xyl 汉服小姐姐.jpg
setfacl -x u:xyl Take\ me\ hand.flac
很自然地,xyl失去了对这些文件的使用权限!
但是很快我们会发现,这种方法只能对单个用户进行权限限制。在实际情况中,对多个用户进行限制会变得复杂。那么,有没有更简便的方式呢?当然有。我们可以将多个用户设定为同一个用户组,然后对该用户组进行限制:
setfacl -m g:groupname:--- test.sh
最后,我知道你迫不及待地想知道如何撤销对用户xyl的限制了。别着急,相信你已经阅读完前文中setfacl命令的参数介绍了,没错,有两种方式:
如果你想取消对指定文件或目录的所有ACL设定权限,可以使用以下命令:
setfacl -b test.sh
如果只想恢复指定用户对该文件的ACL权限,而保持其他组成员的权限设置不变,可以采用以下措施:
setfacl -m u:xyl:rwx test.sh
如上图所示,这样用户xyl就恢复了对这些文件的原始使用权限。
附录:
- Linux中Wheel用户组的概念:
- 如果对ACL访问控制权限还不了解,可以参考:Linux ACL访问控制权限完全攻略来进一步学习和了解。
参考文献:Linux使用手册
量子哈希











