web-dev-qa-db-ja.com

Apacheが実行しているユーザーを見つけるには?

ここで美しく説明されているように、サーバー上のファイルアップロードディレクトリをセキュリティで保護したいのですが、これらの指示に従う前に、1つの問題があります。 Apacheがどのユーザーとして実行されているのかわかりません。

Httpd.confを見ると「User」という行があるという提案を見つけましたが、私のhttpd.confファイルにはそのような行がないため、Apacheがデフォルトのユーザーとして実行されていると思います。それが何なのかわかりません。

だから、私の質問は(です):

  • デフォルトのユーザーを確認するにはどうすればよいですか
  • デフォルトのユーザーを変更する必要がありますか
  • 答えが「はい」で、httpd.confを編集してデフォルトのユーザーを変更した場合、何かが台無しになる可能性はありますか?

ありがとう!

230
Anna

ps aux | egrep '(Apache|httpd)'は通常、Apacheの実行方法を示します。

通常、デフォルトのユーザーを変更する必要はありません。「nobody」または「Apache」は通常、細かいユーザーです。 「ルート」でない限り;)

編集:Apacheバイナリをキャッチするためのより正確なコマンド

249
grufftech

次のコマンドを試すことができます。

ps -ef | egrep '(httpd|Apache2|Apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
44
nowthatsamatt

使用する apachectl -Sは、次のようなApacheユーザーとグループを表示します。

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

buntuforums.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
10
Kevin

これは古い投稿であることは知っていますが、それでも未回答として表示されているので、提案します。 Apacheを実行しているユーザーまたはグループが見つからない場合は、httpd.confファイルを開いてみてください。 「ユーザー」と「グループ」のエントリがあるはずです。 Apacheがどのユーザーとして実行されているかを確認できるだけでなく、必要に応じて変更することができます。

8
kainosnous

PHPスクリプトにコード行を含めることができます:

echo exec('whoami');
7
JG Estiot

このコードは、多かれ少なかれ、Apacheを含む(または名前にApacheを含む)プロセスを実行しているすべての非rootユーザーをアルファベット順にリストします

ps aux | grep -v root | grep Apache | cut -d\  -f1 | sort | uniq
5
user163193
  • ユーザーを見つけるには、単にps aux | grep Apache実行中。
  • 必要はありませんが、Apacheがrootとして実行されている場合、セキュリティの問題があります。
  • 第3に、Apacheのユーザーを変更すると、一部のディレクトリにアクセスするための権限が変更されます。新しいユーザーとグループが/ var/www(またはWebサイトがある場所)にアクセスできることを確認する必要があります。
  • 私が調べたシステムでは、Apacheは常にユーザーおよびグループとしてApache:apache(または同様のもの)を使用してインストールされていたため、おそらくすでにそのように設定されているはずです。

注:これは、私が Stackoverflow に対して出した答えと同じです。

4
Kjir

または、Apache構成ファイルを確認して、所有者とグループを探すこともできます。

2
AliGibbs

少なくともDebian/Ubuntuベースのディストリビューションの代替アプローチは、Apacheがユーザーとグループを設定するのと同じ方法を使用することですsource /etc/Apache2/envvars

$ echo "$(source /etc/Apache2/envvars && echo "$Apache_RUN_GROUP")"
www-data

凝ったものにしたい場合は、ファイルが見つからない場合のエラーを抑制し、デフォルト値を指定できます。

 $ apacheuser = $(
 source/fail/etc/Apache2/envvars 2>/dev/null && 
 echo "$ Apache_RUN_GROUP" || 
 echo nobody 
)
 $ echo "$ apacheuser" 
 nobody 
2
MestreLion

Noyoが示唆するように here

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

その後:

echo $Apache_USER
2
kenorb

ここで提供されているソリューションのほとんどはシステムまたは構成に固有であり(特に、ほとんどのソリューションは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
1
Mike Fahy

このコマンドは 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 $HTTPDUSERwww-data –using rlerdorf/php7dev を出力します。

0
Nabil Kadimi

Lsofを使用し、引数としてApacheがリッスンするポートを渡します。実行中のユーザーappacheについては、USER列を参照してください。

# 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)
0
David Okwii

これは私が今使っているものです:

apachectl -t -D DUMP_RUN_CFG 2>/dev/null |
sed -n '/^User/s/.*name="\([^"]*\)".*/\1/p'
0
ceving