我希望按照此处的详细说明保护服务器上文件上传目录的安全,但是在遵循这些说明之前,我遇到了一个问题。我不知道Apache以什么用户身份运行。
我发现您可以在httpd.conf中查找一条建议,并且会有一个“用户”行,但是在我的httpd.conf文件中没有这样的行,因此我想Apache正在以默认用户身份运行。不过,我不知道那是什么。
因此,我的问题是:
- 我如何找出默认用户是
- 我需要更改默认用户吗
- 如果答案是肯定的,并且我通过编辑httpd.conf更改了默认用户,是否有可能搞砸了?
谢谢!
我希望按照此处的详细说明保护服务器上文件上传目录的安全,但是在遵循这些说明之前,我遇到了一个问题。我不知道Apache以什么用户身份运行。
我发现您可以在httpd.conf中查找一条建议,并且会有一个“用户”行,但是在我的httpd.conf文件中没有这样的行,因此我想Apache正在以默认用户身份运行。不过,我不知道那是什么。
因此,我的问题是:
谢谢!
Answers:
ps aux | egrep '(apache|httpd)'
通常会显示apache的运行方式。
通常,您不需要更改默认用户,“ nobody”或“ apache”通常是好的用户。只要它不是“根”;)
编辑:更准确的命令来捕获apache二进制文件
apache
1,root
也有1 。
/usr/sbin/apache2 -k start
),一个用户是root
,其他两个www-data
。我应该担心吗?
您可以尝试以下命令:
ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
根据ubuntuforums.org,在Ubuntu上apache2的默认用户是www-data
。
在Ubuntu 13.10 Saucy上似乎是正确的。
来自上述论坛的LarsNoodén。
为了确定[用户]的实际设置,请检查实际的配置文件。伞形文件
apache2.conf
将具有以下内容,User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP}
这是对中设置的环境变量的引用
/etc/apache2/envvars
。mod_suexec
还允许脚本以其他用户和组身份运行。要查找可能使用备用用户和/或组的虚拟主机,请检查配置。
$ 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
此代码将或多或少按字母顺序列出运行包含apache
(或名称包含apache
)的进程的所有非root用户
ps aux | grep -v root | grep apache | cut -d\ -f1 | sort | uniq
ps aux | grep apache
在其运行时使用即可。注意:这是我在Stackoverflow上给出的相同答案。
正如Noyo 在这里建议的那样:
APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')
接着:
echo $APACHE_USER
至少对于基于Debian / Ubuntu的发行版,一种替代方法是使用Apache设置用户和组的相同方法:source/etc/apache2/envvars
!
$ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")"
www-data
如果想花哨的话,可以在找不到文件的情况下抑制错误,并提供默认值:
$ apacheuser = $( 源/ fail / etc / apache2 / envvars 2> / dev / null && 回声“ $ APACHE_RUN_GROUP” || 没有人回声 ) $ echo“ $ apacheuser” 没有人
我发现这里提供的大多数解决方案都是特定于系统或配置的(特别是,大多数解决方案根本无法在MacOS上使用),还有一些依赖于用户才知道Apache的配置文件在哪里。 。
所以我作弊了一下,让Apache自己告诉我什么。
简单的命令apachectl -S
将告诉您有关正在运行的Apache实例的知识,并且可以很容易地解析其结果。这是我的解决方案,在一些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
我在CakePHP docs中找到了此命令。
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
现在HTTPDUSER
保存运行服务器的用户的用户名,echo $HTTPDUSER
在我的情况下,www-data
使用rlerdorf / php7dev输出。
使用lsof并传递apache作为参数进行监听。请参阅“用户”列,以了解用户设备的运行方式。
# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 21058 root 4u IPv6 74730 0t0 TCP *:http (LISTEN)
httpd 21111 www-data 4u IPv6 74730 0t0 TCP *:http (LISTEN)
httpd 24915 www-data 4u IPv6 74730 0t0 TCP *:http (LISTEN)