我有一个通过SSH2向服务器发送命令的网站
我试图弄清楚两件事中的一件。
一个。设置发送命令的注册帐户的用户名( IN SSH 如果username = exists,则发送命令,或者通过$ username创建用户,设置权限仅执行PERL命令,然后发送命令)
OR
B中。将发送的perl命令pid设置为$ username
这个的基本概念是,我希望能够根据进程ID集终止命令
OR
注册用户名并让命令在那里运行,以便用户可以通过该唯一用户名终止命令,但只允许在该用户名上执行kill perl和perl脚本执行。
示例:perl $ username script.pl命令command2 command3(这将设置用户进程ID的用户名) 示例2:kill $ username(这会根据该ID终止进程)
P.S。我使用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!";
}
}
}
?>
答案 0 :(得分:1)
你可以use the id command to check if a given username exists。
然后,您可以使用useradd命令创建新用户。查看useradd手册页,了解各种可用选项。
创建具有仅执行单个脚本的权限的用户是不容易的。你可以设置一个chroot监狱,但在大多数情况下,这可能比它的价值更麻烦。但是,考虑到您尝试使用来自Web请求的输入执行命令,您可能不可避免地需要创建一个jail,因为您现在尝试的是基本上为恶意用户打开您的远程服务器要洗劫他们的内心。
您可以将sudo与-u选项一起使用,以另一个用户身份运行脚本。示例:sudo -u username ls
您可以在后台运行流程,并使用$!
变量获取流程ID。示例:ls > /dev/null & echo $!
。稍后可以使用此进程ID来终止进程。但是要小心,因为进程ID可以被回收,你可能会意外地杀死错误的进程。将kill命令作为与命令本身相同的非特权用户运行(而不是具有更高权限的用户)最好至少防止kill命令意外杀死另一个用户的进程。
无论是在本地执行还是从SSH执行,所有这些步骤都没有区别。