我正在为用户(userA/、userB/等)创建多个文件夹,任何人都可以在任何目录中创建/读取文件/文件夹(userC 可以在 userA/ 中创建 fileX)。但是,只有目录的所有者可以修改或删除该文件夹中的文件(userC 只能修改/删除 userC/ 中的文件)。
我尝试将目录权限更改为 7777,但是 SUID 不适用于目录。
如何让上传的文件继承目录所有者?
编辑:UserZ 拥有目录 dirZ/。 UserZ 可以创建(上传)、修改、删除和读取 dirZ/ 内的所有内容。
同样,UserY 拥有目录 dirY/。用户 Y 可以创建、修改、删除和读取 dirY/ 中的所有内容。
用户Y可以访问dirZ/。 UserY 可以创建或读取 dirZ/ 内的任何内容。用户Y不能修改或删除 dirZ/ 中的任何内容。
同样,UserZ 可以访问 dirY/。 UserZ 可以创建或读取 dirY/ 内的任何内容。用户Z不能修改或删除 dirY/ 中的任何内容。
答案1
大多数 UNIX 变体不允许用户创建属于另一个用户的文件,这是有充分理由的。
很奇怪你会需要它。如果您希望 userC 能够在userA
/ 内创建和删除文件,请授予 userC 对该目录的写入权限。根据您的设置,最简单的方法是将所有这些用户放入一个公共组中mygroup
,并使该组的所有用户目录均可写入。
chgrp mygroup userA userB userC
chmod g+w userA userB userC
使用访问控制列表 (ACL)如果您需要更大的灵活性(例如允许多个组访问这些目录)。看使目录中的所有新文件可供组访问如果您需要帮助激活系统上的 ACL。
如果您希望用户能够修改其目录之外的目录中的文件,可以将文件设置为组可写,或者在该目录上设置默认 ACL。
setfacl -d -m group:mygroup:rwx userA userB userC
如果您确实需要更改文件的所有者(但是为什么这很重要,因为所有文件都可以由同一组用户访问?),您可以通过上传文件时以 root 身份运行的作业来完成此操作。在 Linux 上您可以使用基于inotify的工具如果您确实需要,但最好更改执行上传的工具(一方面,使用基于 inotify 的解决方案,会在很短的时间内文件拥有错误的所有权)。
答案2
Unix 文件系统没有类似 Windows 的访问控制,这将使您能够区分创建和修改文件 - 一旦您授予用户在目录中创建文件的权限 (chmod +w),他/她将也能够修改它们。因此,您需要服务器端来提供此额外功能。
例如vsftpd
可以将chown
文件用于匿名的连接 - 我希望它能够(或多或少容易地)扩展到其他用户帐户,并且其他一些 FTP 守护进程可能已经具有此功能。
如果您不一定必须使用 FTP,Samba
似乎能够满足您的需求 - 看看(每股)inherit owner
选项。