为什么Apache可以运行一个命令而root不能?

我有一个由Apache运行的服务器端脚本,以www-data运行。 远程调用时,脚本在服务器上运行正常( http://example.com/script.sh )。

我试图在同一台服务器上运行与root相同的脚本,模拟www-data 。 它不,即使是su www-data -c 'id' runuser -l www-data -c 'id' su www-data -c 'id'runuser -l www-data -c 'id'失败

 This account is currently not available. 2016 Nov 4 09:45:54 eu1 Attempted login by root on /dev/pts/0 

这个帐户确实被locking在交互式login(这是正常的):

 # grep www-data /etc/shadow www-data:*:15246:0:99999:7::: # grep www-data /etc/passwd www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin 

由于Apache设法运行一些www-data所以root应该能够做到这一点。 怎么做?

尝试

 su -s /bin/bash www-data -c 

由于www-data没有shell,所以必须使用-s选项指定一个。