当用户通过 WebDAV 创建文件时,默认行为是该文件由运行 Apache 进程的用户和组拥有,umask 为 022。
不幸的是,这使得非特权用户无法通过其他方式写入文件,除非他们属于 Apache 运行的组的成员(我认为这是一个非常糟糕的主意)。
我当前的解决方案是在 Apache 的环境中设置umask 000
并从用户的 webdav 父目录中删除所有世界权限。因此,如果 WebDAV 共享为/home/foo/www
,则 /home/foo/www 由 拥有,www-data:foo
权限为770
。这或多或少可以阻止其他非特权用户,但这充其量只是一种骗局,最坏的情况是一场安全灾难。
根据我的研究以及对 mod_dav 和 Apache 的探索,除了使用 cron 作业将所有权限翻转回来之外,我找不到其他合理的解决方案(我宁愿不让服务器承受负载和增加复杂性)。SuExec 也不起作用,因为 WebDAV 操作不会以其他用户身份执行。
对此有什么看法?谢谢。
答案1
我使用 Posix ACL 解决了 Apache 缺乏用户切换功能的问题。这些功能允许您在每个文件上添加更多组和用户条目,还允许您在目录上设置默认权限,这些权限会自动添加到每个创建的文件内。
如果我猜对了,并且您正在运行 Linux,则可以启用 Posix ACL,您需要使用该acl
选项重新挂载文件系统。然后,您可以使用setfacl
和getfacl
管理其他权限。在基于 Debian 的系统上,可以在包中找到这些工具acl
。您可以在man acl
和中进一步阅读有关 Posix ACLman setfacl
的信息。Posix ACL 也可用于某些 BSD 系统和 MacOS,但我从未在那里使用过它们。
例如,您可以设置一个文件夹,其中的组fileserver
始终对文件夹中的所有文件具有读写权限:
setfacl -Rm default:group:fileserver:rw,group:fileserver:rx /srv/fileserver
这将导致getfacl /srv/fileserver
报告如下内容:
# file: /srv/fileserver
# owner: aef
# group: aef
user::rwx
group::rwx
group:fileserver:r-x
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:fileserver:rw-
default:mask::rwx
default:other::r-x
但需要注意的是:您可能需要一些时间来适应 Posix ACL,它们增加了相当多的复杂性,即使一开始看起来并非如此。