gpt4 book ai didi

linux - 如何使用 Perl CGI 脚本启动/停止服务

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:08 24 4
gpt4 key购买 nike

我的目标是从 Perl CGI 脚本启动/停止服务(如 httpd、sshd、iptables 等)。

#!/usr/bin/perl
use strict;
use warnings;
print "content-type:text/html\n\n";
print <<EOM;
<html>
<body>
EOM
`/etc/init.d/httpd stop`;
my $res=`/etc/init.d/httpd status`;
print <<EOM;
<h3>$res</h3>
</body>
</html>
EOM

这里 back tics 中的第一个命令不起作用,而分配给 $res 的第二个命令正在起作用。浏览器输出如下:

httpd (pid 15657) is running...

最佳答案

我建议显示 stop 命令的输出。我强烈怀疑您会看到一条错误,表明您无权停止服务。

正确配置的 Web 服务器进程将由几乎没有系统权限的用户拥有。这是一项安全功能。 Web 服务器上的 CGI 程序可以由任何可以访问 Web 服务器的人运行。因此,Web 服务器用户通常配置为仅运行一组非常有限的程序。

启动和停止网络服务器通常需要 root 权限。您的 Web 服务器进程将没有 root 权限(希望是出于显而易见的原因)。但系统上的每个用户(包括 Web 服务器用户)完全有可能有权获取 Web 服务器进程的状态。这就是为什么 httpd status 命令有效,而 httpd stop 命令无效。

您可以使用 sudo 或类似的方法向 Web 服务器用户授予启动或停止服务的临时权限。但您需要非常小心地执行此操作 - 也许需要在网页上输入密码(并通过 https 安全地传输该密码)。

但完全重新考虑这种方法可能是一个更好的主意。

我还可以指出,使用反引号来运行您不想从中收集输出的外部命令是一个坏主意。在这种情况下,使用 system() 函数会更有效。

我还注意到,您正在加载 CGI 模块,但没有使用其任何功能。您甚至可以手动创建 Content-Type header ,忽略模块的 header() 函数。

这是我的传统警告:在 2017 年编写新的 CGI 程序是一个糟糕的主意。请阅读CGI::Alternatives并考虑使用基于 PSGI 的方法。

关于linux - 如何使用 Perl CGI 脚本启动/停止服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45457297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com