Linux目录权限继承问题:父目录600权限下子目录777是否可访问?


阅读 2 次

权限继承的基本原理

在Linux文件系统中,目录权限确实会影响对其子项的访问。即使子目录设置了777权限,父目录的权限限制仍然会生效。这是因为Linux采用路径遍历的访问控制机制。


// 示例目录结构
$ ls -ld /test
drw------- 2 root root 4096 Jan 1 10:00 /test  # 父目录600权限

$ ls -l /test/child
drwxrwxrwx 2 user user 4096 Jan 1 10:01 /test/child  # 子目录777权限

实际操作验证

让我们通过具体命令验证访问行为:


# 尝试以普通用户身份访问
$ su - normaluser
$ cd /test/child
-bash: cd: /test/child: Permission denied

# 即使尝试直接访问子目录
$ ls /test/child
ls: cannot open directory '/test/child': Permission denied

技术原因解析

这是因为访问任何文件/目录都需要:

  1. 对路径上所有父目录具有执行(x)权限
  2. 对目标目录本身有相应权限

父目录600(rw-)缺少x权限,导致路径访问被拒绝。

解决方案

如果需要保持父目录隐私但开放子目录,可以:


# 方案1:给父目录添加x权限
chmod 700 /test

# 方案2:使用ACL精细控制
setfacl -m u:someuser:x /test

实际应用场景

在Web服务器配置中常见这种情况:


# Nginx配置示例
location /restricted/public {
    # 需要确保/restricted目录至少有+x权限
    alias /var/www/restricted/public;
}

正确的权限设置应该是:


drwx--x--x 3 root root  /var/www/restricted
drwxr-xr-x 2 web web   /var/www/restricted/public