webサーバーの実行ユーザーをPHPで確認する方法
更新日:2023/08/28
apacheやnginxなどのwebサーバーは、webサイトに外部からアクセスされると、専用のユーザーを割り振ります。
サーバーの設定ファイルを見れば、そのユーザーを知ることができますが、設定ファイルの名前と場所を覚えられません( ;∀;)
(この記事でメモしておきます)
そこでPHPでプログラムを組んでおいて、サーバーにアップロードするだけで調査できるようにしました。
自分でサーバーを構築したときはあまり使いませんが、レンタルサーバーなどで重宝しています。
実行中のユーザー名とグループを表示するPHP
phpの関数にユーザー名やグループを取得するものがあるのですが、ここではexecでシェルコマンドを実行しています。
user-check.php
<?php
$user = exec('whoami');
$group = exec('groups ' .$user);
echo "ユーザー:{$user}<br>";
echo "グループ:{$group}<br>";
メモ帳などでPHPファイルを作成して、FTPで転送するか、次のコマンドで直接作成します。
$ echo '<?php $user = exec("whoami");$group = exec("groups " .$user);echo "user:{$user}<br>";echo "group:{$group}<br>"; ?>' > user-check.php
作成したファイルをブラウザから呼び出します。
URL例:http(https)://ドメイン/設置したフォルダ/user-check.php
実行結果例
ユーザー:kkkk グループ:kkkk : members kkk
※確認したら、必ずサーバーからuser-check.phpを削除しておきましょう。
apacheの設定ファイルを確認する方法
apacheで、設定ファイルからユーザーとグループを確認する場合、次のファイルを参照します。
Redhat系:CentOSなど
/etc/httpd/conf/httpd.conf
Debian系:Ubuntuなど
/etc/apache2/apache2.conf
このファイルの中に、「User」と「Group」というディレクティブがあるので、確認します。
Redhat系:
$grep -v '^\s*#' /etc/httpd/conf/httpd.conf | grep -E 'User|Group'
User apache
Group apache
上の例では、ユーザ名がapache、グループ名がapacheということがわかります。
Debian系:
$grep -v '^\s*#' /etc/apache2/apache2.conf | grep -E 'User|Group'
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
${XXX}は、XXXという名前の環境変数を参照を意味しています。
Debian系は環境変数を参照するようです。
環境変数はenvというコマンドで一覧表示できるのですが、APACHE_RUN_USERとAPACHE_RUN_GROUPは表示されませんでした。
/etc/apache2/apache2.confを見ると、次のように書いてありました。
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
#行の意味は、『これらは/etc/ apache2/ envvarsに設定する必要があります』です。
/etc/apache2/envvarsを見ると、次のような記述がありました。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
たぶんこれが、設定内容なので、ユーザ名がwww-data、グループ名がwww-dataということがわかります。
ちなみに、ユーザーについては次のコマンドで確認できます。
$ ps aux | grep apache
最初に表示される文字列がユーザー名です。
結果
apache 25607 0.0 0.7 562312 13608 ? S 8月13 0:00 /usr/sbin/httpd -DFOREGROUND
上のように表示されたら、apacheがユーザー名です。
Nginxの設定ファイルを確認する方法
Nginxは、/etc/nginx/nginx.confを確認します。
2,3行目に次のように記述されていました。
user nginx nginx;
この場合、ユーザー「nginx」、グループで「nginx」で実行されています。
ちなみに、ユーザーについては次のコマンドで確認できます。
$ ps aux |grep nginx |grep -v grep
root 23647 0.0 0.0 136916 744 ? Ss 8月02 0:00 nginx: master process /usr/sbin/nginx
nginx 23648 0.0 0.4 142400 4520 ? S 8月02 0:53 nginx: worker process
実はNginxはmasterとworkerというプロセスが走っていて、masterがroot、workerが設定したユーザになっています。
Webの処理はワーカーが処理するので、ブラウザからのアクセスは上の例ではnginxユーザーとなります。
更新日:2023/08/28
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。