【问题标题】:Design Advise: Sending signals to daemons through HTTP设计建议:通过 HTTP 向守护进程发送信号
【发布时间】:2011-01-17 03:15:33
【问题描述】:

我在 Ubuntu 上使用 Apache。我有一个 Perl 脚本,它基本上读取目录的文件名,然后重写文本文件,然后向守护程序发送信号。如何通过网页尽可能安全地做到这一点?

实际上,我可以在下面的代码中运行简化的 cgi,但如果我删除了 cmets,则不能。我正在寻找考虑以下任何一项的建议:

  • 使用 HTTP 请求?
  • 代码中显示的目录的 Apache 文件权限如何?
  • htaccess 是否足以让用户/通过访问 cgi?
  • 我是否应该使用数据库而不是写入文件并运行 cron 查询数据库并授予写入和发送信号的权限?
  • 向网络服务器授予尽可能少的权限。
  • 我应该设置 VPN 吗?


#!/usr/bin/perl -wT
use strict;
use CGI;
#@fileList = </home/user/*>; #read a directory listing
my $query = CGI->new();

print $query->header( "text/html" ),
$query->p( "FirstFileNameInArray" ),
#$query->p( $fileList[0] ), #output the first file in directory
$query->end_html;

【问题讨论】:

  • 我不明白你想做什么,你能解释一下你想达到什么目的吗? (我的意思是,“读取 driectory 的文件名,然后重写文本文件,然后向守护进程发送信号”与 CGI 有什么关系?)
  • 我正在尝试通过网络界面安全地运行我拥有的脚本
  • @row 代码就像我正在尝试将目录列表输出到 HTML
  • 您在谈论安全性。什么是安全模型?有人应该通过网络运行这个程序吗?请amend your question.
  • @daxim 感谢我进行了编辑,请随时对它们进行改进。

标签: perl security networking cgi


【解决方案1】:

大概,您从注释行中得到的错误是在尝试读取 /home/user 目录时权限被拒绝。解决这个问题的方法是(惊喜,惊喜)让 apache 用户 [1] 读取该目录。有三种主要方法可以做到这一点:

  1. 在大多数环境中,有 真的没有充分的理由隐藏所有 用户家中的文件名 目录,所以你可以使 使用chmod a+r /home/user 对世界可读的目录。除非你有一个 阻止的具体原因 公众从不知道 用户的文件名 主目录,我倾向于 推荐这种方法。

  2. 如果你想多一点 限制它,你可以 将 /home/user 更改为由 a 拥有 apache用户所属的组 到(或将 apache 用户添加到 目前拥有的集团 /home/user) 然后设置 /home/user 是群组可读的。 这将使所有人都可以访问 该组的成员,但不是 公众。

  3. 如果您需要有标准 文件系统权限应用于 网络访问,你可以看看 配置suexec 以便 个人请求可以接受 其他用户的权限 阿帕奇用户。这通常是 拥有代码的用户 正在运行以处理请求 (例如,在这种情况下,用户 拥有您的目录列表脚本), 但是,如果您使用的是基于 htaccess 的 认证,有可能 配置suexec来决定 要承担哪个用户的权限 根据您登录的用户。 (我自己避免suexec,所以我不是 100% 确定这是否可以做到,并且 不知道该怎么做 可以。)

[1] ...我的意思是运行 apache 的用户;根据您的系统配置,该用户可能被命名为“apache”、“httpd”、“nobody”、“www-data”或其他名称。

【讨论】:

  • Shreohman 非常感谢,顺便说一句,我还需要写权限并向守护进程发送信号。这是我最关心的问题。
  • 啊,对了,忘记那些部分了……重写也可以通过正常的unix权限授予来安排,但是你只能向你拥有的进程发送信号,所以,除非守护进程可以运行从一开始就由apache用户,那么我想你毕竟需要使用suexec
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多