我想建立一个基于php的网站,在我的Ubuntu服务器上(自动化)一些命令
我做的第一件事是转到文件(sudoers)并添加用户www-data,这样我就可以用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);
?>
它只返回一个用户(最后一个用户)!如何让它返回所有用户?
谢谢
发布于 2018-07-26 06:41:57
正如@benjamin解释的那样,不需要root或sudo,也不需要SUID。
就是纯PHP。我使用了posix_getpwnam中的字段名。
function getUsers() {
$result = [];
/** @see http://php.net/manual/en/function.posix-getpwnam.php */
$keys = ['name', 'passwd', 'uid', 'gid', 'gecos', 'dir', 'shell'];
$handle = fopen('/etc/passwd', 'r');
if(!$handle){
throw new \RuntimeException("failed to open /etc/passwd for reading! ".print_r(error_get_last(),true));
}
while ( ($values = fgetcsv($handle, 1000, ':')) !== false ) {
$result[] = array_combine($keys, $values);
}
fclose($handle);
return $result;
}
它返回一个包含所有用户的数组,格式如下:
[
[
'name' => 'root',
'passwd' => 'x',
'uid' => '0',
'gid' => '0',
'gecos' => 'root',
'dir' => '/root',
'shell' => '/bin/bash',
],
[
'name' => 'daemon',
'passwd' => 'x',
'uid' => '1',
'gid' => '1',
'gecos' => 'daemon',
'dir' => '/usr/sbin',
'shell' => '/usr/sbin/nologin',
],
...
]
发布于 2010-05-23 07:43:59
就像Matt S说的,在你的服务器上允许www-data root访问是一个非常糟糕的主意。通过您的web应用程序进行的最轻微的妥协都可能允许任何人完全控制您的系统。
一个更好的想法是为特定的访问创建单独的脚本,然后使用SUID权限。这意味着,特定用户(在本例中为www-data)可以通过执行脚本对系统进行很小的更改。不过,这仍然不是一个好主意。您也许能够使用suPHP解决这个问题,但安全性仍然是一个主要问题。
发布于 2010-05-23 08:21:08
/etc/passwd对任何人都是可读的,因此您应该能够在没有任何特殊权限的情况下执行您的命令(除非PHP阻止它?)。
https://stackoverflow.com/questions/2889995
复制相似问题