我的 Ubuntu 服务器上已安装并运行了 vsftpd。这是一台开发服务器,我希望能够将我的代码直接通过 FTP 传输到 Apache 提供的目录中。
大多数人都知道,www-data 是 Apache 用户,并且 www-data 用户需要具有 Apache 所提供服务的目录的权限。
我不想让 www-data 也成为 FTP 用户,因此我所做的是创建另一个用于 FTP 的用户,并将 www-data 和新用户放在一个名为 www 的新组中。
我chown -R www-data:www *
对 Apache 所服务的目录进行了操作,并且基本运行正常。
当我通过 FTP 上传一个之前不存在于该目录中的文件时,就会出现问题。所有者被设置为我的 FTP 用户。我希望每次上传新文件时,所有者都设置为 www-data,组都设置为 www。
有没有办法用 vsftpd 来做到这一点?
我已经疯狂地在 Google 上搜索了好几个小时,但还是找不到办法。如能得到任何帮助我将不胜感激。
编辑:
我只是设置了几个每分钟运行一次的 cron 作业并设置了权限:
*/1 * * * * chown -R www-data:www /var/www
*/1 * * * * chmod -R g+rw /var/www
它可以工作,但是有点笨重,当我在浏览器中按下 F5 键时,从我上传新代码到它工作大约有 1 分钟的延迟。
答案1
阅读man 2 chmod
,特别是以下部分:
S_ISGID (02000) set-group-ID (set process effective group ID on execve(2); mandatory locking, as described in fcntl(2); take a
new file's group from parent directory, as described in chown(2) and mkdir(2))
您可能可以使用此功能使目录中创建的所有文件都属于该www
组,然后将 Web 服务器的umask
值更改为022
为了安全地执行此操作,请反复阅读man 2 chmod
、man 2 open
以及man 2 stat
也可以看看:部分。了解 Linux 如何处理文件和目录权限以获得乐趣和/或收益!
或者,您可以安装inoticoming - trigger actions when files hit an incoming directory
,并在文件命中时执行您的操作。