![在创建/上传通过 ftp 创建的文件/目录后立即自动更改其所有权](https://linux22.com/image/536719/%E5%9C%A8%E5%88%9B%E5%BB%BA%2F%E4%B8%8A%E4%BC%A0%E9%80%9A%E8%BF%87%20ftp%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%96%87%E4%BB%B6%2F%E7%9B%AE%E5%BD%95%E5%90%8E%E7%AB%8B%E5%8D%B3%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%94%B9%E5%85%B6%E6%89%80%E6%9C%89%E6%9D%83.png)
我希望将通过 ftp 上传/创建的文件/目录的用户和组所有权自动设置为我选择的某个用户和组。到目前为止,我认为这是不可能的(我在 Ubuntu 上使用 vsftp)。有什么见解?
答案1
您可以在目录上使用粘性位,这会影响新创建的文件和目录的所有权。并与 umask 结合使用,这将创建具有特定权限的新文件。
评论后更新:
目录上的组粘性位将覆盖此目录中新创建文件的组所有权,无论创建此文件的用户属于哪个组。Umask 可以在创建时更改权限。
这种组合的典型用法是当您拥有“公共”目录时,每个用户都可以创建/更新/删除每个文件。因此,用户必须属于同一组(“用户”),并且组权限对于文件必须是“rw”,对于目录必须是“rwx”。在这种情况下,您将在父目录上为组设置粘性位,并将组更改为“用户”。然后,您必须在系统中设置文件上传的 umask(FTP、Samba 等)。此 umask 应创建具有 660 权限的文件和具有 2770 权限的目录。
另一种用途 - FTP。用户必须通过 FTP 拥有对文件的完全访问权限,而 Web 服务器必须拥有对某些文件的读取甚至写入访问权限。在这种情况下,您将在该 Web 的文档根目录上设置组粘性位,并将组更改为 www-data(用于 Apache)。然后将文件的访问权限更改为 640,目录的访问权限更改为 2750。对于 www-data 需要写入访问权限的目录,权限将为 2770。在 FTP 服务器中设置 umask 以创建具有上述权限的文件和目录。结果?上传的文件将拥有给定用户的所有者、组 www-data 和最少必要的权限。
我不确定您的用例到底是什么,但更改所有者不是必要的,我个人想知道谁创建了该文件(所有者可以更改它,但有多少用户知道如何做到这一点?)