こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

別ユーザでのコマンド実行(root権限)のやり方を教えて下さい

現在、Solaris9でroot権限のコマンドを実行したいのですが、いちいちroot権限になってからコマンドを実行するのが面倒です。
ex)
aaaユーザでrebootを実行したい。
出来るならaaaユーザにはスーパーユーザのパスワードを教えたくない

一応、「sudo」というコマンドを使用すれば出来ると分かったのですが、現在の環境ではsudoコマンドはありませんでした。
別の方法で出来るかどうか教えて頂けないでしょうか。
すみませんが、回答よろしくお願いします。

環境:
OS:Solaris9

投稿日時 - 2004-09-23 13:57:58

QNo.1013408

doh

すぐに回答ほしいです

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

RBAC(ルバック)を使うとどうでしょう?

 通常はロールと呼ばれる特殊なユーザーにshutdownのようにrootの権限のなかから必要な権限だけを割り当てておいて、通常のユーザーからsuして特定のユーザーにrootの権限の一部のみを渡します。これが通常のRole-Based Access Control(RBAC)の使い方です。

 ただ、推奨されてはいませんが、RBACの仕様上、ユーザーに直接こういう限定された権限を直接渡すこともできます。

 推奨はロールをユーザーとして登録して、ユーザーでログイン後にこのロールにsuしてあとはそのまま作業をするという方法となります。それなりの権限を渡すので、それなりに敷居は高くて(手間はかかって)いいと思いますよ。このロールにsuするときのパスワードはこのロール個別に付けられますので、rootパスワードの漏洩無しにルートの機能を分散できるということです。

(以下は、ユーザーに直接「限定されたコマンド実行権」割り当てる手順です。(ファイルパーミッションなんかは自分で判断されてください)

1. /etc/security/exec_attrファイルに以下のエントリを追加する。

Shutdown User:suser:cmd:::/usr/sbin/shutdown

2. /etc/security/prof_attrファイルに以下のエントリを追加する。

Shutdown User:::Can Shutdown:auths=solaris.system.shutdown

3. /etc/user_attrファイルに以下のエントリを追加する。

aaa::::type=normal;profiles=Shutdown User,All

4. 念のため、以下のコマンドを実行してネームサービスキャッシュデーモンを再起動します。

# /etc/init.d/nscd stop
# /etc/init.d/nscd start

5. 当然ですが、ユーザーがログイン中でしたら、一度ログオフしてももらいましょう。

※私自身、ユーザーに直接ロールを割り当てることができることは知っていてもやったことはありません。もしかしたら、ユーザーaaaのシェルを該当するプロファイルシェルに変更する必要があるかもしれません。その場合は普通にusermod -sで変更してください。
(ロールをユーザーとして登録するときはそのロールに対して必須の設定です)

sh: /usr/bin/pfsh、csh: /usr/bin/pfcsh、ksh: /usr/bin/pfksh がそれぞれ対応するプロファイルシェルです。

 もし、NIS、NIS+ またはLDAPを使っている場合など多少話が変わってきます。詳しくは以下の文書を参照されてください。「役割によるアクセス制御(概要・手順・参照)」です。

参考URL:http://docs.sun.com/db/doc/817-2464/6mi4hi32l?l=ja#hic

投稿日時 - 2004-09-25 06:24:37

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

補足ばかりで申し訳ないのですが、usermodで-s pfshをやると、現在設定されているパスが通らなくなるかも。(っていうかたぶんそう)

なので、コマンド実行時に

# pfsh -c /usr/sbin/shutdown -g0 -i6 -y

したほうがいいでしょう。

 あと、できればrebootコマンドよりもshutdownコマンドのほうがいいでしょう。rebootするなら事前に

# sync;sync;sync

したほうがいいような気が...

投稿日時 - 2004-09-26 07:25:24

ANo.6

ごめんなさい。uidを指定するの忘れていた。

1. /etc/security/exec_attrファイルに以下のエントリを追加する。

Shutdown User:suser:cmd:::/usr/sbin/shutdown:uid=0


 それと使い方ですが、ユーザーaaaにPATHの指定をしていなければフルパスで指定しなければいけません。

/usr/sbin/shutdown -g0 -i6 -y

 もちろん、rebootコマンドを使うならそういう設定にすればOKです。

投稿日時 - 2004-09-25 14:51:55

ANo.4

sudoを導入すればいいのでは…。

<<Sudo>>
 http://www.courtesan.com/sudo/download.html

各FTPサイトのバイナリフォルダから
sudo-*-sun4+Solaris9.tar.gzを落として展開後
TODOに従って導入します。

投稿日時 - 2004-09-24 08:24:40

ANo.3

特定のコマンドだけ実行できればいいのであれば、Cで、rootにseteuid()してからそのコマンドをexeclp()等するプログラムを作ればできます。

#1さんの方法だと、コマンドによっては内部でrootじゃないと使えない機能を利用していたりするので使えません。rootのsetuidしたとしてもこんどは誰でも実行できてしまったりするので危険です。コマンドの実体がシェルスクリプトである場合はその方法も使えません。

まあ、原則論としては他の方のおっしゃるとおりおすすめできないのですが、たとえば社内のテスト用サーバなどセキュリティより利便性を求められる場合もたしかにありますから、とりあえず紹介しておきます。

投稿日時 - 2004-09-23 17:25:46

ANo.2

>いちいちroot権限になってからコマンドを実行するのが面倒です。

こういう考え方をするユーザにroot権限を与えるのはやめましょう。
人間セキュリティホールになる事間違いなしです。
内部の個人情報を平気で持ち出すタイプです。

投稿日時 - 2004-09-23 15:41:42

ANo.1

コマンドに一般ユーザに実行権限を与えるように
chmod
すればいいのでは
余計なお世話かと思いますが
しかし、そういうようなことは、面倒だからといってやるべきことではないと思います。
勝手に誰れもが、rebootできたら(自分が使っている時に勝手に再起動かけられたら)、イヤでしょう?

投稿日時 - 2004-09-23 15:01:37

あなたにオススメの質問