标签:shell-exec php file-io
我试图最终使用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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。