Linux でプロセスの環境変数を確認する

以前、PostgreSQL のパスワードを 環境変数で設定する記事を書きましたが PostgreSQL 的には非推奨のようです。
(一部のオペレーティングシステムではroot以外のユーザで環境変数が見える場合がるためとのこと)

[参考]
環境変数 - PostgreSQL 9.3.2文書

一部のオペレーティングシステムがどれを指すのかわかりませんが、 プロセスが使ってる環境変数の見方が気になったので ちょっと確認してみました。

まず環境変数を設定します。

$ export PGPASSWORD=testpassword

PostgreSQL のデータベースに接続するプロセスを作成します。

$ psql -U testuser -d testdb

psql (9.3.10, server 9.3.12)
Type "help" for help.

testdb=#

[Ctrl]+[z] プロセスを眠らせます。

[1]+  Stopped   psql -U testuser -d testdb

起動中のプロセスを確認します。

$ ps

  PID TTY          TIME CMD
28796 pts/0    00:00:00 bash
29754 pts/0    00:00:00 psql
29834 pts/0    00:00:00 ps

参考サイトによると、環境変数は「/proc/%{PID}/environ」に 格納されているそうです。

[参考]
Linux/Unixプロセス起動時の環境変数をダンプする | ギークを目指して

確認してみます。

$ cat /proc/29754/environ | sed -e 's/\x0/\n/g' | grep PGPASSWORD

PGPASSWORD=testpassword

たしかに確認できました。

使用している環境では root ユーザでなければ 自分以外の環境変数は見れませんでしたが、 自分の環境変数を(rootの権限が使えれば、他のプロセスの環境変数も)確認したいこともあると思うので 覚えておくと良いのかもしれません。

Google サイト内検索

Amazonアソシエイト