webサーバー

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実行結果

※確認したら、必ずサーバーから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_USERAPACHE_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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。