whoamiコマンドは現在のユーザを確認するコマンドになります。
つまり、コマンドはそのまま'Who am I?'(私は誰?)を意味するコマンドになります。
whoamiコマンドの利用例
現在のユーザを確認
whoamiコマンドは現在のユーザを確認するコマンドになります。例えば、ubuntuというユーザで実行すると'ubuntu'のようにユーザ名を表示します。
コマンド例
1 |
whoami |
実行結果
1 |
ubuntu |
また、whoamiコマンドは実際には実効ユーザIDで想定される名前を表示します。なので、ルート権限で実行した場合は、rootと表示されます。
コマンド例
1 |
sudo whoami |
実行結果
1 |
root |
whoamiと等価なコマンド
whoamiコマンドは'id -un'と等価なコマンドになります。
コマンド例
1 |
id -un |
実行結果
1 |
ubuntu |
(おまけ)whoamiプログラムで自分以外のユーザを表示してみる
chmodコマンドでプログラムに対して、SUIDビット(set-user-ID bit)という特別なアクセス権限を付与すると、そのプログラムの所有者の実効ユーザでプログラムを動作させることができます。
これを利用して、whoamiプログラムで自分以外のユーザの名前を表示します。
例えば、whoamiプログラムをカレントディレクトリにコピーし、chownコマンドで所有者情報をrootにし、chmodコマンドでSUIDビットを付与したwhoamiプログラムを用意します。
1 2 3 4 5 |
$cp $(which whoami) whoami $sudo chown root:root ./whoami $sudo chmod u+s ./whoami $ls -l whoami -rwsr-xr-x 1 root root 138560 2月 9 09:26 whoami |
これで、自分以外のユーザを表示するwhoamiプログラムができます。以下は通常のwhoamiプログラムとコピーしたwhoamiプログラムの実行結果になります。
コマンド例と実行結果
1 2 3 4 |
$whoami ubuntu $./whoami root |
このような方法で、SUIDビットの動作で実効ユーザが変更される様子を確認することができます。
もっと詳しい動作については、whoamiコマンドで呼び出されるseteuid関数が参考になるかもしれません。
1 2 3 4 |
#include <sys/types.h> #include <unistd.h> int seteuid(uid_t euid); |
seteuid関数は、manコマンドでも確認することができます。
1 2 3 4 |
$whatis seteuid seteuid (2) - set effective user or group ID $ $man seteuid |