• ベストアンサー

suと一般ユーザの判別

こんにちは、よろしくお願いします! 一連の処理をシェルで記述しているのですが、 本シェルを"su"の権限である場合のみ実行させたいと考えています。 (つまり一般ユーザ権限では実行できないようにしたいのです) シェル内で、なにかしらの判定を行い、 suなら処理続行、一般ユーザなら処理中断・・・ のようにしていきたいのですが、 何か良い方法はありませんでしょうか? なお、シェル内で"su"を実行し、 強制的にsuにする方法も検討しましたが、 su状態においても、さらにsuがきいてしまうようで、 失敗しました。 よろしくお願いします。

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

  • ベストアンサー
  • dedenn
  • ベストアンサー率54% (6/11)
回答No.3

こんなんでいけると思いますが。 #################################################### if whoami | grep "^"$USER > /dev/null 2>&1 then echo "ROOTゆーざは駄目" exit 1 fi 実際のコマンド~~~~~~ #####################################################

foelinux
質問者

お礼

whoamiというコマンドがあったのですね! 確かに確認したところ、これが使えそうです。 ありがとうございました!

その他の回答 (4)

  • maguro999
  • ベストアンサー率21% (59/273)
回答No.5

>本シェルを"su"の権限である場合のみ実行させたいと考えています。 suとはユーザ切り替えのコマンドで別にrootになるため専用のコマンドでは ありません。

foelinux
質問者

お礼

なるほど、普段rootになるためしか使っていませんでした。 勉強になりました、ありがとうございます。

  • dedenn
  • ベストアンサー率54% (6/11)
回答No.4

あ。下のはROOTなら駄目!! って処理ですが、まぁ一緒ですね。 応用してください♪

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

whoamiしてrootかどうか判断するとか・・・

foelinux
質問者

お礼

この方法が使いやすそうですね。 皆さんの回答をもとにシェルを作成してみます。 ありがとうございます!

noname#98978
noname#98978
回答No.1

>つまり一般ユーザ権限では実行できないようにしたいのです chown root.root chmod 700

foelinux
質問者

補足

すいません、質問の仕方が悪かったようです。 おっしゃられているように、 シェル自体のアクセス権限を変更してしまえば問題はないのですが、 今回は、ファイルそのものはフルアクセスを付与するつもりです。 シェルの内容ですが、シェル内でrpmを実行する仕組みになっているのですが、 rpmはsu権限がないと実行することができません。 ですから、su権限でシェルを実行して欲しい、という考えがあります。 どのみち一般ユーザで実行すれば、rpm呼び出し時にこけるのは分かっていますが、 できればrpmを呼び出す前に、suかどうか判断して、 suでなければ、"suになってから実行してください"のようなエラーメッセージとともに、シェルの実行を中断したいと思っています。 申し訳ありませんが、よろしくお願いします。

関連するQ&A

  • su できません

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

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

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

  • 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 お願いします。

  • suになるためのシェルについて

    ハードウェアクロックを変更するためのシェルを作成して いるのですが上手く動いてくれないのでご教授下さい。 【仕様】 ・web上からシステムクロックを変更できるcgiがある ・システムクロック変更をサーバ側で受信するとシステム クロック変更のコマンドをsystem変数で行う ・これと同時にハードウェアクロックの変更を行いたい (システムクロック = ハードウェアクロックにしたい) 【現状】 ・root権限でログインできないためsuに変更する必要が あるがそのためのシェルスクリプトが上手く動かない (suユーザのパスワードを聞かれる) ・sudoを試してみたが同じくsuユーザのパスワードを聞 かれる。 ・Expectスクリプトは使ってはいけない… 以上です。乱文失礼しましたがよろしくお願いします。

  • Linuxの一般ユーザからrootユーザへのスイッチの方法と設定箇所

    お世話になっております。 Linuxの一般ユーザとrootユーザについて質問があります。 よく外部からアクセスさせる際にrootの権限は与えずに、 ユーザ権限を配布してsuでrootにスイッチする方法があるかと思います。 今回外部からアクセスさせる予定があるのですが、サーバの設定方法が分かりません。 どなたか分かる方がいらっしゃいましたらお教え頂けますでしょうか。 よろしくお願いいたします。

  • suアカウント

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

  • WindowsXPの一般ユーザーについて

    WindowsXPProを使っています。 とあるアプリケーションだけ一般ユーザーで随時管理者権限で実行したいのですが、やり方がわかりません。 WindowsVistaはファイルのプロパティの互換性の箇所に管理者として個のプログラムを実行するという設定があるのですが、WindowsXPはどのようにすれば管理者権限で随時一般ユーザーがプログラムを実行することが出来るでしょうか? ご存知の方、ご教授下さい。

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

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

  • Bシェルにてユーザの実行可否

    シェルにてrootユーザのみ実行が出来るようにしたいと思い、以下のようなシェルを書きました。 が、root以外のユーザでも実行が可能となってしまっています。実行する上でシェル、またはシェル以外で影響はあるのでしょうか?ご存知でしたらご教授願います。 ※今回はユーザID:user1で作成+実行しています。 ※このシェルのアクセス権限は"-rwxr--r--"としています。 #!/bin/sh UID=`whoami` if [ $UID -ne root ] then echo "実行はrootのみ" fi -以降、その他の処理が続く-

  • 一般ユーザーからrootにできない

    vine linux4.2でサーバーを立てているのですが、少々問題が起こりました。 一部のユーザー(hoge)だけがrootになれるよう以下のように設定をしました。 /etc/login.defs SU_WHEEL_ONLY yes /etc/group wheel:x:10:root,hoge /etc/pam.d/su auth required /lib/security/pam_wheel.xo use_uidの#を削除しております。 ある一定の期間までは、この状態で $su - と入力してrootのパスワードを入力すると一般のユーザからrootにすることができました。 ですが、数カ月たってから、 $su - と入力してrootのパスワードを入力すると su: パスワードが違います と出ます。 secureのログを見ると以下の内容が出ます。 (1)はroot から hogeへ 成功 (2)はhoge から rootへ 失敗 (1)Apr 3 14:07:54 sv su: pam_unix(su:session): session opened for user hoge by root(uid=0) (2)Apr 3 14:07:59 sv su: pam_unix(su:auth): authentication failure; logname=root uid=500 euid=500 tty=pts/0 ruser=hoge rhost= user=root また、再起動をしてrootで入ることは可能です。 rootから #su - hoge と入力して hoge に入ることも可能ですが、 逆の場合が不可能です。 以下の方法は何も設定せずにやってみました 一般ユーザーから一般ユーザーへの移動も パスワードが違います とでます。 何か解決策はございませんでしょうか。 今の状態ですと、Tera Termを使ってSSHでの接続は可能ですが、rootになれないためユーザーの追加などがサーバーで操作しなければならない状態です。 よろしくお願いします。