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

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

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

我试图在与 相同的服务器上运行相同的脚本root,模拟www-data。它没有,甚至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

该帐户确实已被锁定,无法交互式登录(这是正常的):

# 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应该也能做同样的事情。怎么做呢?

答案1

尝试

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

由于 www-data 没有 shell,因此您必须使用该-s选项指定一个。

相关内容