为什么我没有权限创建此目录/文件?Debian 11 Linux 上的权限

为什么我没有权限创建此目录/文件?Debian 11 Linux 上的权限

我以为我了解了 Linux 权限,但是唉……为什么我在这里没有权限?

我是这个www-data团体的成员:

docker@docker01:/home/docker$ id
uid=1002(docker) gid=998(docker) groups=998(docker),33(www-data)

父目录是 user/group www-data,并且该组具有rwx

docker@docker01:/home/docker$ ls -lh /var/www/userdata02.example.com/html/
total 40K
drwxrwxr-x 768 www-data www-data 20K Jun  1 08:01 private
drwxrwxr-x 777 www-data www-data 20K Jun  5 20:55 public

但是当我尝试创建一个新的子目录时,出现权限错误:

docker@docker01:/home/docker$ mkdir /var/www/userdata02.example.com/html/public/803y9xcn

mkdir: cannot create directory ‘/var/www/userdata02.example.com/html/public/803y9xcn’: Permission denied

我在这里遗漏了什么……?

答案1

权限对于所有者(“读写执行”)、对于组、对于其他人而言rwxrwxr-x意味着。rwxrwxr-x

对于目录,“读取”标志(r)表示“获取目录列表”,“写入”(w)表示在该目录中“创建/删除/重命名对象”,“执行”(x)表示“进入”(cd)该目录。

w仅所有者或所有者组才允许更改 ( )。您是docker,但您不是 所有者,也就是www-data。可能docker不属于该www-data组,所以您是那些“其他人”之一,无权写入。

这个问题可以这样解决:

  • docker通过使用 POSIX ACL 专门为其所属的用户或组添加权限;
  • 加入docker群组www-data
  • 通过将权限更改为全世界可写的。

选项按安全性降低的顺序呈现(而不是易实现性的增加)。此外,两个较低的选项有一个警告:新创建的对象将由所有者拥有docker,现在www-data将无法控制它们;它可能无法删除它们甚至无法读取它们,这取决于使用什么权限创建对象。这很麻烦,我建议不要这样做。我会解释 POSIX ACL 路径:

setfacl -m user:docker:rwx /var/www/userdata02.example.com/html/public
setfacl -m default:user:docker:rwx /var/www/userdata02.example.com/html/public
setfacl -m default:user:www-data:rwx /var/www/userdata02.example.com/html/public
setfacl -m default:group:www-data:rwx /var/www/userdata02.example.com/html/public

即使在第一种情况下,对象也将归创建者所有(docker),但您可以拥有一个“默认”ACL,它将应用于所有新对象并嵌套到子目录中,因此您可以强制所有新对象拥有完全权限www-data。这就是下面三行的作用。

或者,您可以为此类对象创建一个特殊组,而不是授予权限user:dockergroup:that_group根据您在 Docker 中要执行的操作,这可能会使您以后的生活更轻松。

相关内容