找出运行 Apache 的用户身份?

259 apache-2.2

我想保护我的服务器上的文件上传目录,如此处所述,但在按照这些说明进行操作之前我遇到了一个问题。我不知道 Apache 正在以什么用户身份运行。

我发现了一个建议,你可以在 httpd.conf 中查看,并且会有一个“用户”行,但是我的 httpd.conf 文件中没有这样的行,所以我猜 Apache 作为默认用户运行。不过,我不知道那是什么。

所以,我的问题是(是):

  • 我如何找出默认用户是什么
  • 我需要更改默认用户吗
  • 如果答案是肯定的,并且我通过编辑 httpd.conf 更改了默认用户,是否可能会搞砸任何事情?

谢谢!

gru*_*ech 273

ps aux | egrep '(apache|httpd)' 通常会显示 apache 正在运行的内容。

通常您不需要更改默认用户,“nobody”或“apache”通常是很好的用户。只要它不是“根”;)

编辑:用于捕获 apache 二进制文件的更准确的命令

  • 是的,否则它将是 Ubuntu 上的 www-data。 (54认同)
  • ...和 ​​Debian。:) (11认同)
  • 该命令向我显示了一个列表,其中大部分来自 `apache`,但也有 1 个来自 `root`。 (10认同)
  • @zundi,该服务以 root 身份启动,以便执行绑定到保留端口(例如 80 和 443)之类的操作。然后,无论配置的进程数量是多少,它都会以定义的用户身份启动 Web 服务器工作和任何其他任务。这样请求由非特权进程处理。您会注意到所有其他进程的父 ID (PPID) 是相同的。这个想法是作为 root 运行的那个进程的 PID。 (7认同)
  • 我有 3 个进程(`/usr/sbin/apache2 -k start`),一个用户是 `root`,另外两个是 `www-data`。我应该担心吗? (4认同)
  • 该解决方案很好,只需注意它还会列出“root”和运行此命令的用户。为了避免这种情况,您可以将“ | grep -v `whoami` | grep -v root”添加到此命令,就像下面回答的 nowthatsamatt 一样。 (3认同)

小智 59

您可以尝试以下命令:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

  • 您几乎隐藏了“root”用户的行,这意味着如果 apache 以 root 身份运行,那么它不会显示任何内容。对于当前登录的用户来说也是如此。 (4认同)
  • 我喜欢这个答案,比最受欢迎的答案更好(更通用)。谢谢 (2认同)

小智 41

使用apachectl -S,它将显示 Apache 用户和组的内容,如下所示:

User: name="_www" id=70
Group: name="_www" id=70
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,因为它是一个命令,可以告诉您更多有关正在运行的 Web 服务器的信息,并以全面的方式呈现它。 (4认同)
  • 谢谢,在我的 Mac 上,我看到 apache 正在以“_www”运行。 (2认同)

Kev*_*vin 14

根据ubuntuforums.org,在 Ubuntu 上 apache2 的默认用户是www-data.

在 Ubuntu 13.10 Saucy 上似乎是正确的。


来自上述论坛的Lars Noodén

要确定 [用户] 的实际设置,请检查实际的配置文件。伞文件,apache2.conf将有如下内容,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Run Code Online (Sandbox Code Playgroud)

这是对 中设置的环境变量的引用/etc/apache2/envvarsmod_suexec还允许脚本作为不同的用户和组运行。

要查找可能使用备用用户、组或两者的任何虚拟主机,请检查配置。

$ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
Run Code Online (Sandbox Code Playgroud)

对于基于 Red Hat 的发行版,它将是(通常它运行 httpd 的用户是apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)


小智 12

我知道这是一个旧帖子,但它仍然被列为未答复,所以我会提出建议。如果您找不到运行 Apache 的用户或组,请尝试打开 httpd.conf 文件。“用户”和“组”应该有一个条目。您不仅可以看到 Apache 应该以哪个用户身份运行,而且您可以在需要时更改它。


小智 10

您可以在 PHP 脚本中包含一行代码:

echo exec('whoami');
Run Code Online (Sandbox Code Playgroud)

  • 注意这里,这显示了运行 PHP 的用户,而不是 Apache 用户。如果使用 mod_php,它们是相同的,但如果现在很常见,您使用的是其他东西(如 php_fpm),它们很容易不同。 (8认同)

小智 5

此代码将或多或少地按字母顺序列出运行包含apache(或名称包含apache)的进程的所有非 root 用户

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq
Run Code Online (Sandbox Code Playgroud)