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')
関連記事
- リクエストヘッダーやリクエストボディーなどを取得する方法
- 負荷が高いときには503エラーを返す方法
- サイトの更新情報をPINGサーバに送信する方法
- PHPでロードアベレージを表示させる方法
- PHPでTwitterのツイートをする/ツイート一覧を取得する/検索する(API v1.1)
- インクルードパスを設定する方法
- オブジェクト(Object)を配列(Array)に変換する方法
- PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法
- PHPでfacebook投稿時に公開範囲を指定する方法
- PHPで複数の画像をfacebookに投稿する方法
- PHPでfacebookのフィード(ウォール)に投稿する方法
- PHPでのfacebookアプリの認証処理(APIを使うユーザー認証)
- MySQL関数のまとめ
- MySQLサーバに接続できるかどうかを確認する
- ディレクトリ内のファイルのパーミッションを一括で変更する
- POSTでアップロードできるファイルサイズの制限を変更する方法
- 暗号化・複合化を行う ブロック暗号
- date型やdatetime型と年月日時分秒への変換
- 関数・メソッドの存在を調べる方法
- PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する(API v1)
- strtotimeの指定
- PHPでHTMLメールを送る方法
- ディレクトリセパレータを短く定義する DIRECTORY_SEPARATOR
- モザイク画像を作る方法
- HTML内のアクセス解析タグを除去する方法
- HTMLのTABLEタグを簡単にCSVファイルに変換する方法
- 画像表示のときに指定サイズにリサイズする(画像の拡大縮小)
- テキストを可逆的な暗号化する Crypt_Blowfish
- PHPでwhois検索をする Net_Whois
- よく使うヘッダー関数のまとめ
- キャリア・世代を判別する
- mb_send_mailでCCやBCCを指定する 表示名を指定する
- より高速に、推測困難な一意なIDを生成する方法
- 画像ファイルを指定容量ぎりぎりに圧縮する
- 指定したHTTPヘッダーが送信済みあるいは送信予定に含まれているか
- DOCUMENT ROOTを得る $_SERVER["DOCUMENT_ROOT"]は使えない!
- マルチバイト文字列(日本語文字)を一文字づつ取り出す
- ファイルを削除する/フォルダを削除する
- ファイルを読み込む/ファイルに書き込む
- ディレクトリ内のファイル一覧を取得する
- quoted-printable文字列の変換
スポンサーリンク