SU(スイッチユーザー)後にログインユーザ名をコマンド取得する

投稿者:しんさん        2016/03/19

SU後にログインユーザのユーザ名を取得したい

UNIX系のOSを使用する際、頻繁に別のユーザにsuする機会があります。

自身のユーザ名であればwhoamiコマンドで取得することができますが、

  • ログイン時に使用したユーザ名を使用したい

というケースも存在します。

例えば、SUしている状態で

  • ログインユーザの権限を使用して他のサーバへscp/ssh等を実施したい。
  • ログファイル名や作業用のディレクリ名に使用したい。
  • コピーしたログファイル等をログインユーザの権限で取得できるようにchownしたい

といったケースがこれに該当します。

これを実現するための方法の一つとして、who -mコマンドを使用する方法がシンプルです。


[user@testsv0 ~]$ who -m
user pts/2 Feb 22 17:44 (48.66.32.222)
[user@testsv0 ~]$ who -m |awk '{print $1}'
user
[user@testsv0 ~]$ ssh `who -m |awk '{print $1}'`@testsv1

■SUした後でもログインユーザ名を取得する事ができる

[user@testsv0 ~]$ sudo su - root
[root@testsv ~]# who -m
user pts/2 2016-02-22 17:44 (48.66.32.222)
[root@testsv ~]# who -m |awk '{print $1}'
user
[root@testsv ~]# ssh `who -m |awk '{print $1}'`@testsv1

scriptコマンド実行時の制約

ただし、上記のwho -mコマンドを使用した方法が使用できないケースがあります。

それが、

  • AIXにてscriptコマンド実行後にSUした場合

です。


user@testsv3[/prustaff/user]>script script.log
script コマンドを開始します。 ファイルは script.log です。
user@testsv3[/prustaff/user]>who -m
user pts/22
user@testsv3[/prustaff/user]>sudo su -
[root@testsv3 ~]# who -m
root pts/22

上記の例でも、who -mの結果がrootユーザになっています。

※私が検証した限りでは、Linuxではログインユーザー名を取得できました。

AIXかつscript実行化でもなんとかしてログインユーザー名を取得したい

このように、AIXにてscriptコマンドを実行して実行ログを取っている時でも、scriptコマンドを発行したユーザがログインユーザであれば、ログインユーザ名を取得する方法があります

それが、

  • ttyのオーナー情報から取得する

という方法です。


■スクリプトコマンド実行中のためwho -mではログインユーザ名が取得できない
[root@testsv3 ~]# who -m
root pts/22

■一方でttyコマンドの結果表示されるttyはscriptコマンド発行時のユーザになる
[root@testsv3 ~]# tty
/dev/pts/22
[root@testsv3 ~]# ls -l /dev/pts/22
crw--w--w- 1 user staff 19, 22 Feb 22 17:58 /dev/pts/22

■awkで整形して、ユーザ名だけを切り出して利用できる
[root@testsv3 ~]# ls -l $(tty)|awk '{print $3}'
user
[root@testsv3 ~]# ssh `ls -l $(tty)|awk '{print $3}'`@testsv1

注意点

scriptコマンドがログインユーザ以外で発行された場合には、上記ttyを使用した手法はとれませんのでご注意ください。

scriptを誰が発行して取得したものなのか
が後でわかりやすくするためにも、suする前にscriptコマンドを発行するのが良いでしょう。scriptで取得した実行ログ自体のファイルがログインユーザーのIDとなっていた方が後で何かあった場合のトレーサビリティが高いためです。

この記事が気に入ったら
いいね ! しよう

Twitter で

 - サーバー運用 , ,