我有一个通过 SSH2 向服务器发送命令的网站

我试图弄清楚两件事中的一件。任何一个

A. 为发送命令的注册帐户设置用户名(IN SSH 如果用户名 = 存在则发送命令,否则通过 $username 创建用户,设置权限以仅执行 PERL 命令,然后发送命令)

或者

B. 将发送的 perl 命令 pid 设置为 $username

其基本概念是,我希望能够根据进程 ID 集 终止命令

或者

注册一个用户名并让命令在那里运行,以便用户可以通过该唯一用户名终止命令,但只允许在该用户名上执行 kill perl 和 perl 脚本。

示例: perl $username script.pl command command2 command3 (设置用户进程 ID 的用户名)
示例 2:kill $username(这会根据该 ID 终止进程)

附言我使用 ssh 的服务器正在运行 CentOS 6,如果有帮助的话?

这是我要修改的当前脚本:

<?php 
set_time_limit(0); 
ignore_user_abort(true); 
 
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); 
// log in at url/ip on port 22 
if(!($con = ssh2_connect("************", 22))){ 
echo "fail: unable to establish connection\n"; 
} else { 
// try to authenticate with username, password 
if(!ssh2_auth_password($con, "**********", "***********")) { 
echo "fail: unable to authenticate\n"; 
} else { 
 
// execute a command 
if (!($stream = ssh2_exec($con, "perl i.pl ".$_GET['command1']." ".$_GET['command2']." ".$_GET['command3']))) { 
echo "fail: unable to execute command\n"; 
} else { 
echo "" . stream_get_contents($stream); 
 
echo "Commands have been executed successfully!"; 
} 
} 
} 
?> 

请您参考如下方法:

您可以use the id command to check if a given username exists .

然后,您可以使用 useradd 命令创建新用户。查看 useradd 手册页以了解可用的各种选项。

要创建一个只执行一个脚本的用户并不容易。您可以设置一个 chroot jail ,但在大多数情况下,这可能比它的值(value)更麻烦。但是,考虑到您正在尝试使用来自 Web 请求的输入来执行命令,您可能不可避免地必须创建一个 jail ,因为您现在尝试的基本上是为恶意用户打开远程服务器洗劫他们的心。

您可以使用带有 -u 选项的 sudo 以其他用户身份运行脚本。示例:sudo -u username ls
您可以在后台运行进程并使用 $! 获取进程 ID。多变的。示例:ls > /dev/null & echo $! .以后可以使用此进程 ID 来终止该进程。但是要小心,因为进程 id 可以被回收,你可能会不小心杀死错误的进程。以与命令本身相同的非特权用户(而不是具有更高特权的用户)运行 kill 命令是一个好主意,至少可以防止 kill 命令意外杀死另一个用户的进程。

无论您是在本地执行还是从 SSH 执行,所有这些步骤都没有什么不同。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!