找出Apache正在运行的用户?

我想在我的服务器上保护一个file upload目录,如上所述,但我有一个问题,然后才能按照这些说明。 我不知道Apache运行的是什么用户。

我发现了一个build议,你可以在httpd.conf中查看,并且会有一个“User”行,但是我的httpd.conf文件中没有这样的行,所以我猜Apache是​​以默认用户身份运行的。 但是我找不到那是什么。

所以,我的问题是:

  • 我如何知道默认用户是什么?
  • 我是否需要更改默认用户?
  • 如果答案是肯定的,我通过编辑httpd.conf来更改默认用户,是否有可能把任何东西搞砸?

谢谢!

ps aux | egrep '(apache|httpd)' ps aux | egrep '(apache|httpd)'通常会显示apache运行的是什么。

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

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

你可以尝试下面的命令:

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

我知道这是一个旧post,但仍然列为未答复,所以我会提出一个build议。 如果您无法find正在运行Apache的用户或组,则可以尝试打开httpd.conf文件。 应该有一个“用户”和“组”的入口。 您不仅可以看到Apache应该运行哪个用户,但是如果您觉得需要这样做,则可以更改它。

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

 echo exec('whoami'); 

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

在Ubuntu 13.10 Saucy看来是真的。


来自上述论坛的LarsNoodén 。

为了确定[用户]真的设置了什么,请检查实际的configuration文件。 伞文件apache2.conf将具有如下内容,

 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} 

这是对/etc/apache2/envvars设置的环境variables的引用。 mod_suexec也允许脚本作为一个不同的用户和组运行。

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

 $ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf 

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

 $ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf 

这段代码将或多或less地按照字母顺序列出所有运行包含apache进程的非root用户(或者其名称包含apache

 ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq 
  • 要找出用户,可以简单地使用ps aux | grep apache 运行时ps aux | grep apache
  • 您不需要,但是如果Apache以root身份运行,则存在安全问题。
  • 第三,改变Apache的用户将改变他访问某些目录的权利。 您需要确保/ var / www(或您拥有网站的任何位置)可供新用户和组访问。
  • 在我看过的系统中,apache总是使用apache:apache(或类似的)作为用户和组来安装,所以它应该已经被设置成这样了。


注意:这是我给了Stackoverflow的相同的答案。

或者你可以检查Apacheconfiguration文件,并寻找所有者和组。

正如Noyo所build议的那样:

 APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}') 

接着:

 echo $APACHE_USER 

使用apachectl -S ,会显示一些apache的用户和组,就像这样

 User: name="_www" id=70 Group: name="_www" id=70 

至less在基于Debian / Ubuntu的发行版中,另一种方法是使用与Apache相同的方法设置其用户和组: source /etc/apache2/envvars

 $ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")" www-data 

如果你想得到花哨,你可以抑制错误,如果没有find文件,并提供一个默认值:

 $ apacheuser = $(
     源/失败/ etc / apache2 / envvars 2> / dev / null &&
     回声“$ APACHE_RUN_GROUP”||
     没有人回应  
 )
 $ echo“$ apacheuser”
没有人

我在CakePHP文档中find了这个命令。

 HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` 

现在, HTTPDUSER保存运行服务器的用户的用户名,在我的情况下输出www-data -using rlerdorf / php7dev来回显$ HTTPDUSER 。

我发现这里提供的大多数解决scheme都是针对系统或configuration的(特别是大多数解决scheme在MacOS上根本无法使用),less数依赖于用户知道Apacheconfiguration文件放在哪里。 ..

所以我欺骗一下,让Apache自己告诉我是什么。

简单的命令apachctl -S会告诉你你需要知道一个正在运行的Apache实例,并且它的结果可以很容易地被parsing。 这里是我的解决scheme,我使用几个bash脚本的顶部来确定在任何给定的时间我可能需要的各种东西…

 # Store the results so we don't have to keep calling apachetl... astatus=`apachectl -S` # Now grab whatever you want from the result... HTTPD_ROOT_DIR=$(expr "`echo "$astatus" | grep ServerRoot`" : ".*\"\(.*\)\".*") HTTPD_DOC_DIR=$(expr "`echo "$astatus" | grep \"Main DocumentRoot\" `" : ".*\"\(.*\)\".*") HTTPD_USER=$(expr "`echo "$astatus" | grep \"User:.*name=\" `" : ".*\"\(.*\)\".*") HTTPD_GROUP=$(expr "`echo "$astatus" | grep \"Group:.*name=\" `" : ".*\"\(.*\)\".*") 

这些值就可以这样使用:

 echo $HTTPD_ROOT_DIR // /etc/httpd echo $HTTPD_DOC_DIR // /var/www echo $HTTPD_USER // www-data echo $HTTPD_GROUP // www-data 

首先找出xampp的用户。 要做到这一点通过xampp执行此行

echo exec('whoami');

然后你必须编辑visudo。 要做到这一点,只需写

sudo visudo

然后它会打开visudo你必须让sudo访问这个特定的用户。

在这里input图像说明

deamon是我的用户名,所以找出你的是什么,并replace该字段的用户名。