【问题标题】:How do I create a new HTTP::Daemon in perl without root permisson?如何在没有 root 权限的情况下在 perl 中创建新的 HTTP::Daemon?
【发布时间】:2011-06-10 00:11:11
【问题描述】:

HTTP::Proxy 的第 271 行是这样的:

my $daemon = HTTP::Daemon->new(%args) or die "Cannot initialize proxy daemon: $!";

当我尝试运行此脚本时:

use CGI;
use CGI::Carp(fatalsToBrowser);

use HTTP::Proxy;

my $proxy = HTTP::Proxy->new( port => 8080 ); # Edit: I have tried other ports, too, including 3123, 32789, etc.

$proxy->start;

我从浏览器收到此错误消息:

软件错误:

无法初始化代理守护进程:HTTP/Proxy.pm 第 271 行不允许操作。

如需帮助,请发送邮件至本站站长,提供此错误信息 以及错误的时间和日期。

我认为这是因为我需要 root 权限。我可以使用不需要root权限的端口吗?我没有服务器的root密码。

编辑:显然我应该能够在没有 1025 或更高版本的情况下启动它。我将如何设置堆栈跟踪?

【问题讨论】:

  • 您是否检查以确保该服务器上尚未使用端口 8080? netstat -an ¦ grep 8080
  • 纯理论上,对于更高#端口,您不应该需要root权限。此时,您可能希望使用调试器启动服务器并跟踪错误的确切来源(查看源代码,它可能来自IO::SocketIO::Handle 构造函数)。
  • 你在使用奇怪的安全模型的奇怪 Linux 吗? (例如 SELinux)?人们遇到了神秘的权限错误。
  • @DVK 我在 i386 FreeBSD 上

标签: perl http proxy cgi daemon


【解决方案1】:

您可以使用 1025 以上的任何端口(尚未使用)。如果您在浏览器中收到该消息(在端口 8080 上?),则您的守护程序已经成功使用该端口。我不确定它可能会带来哪些其他权限问题。您可以查看文档或尝试strace

【讨论】:

  • @Leo, strace 是一个实用程序,它列出了您程序制作的所有系统调用(及其返回码)。你只需要做strace ./myscript.pl。如果您是新手,则需要一些时间来阅读输出。不过,在输出中的某处查找权限被拒绝错误。
猜你喜欢
  • 2011-04-13
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
相关资源
最近更新 更多