Shell脚本更改php-cronjob调用的具有奇怪行为的密码


Shell script to change password called by php cronjob with strange behavior

我运行了一个小脚本,通过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

这个脚本运行良好

  1. 当直接呼叫时/pw.sh 5001 pw
  2. 当使用来自同一目录的小型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);