首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让PHP列出所有Linux用户?

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

Stack Overflow用户
提问于 2010-05-23 06:26:18
回答 3查看 5.9K关注 0票数 2

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

我做的第一件事是转到文件(sudoers)并添加用户www-data,这样我就可以用root权限执行php命令了!

代码语言:javascript
复制
# running the web apps with root power!!!
www-data    ALL=(ALL) NOPASSWD: ALL

然后我的PHP代码是

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

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

谢谢

EN

回答 3

Stack Overflow用户

发布于 2018-07-26 06:41:57

正如@benjamin解释的那样,不需要root或sudo,也不需要SUID。

就是纯PHP。我使用了posix_getpwnam中的字段名。

代码语言:javascript
复制
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;
}

它返回一个包含所有用户的数组,格式如下:

代码语言:javascript
复制
[
  [
    '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',
  ],
  ...
]
票数 2
EN

Stack Overflow用户

发布于 2010-05-23 07:43:59

就像Matt S说的,在你的服务器上允许www-data root访问是一个非常糟糕的主意。通过您的web应用程序进行的最轻微的妥协都可能允许任何人完全控制您的系统。

一个更好的想法是为特定的访问创建单独的脚本,然后使用SUID权限。这意味着,特定用户(在本例中为www-data)可以通过执行脚本对系统进行很小的更改。不过,这仍然不是一个好主意。您也许能够使用suPHP解决这个问题,但安全性仍然是一个主要问题。

票数 1
EN

Stack Overflow用户

发布于 2010-05-23 08:21:08

/etc/passwd对任何人都是可读的,因此您应该能够在没有任何特殊权限的情况下执行您的命令(除非PHP阻止它?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2889995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档