• ベストアンサー

su前のユーザー名もしくはUIDを知るには?

SUを実行すると、環境変数がすべてSU後のユーザーのものになってしまいますし、確認するためのコマンドも存在しないようにみえます。 そのユーザーが元々誰であったかを知る方法があるかどうか皆様のお知恵を拝借させていただきたいです。 OSはRHEL4およびSLES9(SuSE)です。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.4

>SUを実行すると、環境変数がすべてSU後のユーザーのものになってしまいます 必ずしもそうとは言えないのでは? su - ならば切り替わりますが。 今回の本題では内容なので置いておいて… suで一般ユーザーになった後、さらにsuで……とかいうのはナシでよいのでしょうか? つまり、元々ログインしたユーザーを知りたい。ということで…。 ps auf | head -n 2 | tail -n 1 | awk '{print $1}' でどうでしょう? と、ここまで書いてから#3で指摘されているwhoコマンドを試してみました。 そちらの方が早そうですな。 # せっかく書いたのでこのまま投稿。

hachibay
質問者

お礼

ご回答ありがとうございます! Wr5さんからの回答からヒントを得て ps Tu | head -n 2 | tail -n 1 | awk '{print $1}' でできましたっ!! なんか深夜に無駄に一人で感動してしまいました. ありがとうございますっ!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4855/10270)
回答No.3

who でわかりませんか?

hachibay
質問者

お礼

申し訳ありません、「知る方法」というのに語弊があったかもしれません. 先ほどの回答へのリプライにも書きましたが、 PAMのバグ回避のために、suを実行してスイッチされたあとのユーザーの.profileの中で元のuidが何だったかを知りたいのです. whoではその時点でコンソールを開いているユーザーが表示されますよね? 確かにwhoコマンドを管理者がたたいて今ログインしているユーザーが誰かを管理者は「知る」ということはできますが... 実装したい内容を整理すると以下の通りです. 仮にuserというユーザーがいたとします. userでログイン後 su - test でtestというユーザーにスイッチ testというユーザーの.profileで、 今suしてきたユーザーはuserさんだけど、このuserさんがtestにsuしていいユーザーかどうかを判断するロジックを組みたいのです. あくまでPAM 0.77のバグ回避のためのロジックを考えています. まぁ、最悪PAMをソースからコンパイルして実装する手もありますが(笑)

全文を見る
すると、全ての回答が全文表示されます。
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

コンソールから、exit 又は [Ctrl] + D でsu する前のユーザー に戻れますが、それでは駄目ですか? #通常は、ログインユーザー自身がsuを実行すると思いますが? #それが誰か不明という状況が良く判りません。

hachibay
質問者

お礼

えっと、実はPAMのバグでpam_wheel.soを使用すると 一般ユーザー→root だけでなく 一般ユーザー→一般ユーザー の切り替えもできなくなってしまうのです。 これをどうにか避けるために、一般ユーザーからrootに切り替えたときに元のユーザーを見てそれがrootに切り替えていいユーザーかどうか判断したかったのです。 ちなみにRHEL5ではこのバグは直っていますが、RHEL4のバグフィックスではもう直す予定はないそうです。 SUのコマンドを入力した人が自分が誰だったかを知りたいわけではなく、管理者というか、.profileで判断したいというのが質問の意図です。言葉が足りず申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。
  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

直接じゃないんですが・・・。 historyファイル使って 誰が誰になって何のコマンド打った みたいなことを見たりしますね。

hachibay
質問者

お礼

ありがとうございます。 don_goさんへの回答への返答にも書きましたが、 .profileの中で、判断したいのでsuを実行直後に確認したいという意味でしたので、historyだとちょっとできないです。 誰がsuしてrootになったかを後で知りたいのであればログを見ればsuの実行履歴が残ってますので、それで十分なのですが・・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • su - soft

    まだ初心者ですが業務でsoralis8を使っています。 su - softでsoralis上で動くGUIアプリを起動することがあります。このコマンドを実行するとXサーバーを指定するDISPLAY環境変数が表示され、IPアドレスを打つと画面が立ち上がります。(Xクライアントに起動を指示している??) ここで質問なのですが、su - はユーザーを変えるコマンドだと認識しています。普通アプリケーションは立ち上がらないと思うのですが・・・??。 試しにsoftというユーザーは存在するようですが、ホームディレクトリ(/home/なにも無し)は見当たりませんでした。つまりホームディレクトリにある設定ファイルなどから起動されているようではないようです・・・。なぜ立ち上がる(Xクライアントに指示できる)のでしょうか? また、こういうことは一般的なのでしょうか? ご存知の方、ご教授お願いします。

  • su できません

    /etc/passwd内のrootのログインシェルを書き間違えてしまい,su時に su: No shellといわれてしまいます. 一般ユーザで ln コマンドを使用し,書き間違えたファイル名にして実行しようととしました. しかし,/sbin/ 内のファイルのため,一般ユーザでは書き込めません. また,su -s /sbin/sh としてもできませんでした. どのようにすれば su することができるのでしょうか. 使用しているOSはsoraris7です. なにとぞよろしくお願いします.

  • Windowsでsuコマンド

    ユーザのパスワードを知ることなくユーザの環境をセットアップ できないかなと考えています。 Unixでは 管理者はsuコマンドを使いユーザのパスワードを知らなくても ログインしてユーザの環境を利用することができます。 似たような機能として runasコマンドや 別のユーザとして実行 という 機能があるのですがパスワードが必要だし、ユーザの環境をセットアップ したい時には意味がありません。 どなたか知っていたら教えてください。 よろしくお願いします。

  • Linuxのsuコマンドについて

    「su」と「su - 」の違いは、実行環境(ホームディレクトリ)を引き継ぐ/引き継がない、コマンド制限がある/無いという違いがありますが、 「sudo su - 」と「su - 」はどんな違いがあるのでしょうか?

  • suアカウント

    android2.2端末でadb shell中からsuコマンドを実行すると  su: unknown id: root と表示されます。 rootアカウントがないわけは無いと思い、/etc/passwdを見ようと思いましたがファイル自体が存在しません。 タスクマネージャ上では「スーパーユーザーv3.0.7)」が動作している状況です。 root権限が必要なTitanium Backupを起動すると「root権限を取得できませんでした」と出ます。 (root権限を与えていいかのダイアログがでない) rootという名称でないアカウントがrootなのでしょうか? 何か確認方法があったら教えて下さい。

  • ログインするときにユーザー名がでない。

    ログインするときにユーザー名がでない。 ログインするときにユーザー名を選択すると思いますが、postgresという名のユーザー名が 選択できません。(他のユーザー名はちゃんと表示もされますし、選択もできます。) 端末からのコマンドでは「su - postgres」でユーザーを変更できますが、 GUIのデスクトップ環境で最初からpostgresユーザーでログインしたいと思っております。 どうかご教示お願い致します。 OSはfedora10 デスクトップ環境はGnome2.24.0です。

  • ユーザー権限でログインするとsuでもフルパスコマンド?

    root権限でifconfigとすると実行されますが、普通のユーザー権限で一旦suでroot権限になっても、ifconfigとすると -bash: ifconfig: command not foundとなります。 いちいち/sbin/ifconfigとしなければいけないので不便です。 コマンドごとにどのディレクトリにあるか知っていないと使えないし、whichコマンドも効かないので困っています。 何か良い方法はありますか? suにしてroot権限

  • suでバーナーを出なくする方法

    su - ユーザ名 -c コマンド名 をbshスクリプトから実行したら、必要の無い 「Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001」 のバーナーがでてしまいます。 /etc/motdで定義されているのは知っているのですが、ログイン時だけでsu時は出さなくする方法を教えて下さい。 ちなみにsuするユーザはcshがデフォルトです。

  • Linux  CentOS shellスクリプト内でユーザーをスイッチする方法教えて下さい。

    困っています。ご存知の方教えて下さい。 一般ユーザーでshellスクリプトを実行して、root権限にスイッチして、root権限のみに許されたコマンドを実行してから、 一般ユーザーに戻る方法がわかりません。 ターミナルで sudo su コマンドを実行すると、対話式でパスワードを入力できますが、スクリプト内で対話式のパスワードを入力してrootに ユーザーをスイッチする方法がわかりません。 ------------ !#/bin/sh mkdir /home/user1/tmp ←一般ユーザーで実行したいコマンド sudo su ←ここでパスーワード入力して rootに権限スイッチ mkdir /var/log/aaa   ←root権限で実行したいコマンド su user1 touch /home/user1/bbb ← 一般ユーザーに戻ってコマンド実行 ------------ 環境:CentOS5 お願いします。

  • ユーザー環境変数の一覧

    システム環境変数とログインしている環境変数それと、 存在する全てのユーザーに対する環境変数を取得するプログラムをC言語作成したいのですが、どうすればよいのでしょうか? OSはWindows2000です。 言語は問いません、VC++2005かC#かVB.NETのどれでも構いません。