PHPでwebサーバー(apache/nginx)の実行ユーザー・グループを確認する方法

標準関数でのサンプルコード
実行ユーザー・グループ関連の標準関数
サーバ変数や環境変数で取得する方法
execコマンドで取得する方法
標準関数でのサンプルコード

実行ユーザー

posix_getpwuid(posix_geteuid())['name']

実行ユーザーのグループ

posix_getgrgid(posix_getegid())['name']

posix_geteuid()とposix_getegid()で実行ユーザーのユーザーID、グループIDを取得します。
posix_getpwuid()とposix_getgrgid()でIDから該当のユーザー情報、グループ情報を取得します。

posix_getpwuid()の戻り値は次のようになります。

Array
(
    [name]    => tom
    [passwd]  => x
    [uid]     => 10000
    [gid]     => 42
    [gecos]   => "tom,,,"
    [dir]     => "/home/tom"
    [shell]   => "/bin/bash"
)

posix_getgrgid()の戻り値は次のようになります。

Array
(
    [name]    => toons
    [passwd]  => x
    [members] => Array
        (
            [0] => tom
            [1] => jerry
        )
    [gid]     => 42
)

このうち連想配列のnameを指定することでユーザー・グループを取得することができます。

実行ユーザー・グループ関連の標準関数

ユーザーIDを返す関数はposix_geteuid()とposix_getuid()、グループIDを返す関数はposix_getegid()とposix_getgid()があります。

またユーザーIDを変更する関数はposix_seteuid()とposix_setuid()、グループIDを変更する関数はposix_setegid()とposix_setgid()があります。

posix_geteuid - 現在のプロセスの有効なユーザー ID を返す
posix_getuid - 現在のプロセスの実際のユーザー ID を返す

posix_getegid - 現在のプロセスの有効なグループ ID を返す
posix_getgid - 現在のプロセスの実際のグループ ID を返す

posix_seteuid - 現在のプロセスの実効 UID を設定する
posix_setuid - 現在のプロセスの UID を設定する

posix_setegid - 現在のプロセスの実効 GID を設定する
posix_setgid - 現在のプロセスの GID を設定する

posix_geteuid、posix_getegidは処理を実行するUID、GIDを返し、ファイルの作成などはこの権限になります。
posix_getuid、posix_getgidは権限変更(su)の元となるUID、GIDを返します。

posix_seteuidではposix_geteuidのみ、posix_setuidではposix_geteuidとposix_getuidが変更されます。
posix_setegidではposix_getegidのみ、posix_setgidではposix_getegidとposix_getgidが変更されます。

サーバ変数や環境変数で取得する方法

サーバ変数や環境変数で実行ユーザー・グループを得ることができる場合があります。

$_SERVER['USER']
$_SERVER['GROUP']
$_ENV['APACHE_RUN_USER']
$_ENV['APACHE_RUN_GROUP']

これらはWeb版・CLI版、Webアプリケーション、PHPのバージョンによって変わるためあまり使わない方が良いです。

execコマンドで取得する方法

execコマンドでLinuxコマンドを実行することで実行ユーザー・グループを得ることができます。

exec('whoami')
exec('groups ' . exec('whoami'))

Windows版ではコマンドが違ったり、戻り値が違うためコマンドを切り替える必要があります。

またphp.iniのdisable_functionsでexecの使用を制限されていることがあります。
execが使用できない場合は次のようなエラーが出ます。

Warning: exec() has been disabled for security reasons

disable_functionsの有効な値は次のコードで確認できます。

ini_get('disable_functions')

関連記事

スポンサーリンク

VirtualBox Interfaceが起動していてシャットダウンができないとき

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る