Sti*_*lev 8 acl permissions debian rsync
我在本地安装了 Dokuwiki,我定期使用 rsync 将其同步到我的服务器。我还将给我的一个朋友一个 ssh 帐户,并托管他的公共 Dokuwiki 安装。但是,我在访问权限方面遇到了问题 - 即使镜像是只读的,Dokuwiki 仍然需要对数据目录的写权限以进行缓存等。Apache 服务器以用户 www-data 的身份运行,并且每次我都这样做rsync,它会重置权限。
根据本网站上的其他一些答案,我尝试使用 setfacl 设置默认权限,但它似乎不起作用 - getfacl 表示权限存在,但 Dokuwiki 不会运行,并且当我尝试将文件写入为用户 www-data,它也不起作用。我错过了什么?
wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)
这是我用来设置权限的命令:
setfacl -R -d -m u:www-data:7 /var/www/*
Run Code Online (Sandbox Code Playgroud)
应用 ACL 权限后,您需要注意,当您执行该操作时,rsync您将使用-A或--acls开关。这指示rsync确保在进行同步时保留这些。
摘自 rsync 手册页
-A, --acls preserve ACLs (implies -p)
Run Code Online (Sandbox Code Playgroud)
在查看您的示例时,它确实包含如下权限。
传统烫发
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
Run Code Online (Sandbox Code Playgroud)
ACL
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)
但这些 ACL 是用于创建新对象的,并且并不完全按照您的想法工作。www-data除了默认的 ACL 权限之外,您还需要为用户创建一个条目。
$ pwd
/tmp/somedir
$ mkdir data
$ setfacl -R -d -m u:gopher:7 data
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)
data现在让我们尝试以 user 身份将文件写入目录gopher。
$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied
Run Code Online (Sandbox Code Playgroud)
看起来熟悉?
这是因为您需要为用户添加 ACL www-data,默认规则不是用于访问,而是用于创建新文件/目录。
$ setfacl -R -m u:gopher:7 data
Run Code Online (Sandbox Code Playgroud)
现在再次检查data目录:
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我们现在有一个 ACL 表示用户gopher有权rwx访问:
user:gopher:rwx
Run Code Online (Sandbox Code Playgroud)
尝试再次向目录写入数据:
$ sudo -u gopher touch /tmp/somedir/data/afile
$
Run Code Online (Sandbox Code Playgroud)
有效!!!仔细检查生成的文件:
$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct 7 21:36 /tmp/somedir/data/afile
Run Code Online (Sandbox Code Playgroud)