我运行了一个小脚本,通过PHP启用pw更改。我知道安全可能是个问题,但这不是当前的问题。
#!/bin/sh
echo "############### pw.sh "`date` $1 $2 "##################" >> /cronscripts/cronpw.log
echo "user_$1:$2!" >> /cronscripts/cronpw.log
echo "user_$1:$2" | chpasswd
这个脚本运行良好
- 当直接呼叫时/pw.sh 5001 pw
当使用来自同一目录的小型php-Script调用时
<?php echo exec("/cronscripts/pw.sh 5001 'boris'"); ?>
但是,当从根crontab运行的cronjob使用相同的exec命令调用时,它不起作用。
Cron调用脚本:
#!/bin/sh
cd /var/www/vhosts/xxx/httpdocs/cronskripte/
echo "###############" `date` "##################" >> /cronscripts/cronuseradd.log
php5 cron_useradd.php >> /cronscripts/cronuseradd.log
useradd.php包含:
echo exec("whoami"); ==> root
echo exec("/cronscripts/pw.sh $login '$password'");
奇怪的是,cronpw.log显示的内容与前两个方法调用时相同,但不会更改pw。有什么想法吗?
解决方案添加chpasswd的完整路径:
echo "user_$1:$2" | /usr/sbin/chpasswd
一般来说,要进一步研究PHP的shell执行问题,请使用:
exec("$command $arg1 $arg2 $arg3 2>&1", $output);
var_dump($output);