1

我有一个 perl 服务器,它需要能够读取用户的文件和数据并写入它们。用户通过 LDAP 进行身份验证,因此我可以验证密码并了解他们的主目录。

从这里我需要一些方法让这个网络服务器(运行为www-data)来访问他们的文件。我考虑过运行每个命令,su/sudo但是当我只需要在它们的主目录中打开/写入/关闭/glob 文件时,这真的不是最佳选择。

有这方面的标准做法吗?到目前为止,我还无法打开任何东西。

笔记

  • 我想要他们的主目录中的文件,因为用户将通过 SSH 登录并在他们身上运行其他无法通过网络获得的命令
  • Web 连接当然是通过 HTTPS 建立的。

有关的

4

2 回答 2

2

你在运行 Apache 吗?这听起来像是WebDAV的工作。

问题是您的 Web 服务器作为 www-data 运行。按照设计,它不能更改任何文件的所有者。其他一些特权进程将需要代表网络服务器更改所有权。

您可以编写一个最小的 set UID 脚本来处理更改文件的所有权并删除它们,但是这条路径充满了危险(特别是如果您以前从未编写过 setUID 程序。)

于 2013-06-14T19:48:58.553 回答
2

您可能需要重新考虑您的架构。这听起来像是 ISP 配置中的虚拟主机的工作。

首先,阅读Apache VirtualHost 文档中的“动态配置的海量虚拟主机”页面。然后阅读有关如何以不同用户身份运行每个虚拟主机的信息

在这种方法下,您将为每个运行的用户提供一个虚拟主机$user.example.com;当 Apache 为 vhost 分叉一个 worker 时,fork 会以适当的用户身份运行 suid。然后你设置docrootscriptalias为指向站点代码的虚拟主机。

长话短说,使用 Apache(经过充分测试和充分记录)的特性来管理用户身份可能比在 Perl 中执行或创建自己的 suid 包装器更好。众所周知,很难做到正确。

于 2013-08-15T15:22:47.147 回答