管理 Apache 以补偿 WebDAV 的安全屏蔽

管理 Apache 以补偿 WebDAV 的安全屏蔽

当用户通过 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选项重新挂载文件系统。然后,您可以使用setfaclgetfacl管理其他权限。在基于 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,它们增加了相当多的复杂性,即使一开始看起来并非如此。

相关内容