当用户通过WebDAV创build一个文件时,默认行为是该文件由运行Apache进程的用户和组拥有,并且umask为022。
不幸的是,这使得没有特权的用户不可能通过其他方式写入文件,而不作为Apache运行的组的成员(这使我觉得是一个特别糟糕的想法)。
我目前的解决scheme是在Apache的envvars中设置umask 000 ,并从用户的webdav父目录中删除所有的世界权限。 所以,如果WebDAV共享是/home/foo/www ,那么/ home / foo / www由www-data:foo拥有,权限为770 。 这或多或less地阻碍了其他非特权用户的出现,但充其量也是如此,最糟糕的是等待的安全性灾难。
从我的研究中,在mod_dav和Apache上,我找不到一个合理的解决scheme,没有把所有的权限都转回去(我宁愿没有负载,也不增加服务器的复杂性)。 SuExec也无法工作,因为WebDAV操作不会以不同的用户身份执行。
对此有何想法? 谢谢。
我通过使用Posix ACL规避了Apache缺乏用户交换能力。 这些允许您在每个文件上添加更多的组和用户条目,并允许在自动添加到在其中创build的每个文件的目录上设置默认权限。
如果我猜对了,而且你正在运行Linux,那么你可以启用Posix ACL,用acl选项重新挂载你的文件系统。 然后你可以使用setfacl和getfacl来pipe理额外的权限。 在基于Debian的系统上,这些工具可以在acl包中find。 您可以在man acl和man setfacl进一步阅读关于Posix ACL的内容。 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:rx mask::rwx other::rx default:user::rwx default:group::rwx default:group:fileserver:rw- default:mask::rwx default:other::rx
但是,一个警告:您可能需要一些时间来适应Posix ACL,它们增加了更多的复杂性,即使它看起来并不如此。