我有一个perl服务器,它需要能够读取用户的文件和数据,并写入它们。用户通过LDAP进行身份验证,因此我可以验证密码并了解其主目录。
从这里开始,我需要一些方法让这个网络服务器(以www-data
运行)来访问他们的文件。我已经考虑过通过su/sudo
运行每个命令,但是当我只需要在它们的主目录中打开/写入/关闭/ glob文件时,这真的不是最佳的。
这是否有标准做法?到目前为止,我还没有找到任何东西。
注释
相关
答案 0 :(得分:2)
你在运行Apache吗?这听起来像是WebDAV的工作。
问题是您的Web服务器是以www-data运行的。按照设计,它将无法更改任何文件的所有者。其他一些特权进程需要代表网络服务器更改所有权。
您可以编写一个最小集合UID脚本来处理更改文件的所有权并删除它们,但这条路径充满了危险(特别是如果您之前从未编写过setUID程序。)
答案 1 :(得分:2)
您可能想重新考虑您的架构。对于类似ISP的配置中的虚拟主机来说,这听起来像是一项工作。
首先,阅读Apache VirtualHost documentation中的“动态配置的群发虚拟主机”页面。然后阅读有关如何run each virtual host as a different user
的内容根据这种方法,对于以$user.example.com
运行的每个用户,您将拥有一个vhost;当Apache为vhost分配一个worker时,fork会以适当的用户身份运行suid。然后为vhost设置docroot
和scriptalias
,指向站点代码。
长话短说,使用Apache(经过充分测试和记录良好)的功能来管理用户身份可能比在Perl中执行或者自己的suid包装更好。很难说得对。