我刚刚创建了一个名为sync
in the location 的新目录/home/sync
。我以用户身份创建了目录liam
,然后做了一个chown -R rslsync:rslsync /home/sync
.这将所有者更改为用户rslsync
没有问题。我将自己添加liam
到rslsync
群组中。
test
然后,我在名为now 的目录中创建了另一个文件夹/home/sync/test
。当我尝试将rslsync
文件夹位置指向/home/sync/test
它时,它告诉我rslsync
没有对该文件夹的写入权限。我运行ls -l
并显示root
root
.
顶级目录文件夹的所有者如何rslsync
无法访问由与自己位于同一组的另一个用户创建的子文件夹之一?我在这里错过了什么吗?
编辑
drwxr-xr-x. 3 rslsync rslsync 18 Aug 26 17:09 /home/sync
drwxr-xr-x. 2 root root 6 Aug 26 17:09 /home/sync/test
test
当我创建我使用的文件夹时sudo
,否则它不会让我创建它。
组 liam 显示为这样
liam : liam wheel rslsync
答案1
默认创建的新目录和文件继承创建进程的用户和组。该进程可以显式地将其设置为某个其他组(该进程是其成员),或者目录应该有setuid/setgid位设置后,所有者/组将被设置为与目录相匹配。
默认文件权限由进程决定'掩码。通常的 umask 值(022
和027
)不会将文件和目录设置为全局可写。
由于您的目录的所有者和组是root:root
您无法写入它。另外根据您的描述,您似乎确实创建了该文件根(使用 sudo?)而不是用户利亚姆。
另请注意,Linux 中的文件权限检查是针对从当前目录开始的完整路径进行的。如果路径中的目录不具有进程用户/组的执行 (+x) 权限,则访问将被拒绝。
设置文件权限的另一种方法是通过 POSIX 访问控制列表,其语义在man 5 acl
。 ACL 支持取决于您使用的文件系统,并且可能需要安装标志才能启用。
答案2
在 Linux 上,每个文件或文件夹的所有权和权限与所有其他文件夹和文件分开处理 - 独立于父目录状态。当您(在任何位置)创建新文件夹时,它将获得创建它的用户的所有权。这是一件好事,对于 Linux 安全模型来说至关重要。
当
ls
命令给你“root:root”时,root 创建了文件/文件夹(或者 sombody 做了chown root:root
。但显然用户 rslsync(或 liam)不(也不应该)属于组“root”。这就是为什么他们不属于组“root”)没有获得权限标志的“组”字段中的权限,而是获得“其他”字段中注明的权限,而这些字段的标准权限根本没有权限......
答案3
你已经回答了你的问题...
ls -l 显示根:根你写了chown -R rslsync:rslsync。
这意味着至少如果您的 rslsync 用户不属于根 您无法在该目录中写入组。
我在这里不关注的是为什么您的用户liam
将文件夹创建为root:root
,但这是一个不同的问题。
groups
您能显示您的用户的输出吗?
答案4
我找到了一个解决方案:
转到.service 文件
sudo vi /usr/lib/systemd/system/resilio-sync.service
使用您当前的用户名更改此行:
用户=aurelien.izoulet
组=aurelien.izoulet
环境=“SYNC_USER=aurelien.izoulet”
环境=“SYNC_GROUP=aurelien.izoulet”
重新启动 systemctl:
sudo systemctl daemon-reload
然后重新启动 rslsync 服务,这应该可以工作!