ここで美しく説明されているように、サーバー上のファイルアップロードディレクトリをセキュリティで保護したいのですが、これらの指示に従う前に、1つの問題があります。 Apacheがどのユーザーとして実行されているのかわかりません。
Httpd.confを見ると「User」という行があるという提案を見つけましたが、私のhttpd.confファイルにはそのような行がないため、Apacheがデフォルトのユーザーとして実行されていると思います。それが何なのかわかりません。
だから、私の質問は(です):
ありがとう!
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}'
使用する apachectl -S
は、次のようなApacheユーザーとグループを表示します。
User: name="_www" id=70
Group: name="_www" id=70
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
これは古い投稿であることは知っていますが、それでも未回答として表示されているので、提案します。 Apacheを実行しているユーザーまたはグループが見つからない場合は、httpd.confファイルを開いてみてください。 「ユーザー」と「グループ」のエントリがあるはずです。 Apacheがどのユーザーとして実行されているかを確認できるだけでなく、必要に応じて変更することができます。
PHPスクリプトにコード行を含めることができます:
echo exec('whoami');
このコードは、多かれ少なかれ、Apache
を含む(または名前にApache
を含む)プロセスを実行しているすべての非rootユーザーをアルファベット順にリストします
ps aux | grep -v root | grep Apache | cut -d\ -f1 | sort | uniq
ps aux | grep Apache
実行中。注:これは、私が Stackoverflow に対して出した答えと同じです。
または、Apache構成ファイルを確認して、所有者とグループを探すこともできます。
少なくとも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
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
ここで提供されているソリューションのほとんどはシステムまたは構成に固有であり(特に、ほとんどのソリューションは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
–using rlerdorf/php7dev を出力します。
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)
これは私が今使っているものです:
apachectl -t -D DUMP_RUN_CFG 2>/dev/null |
sed -n '/^User/s/.*name="\([^"]*\)".*/\1/p'