如何让PHP列出所有Linux用户?

我想build立一个基于php的网站(自动化)在我的Ubuntu服务器上的一些命令

我做的第一件事是去文件(sudoers),并添加用户万维网数据,所以我可以用root权限执行php命令!

# running the web apps with root power!!! www-data ALL=(ALL) NOPASSWD: ALL 

那么我的PHP代码是

 <?php $command = "cat /etc/passwd | cut -d\":\" -f1"; echo 'running the command: <b>'.$command."</b><br />"; echo exec($command); ?> 

它只返回一个用户(最后一个用户)! 如何使其返回所有用户?

谢谢

从exec的PHP手册:

返回值

最后一行来自命令的结果。 如果您需要执行一个命令并将命令中的所有数据直接传回,而不受任何干扰,请使用passthru()函数。 要获得执行的命令的输出,一定要设置和使用输出参数。

所以你必须做类似这样的事情:

 <?php $output = array(); $command = "cat /etc/passwd | cut -d\":\" -f1"; echo 'running the command: <b>'.$command."</b><br />"; exec($command, &$output); echo implode("<br />\n", $output); ?> 

像Matt S说的那样,在服务器上允许www-data root访问是非常糟糕的主意。 通过您的Web应用程序稍有妥协可能会允许任何人完全控制您的系统。

一个更好的主意是为特定的资源制作单独的脚本,然后使用SUID权限。 这意味着,一个特定的用户(在这种情况下,www数据)可以通过执行脚本对系统进行小的更改。 尽管如此,仍然不是一个好主意。 你可以用suPHP来解决它,但是安全性仍然是一个主要的问题。

/ etc / passwd可以被任何人读取,所以你应该能够执行你的命令,而不需要任何特殊的权限(除非PHP阻止它)。