You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Linux的setfacl限制用户不得离开/home目录并设置权限例外?

实现用户目录访问限制的ACL配置方案

首先明确核心逻辑:用户要切换到某个目录,必须拥有该目录的执行权限(x。我们的目标就是通过ACL精准控制不同组用户对/home以外目录的访问权限,同时保证必要的命令执行能力。


方案一:限制share组用户不得离开/home

这个方案的核心是:让share组用户仅能访问/home及其子目录,无法进入/home以外的非必要目录,同时保留基本命令的执行能力。

步骤1:配置根目录/的权限

share组仅分配执行权限(无读权限),这样用户可以通过/路径访问到/home,但无法列出根目录下的内容,也不能随意切换到其他一级目录:

sudo setfacl -m g:share:--x /

步骤2:限制/home以外的非命令目录

/etc/root/var等不需要访问的一级目录,移除share组的所有权限:

# 按需添加其他目录,比如 /opt、/srv 等
sudo setfacl -m g:share:--- /etc /root /var

步骤3:保留命令目录的执行权限

为了让用户能执行基本命令(如lscd),需要给命令存放目录分配执行权限(无需读权限,只要能定位到命令文件即可):

sudo setfacl -m g:share:--x /bin /usr/bin /usr/sbin

步骤4:确保/home及其子目录的访问权限

保证share组能正常访问/home和目标子目录(比如/home/share):

# 给 /home 分配读+执行权限(如果需要创建文件则用 rwx)
sudo setfacl -m g:share:r-x /home
# 给共享目录分配完整权限
sudo setfacl -m g:share:rwx /home/share
# 可选:设置默认ACL,让 /home 下新创建的子目录自动继承权限
sudo setfacl -d -m g:share:rwx /home

测试验证

share组的用户登录后:

  • 尝试cd /etc会提示权限拒绝
  • cd /home/share可以正常进入
  • ls /会提示权限不足(因为没有根目录的读权限)
  • 基本命令如lspwd可以正常执行

方案二:允许adm组用户离开/home,限制share

这个方案是在方案一的基础上,给adm组开例外,让他们拥有正常的系统访问权限。

步骤1:先完成方案一的所有配置

先按照方案一限制share组的权限,确保基础限制生效。

步骤2:给adm组分配正常访问权限

对根目录和其他一级目录,给adm组分配读+执行权限,让他们可以自由切换和访问:

sudo setfacl -m g:adm:r-x /
sudo setfacl -m g:adm:r-x /etc /root /var /bin /usr/bin

原理说明

Linux ACL的权限优先级是:用户自身权限 > 用户所在组的ACL权限 > 基本组权限 > 其他权限。所以adm组的用户会优先匹配我们设置的g:adm:r-x权限,覆盖掉对share组的限制(如果用户同时属于两个组的话)。


注意事项

  1. 避免误锁必要目录:一定要确保命令目录(/bin/usr/bin等)的执行权限,否则用户会无法执行任何命令。
  2. 测试所有场景:用目标组的用户登录,逐一测试切换目录、执行命令、访问共享目录的场景,确保符合预期。
  3. 与基础权限配合:ACL是对基础权限的补充,不要忽略系统默认的权限设置(比如/home的基础权限通常是drwxr-xr-x)。

内容的提问来源于stack exchange,提问作者Lucas Aimaretto

火山引擎 最新活动