我想在我的服务器上保护一个file upload目录,如上所述,但我有一个问题,然后才能按照这些说明。 我不知道Apache运行的是什么用户。
我发现了一个build议,你可以在httpd.conf中查看,并且会有一个“User”行,但是我的httpd.conf文件中没有这样的行,所以我猜Apache是以默认用户身份运行的。 但是我找不到那是什么。
所以,我的问题是:
谢谢!
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总是使用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该字段的用户名。