对同一组中 sftp 用户创建的目录和文件设置正确的默认权限

对同一组中 sftp 用户创建的目录和文件设置正确的默认权限

在我的文件夹中,/var/www/storage/app/uploads/public有很多由我的网站 CMS 和来自远程服务器的 sftpupload 脚本创建的子目录。

现在我面临的问题是由 sftp 上传创建的目录引起的。

不适当的权限

所有者是 sftpuser,我的 www-data 用户对该目录没有写权限来创建子目录。

这导致我的 www-data 用户 php 脚本喷出

从 /var/www/install-master/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php 336 处的“mkdir(): 权限被拒绝”回溯:

如果我从第一次将其设置为组可写时检查父目录的 acl 权限,最顶层的目录具有正确的 acl 权限。

适当的访问权限

但是sftp创建的第二层没有这些

错误的访问控制列表

我发现这个问题,但除了 sftp 忽略 acls 之外,这并不是一个真正有用的答案。

我尝试在 /etc/ssh/sshd_config 中设置 sftp 的 umask 位

更改 sshd_config 中的 umask

但即使这样,对新创建的目录也没有影响。对于组来说仍然不可写。

如何使用 sftp 为所有者和组授予对新创建的文件夹的浏览和创建子目录权限,为所有者和组授予读取和写入权限,但不授予对这些子目录中文件的执行权限?

或者我应该使用不同的方法?据我了解,sftp 在从远程端更改文件权限方面只有有限的选项,并且 acl 显然被 openssh sftp 忽略。

那么如何使用 sftpuser 在 ubuntu 18.04 上获得这些正确的运行权限呢?

答案1

我在bindfs中找到了解决方案。这允许使用正确的权限将上传的文件夹复制到我的目标文件夹。

我按照这个教程https://www.talkerland.com/2018/08/20/howard/how-to-install-bindfs-on-ubuntu-18-04/

root@talkerland $ apt update
root@talkerland $ apt -y 安装bindfs
root@talkerland $ mkdir -p /home/gatekeeper/www/html
root@talkerland $ chown -Rf gatewaykeeper:gatekeeper /home/gatekeeper/www root@talkerland
$ chmod -Rf 770 /home/gatekeeper/www
root@talkerland $ nano /etc/fstab

然后在 /etc/fstab 中的一行上

bindfs#/var/www/html /home/gatekeeper/www/html fuse force-user=gatekeeper,force-group=gatekeeper,create-for-user=www-data,create-for-group=www-data,create-with-perms=god=rx:ud=rwx:gof=r:uf=rw,chgrp-ignore,chown-ignore,chmod-ignore 0 0

god为了让bindfs启动并运行,我只需在fstab条目中进行一些更改即可获得我想要的权限,通过更改为odud到来获得我想要的权限,该权限也是组可写的gud。这里o代表otherg代表groupu代表userf代表filed代表directory

bindfs#/var/www/html /sftp/sftpuser/app fuse force-user=sftpuser,force-group=sftpuser,create-for-user=www-data,create-for-group=www-data,create-with-perms=od=rx:gud=rwx:of=r:ugf=rw,chgrp-ignore,chown-ignore,chmod-ignore 0 0

这样,我现在就有了一个非常微调的方法来上传这些远程文件,并具有适当的权限。唯一遗憾的是我现在有重复的内容,但这是一个缺点,我可以接受适当的权限控制。

适当的权限

相关内容