系统相关
首页 > 系统相关> > php shell_exec触摸重定向和adduser

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