php shell_exec触摸重定向和adduser
作者:互联网
我试图最终使用php的shell_exec函数创建新的Linux用户.但是,即使进行调试,我也遇到了问题.这是我的代码
<?PHP
function adduser($username,$password,$server){
try{
//3 debug statements
$output=shell_exec("pwd");
echo $output;
shell_exec("touch test.txt");
//3 debug statements are requested by Christian
echo '<pre>';
print_r(execute('pwd'));
print_r(execute('touch test.txt'));
//actuall code
$output=shell_exec("ssh root@$server \"adduser $username; echo $password | passwd $username --stdin\"");
}
catch(Exception $e){
echo 'could not add user '.$e->getMessage();
}
}
$servers = array('192.168.1.8');
foreach($servers as $server){
echo $_GET['USER']." ".$_GET['PASSWORD'];
adduser($_GET['USER'],$_GET['PASSWORD'],$server);
}
try-catch语句没有做任何事情,这使我相信shell错误不会像PHP错误一样传播(Python也是如此). $output = shell_exec(“ pwd”)行返回正确的目录.但是,shell_exec(“ touch test.txt”)行无法创建文件test.txt(即使我给出了完整路径’/home/user/…/test.txt’).
不用说,添加用户的实际代码也不起作用.
编辑我设法修复了一些代码.触摸test.txt错误是由于权限不足导致的. Apache使用用户www-data登录,我只是为该用户创建了一个主文件夹,并确保触摸该主文件夹中的文件.
但是,按照克里斯蒂安的要求添加了三个调试语句,现在引起了问题.
编辑经过进一步检查,这与以用户www-data登录时无法以root身份ssh有关. ssh -v返回debug1:read_passphrase:无法打开/ dev / tty:没有这样的设备或地址.我的猜测是ssh要求泛型“您想将xxx永久添加到known_hosts”,但我无法响应.无论如何,是否有手动将用户添加到已知主机列表?
解决方法:
> PHP的许多内部函数(大多数?)不会引发异常,它们会引发错误.我认为您不会看到shell_exec()引发异常
>我可能会使用var_dump()返回值,只是为了确保您清楚地知道返回了什么.
>我也建议您研究escapeshellarg()之类的函数,以避免输入出现问题.
通常,我没有编写PHP顺序执行几个命令的方法,而是编写了一个执行我需要的一切的shell脚本,然后从PHP调用它.调试时,链中的链接减少了一个,而我发现要容易得多.
关于您的SSH命令本身,由于apache以www-data的身份执行,它如何以root身份登录到有问题的计算机中?您是否已将apache用户的密钥添加到远程计算机.
标签:shell-exec,php,file-io 来源: https://codeday.me/bug/20191011/1893821.html