明らかに、sudo
そのような場合には私にとって最初の選択でしょう。主なポイントは、ほとんどの(実際の)管理者が実際に使用していないということであるように思われる/etc/sudoers
最大限可能な範囲(へUser_Alias
、Runas_Alias
、Host_Alias
、Cmnd_Alias
)。
ほとんどの管理者は、既存のルールの一部のみを使用してユーザーを追加するか、さらに悪いことに、sudo
Ubuntuセットアップで通常ルールが存在するグループにユーザーを追加するだけ%sudo
です(...)。もちろん、これはそれぞれのユーザーに自由な統治とスーパーユーザーアカウントのフルパワーを与えます。
あなたのコメントを考える:
に追加しました /etc/sudoers
私もあなたが可能な範囲でそれを使用しないと思います。
あなたのようなシナリオでは、ボブが制限されるいくつかのアクションを文字通りスクリプト化します。実際、これは、2人の特定のユーザーがホスト上の特定のKVMゲストをリブートできるようにするために、私が管理しているサーバーで行ったことです。スクリプトには、インタプリタへの絶対パス(例:#!/bin/dash
ではなく#!/usr/bin/env bash
)を含むハッシュバングが含まれ、おそらく特権タスク(/bin/dash
または/bin/sh
)で他の場所で使用されるシェルで実行されます。これらは単なる予防措置です。それ以外は、バイナリへのすべての絶対パスをハードコードし、可能な限り少数を使用するようにします。たとえば、bash
/ dash
を使用する場合は、builtin
sよりもsを優先しcommand
ます(を参照man bash
)。変数に絶対パスを割り当て、その変数に基づいてプログラムを参照することにより、これを維持可能にできます($VIRSH
の代わりに/usr/bin/virsh
)。可能であれば、外部スクリプトを呼び出す前に、外部スクリプトのコードを調べてください。特に特権コンテキストでそれらを呼び出す必要がある場合。私の場合、ユーザーは特定のルートディレクトリと特定のSSHサブシステムに限定され、ユーザーはsshd
公開キー認証を介してのみマシンに接続します。明らかにそれは必要ありません。
適切なchown root: <the-script>; chmod u=rw,a=,a+rx <the-script>
人以外root
はいじくり回さないようにしてください。また、に注意してくださいsetuid
とsetgid
のビットは、(ターゲットのバイナリで有効になってfind
、それらを見つけるために使用することができます)。しばらくの間、スクリプトがにあると仮定しましょう/usr/sbin/priv-action
。
次に、を編集します/etc/sudoers
。noexec
明示的に許可されているバイナリ以外のバイナリを防ぐためにも使用できます。ここで説明している設定だけでなく、実際には追加の設定がたくさんあります。必ず相談してくださいman sudoers
。
ファイルにユーザー(User_Alias
)の名前を付けるsudoers
ようになりましたが、Group_Alias
(man sudoers
)または実際のシステムグループ(例%sudo
)を使用することもできます。
# The list is comma-separated: bob,alice,...
User_Alias LIMITED_ADMINS=bob
次に、コマンドエイリアスを追加して、その特定のスクリプトの実行を許可します。
# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias PRIV_ACTION=/usr/sbin/priv-action
最後になりましたが、スクリプトを介して特権コマンドを実行できるようにするための魔法の行bob
(またはむしろの下にリストされているユーザーLIMITED_ADMINS
)があります。
LIMITED_ADMINS ALL=(root) PRIV_ACTION
以前のエイリアス定義とは異なり、その行には説明が必要です。それでは、最初に「ユーザー仕様」行の意味の部分を掘り下げましょう。ここにman sudoers
役立ちます:
ユーザー仕様の基本構造はwho where = (as_whom) what
です。
例の行(ほとんどのUbuntuセットアップにあります):
root ALL=(ALL) ALL
これは、(UIDに結び付けるために使用される)という名前 のユーザーは、すべてのホスト上で任意のユーザーコンテキストで実行できますが、パスワードの入力を求められます(デフォルトの動作を想定)。最後のタグの前にタグを追加すると、パスワードを要求されることなく同じことを行うことができます(次のように)。は、さまざまなエイリアスタイプの固有のワイルドカードエイリアスです。root
#0
0
NOPASSWD
ALL
root
root ALL=(ALL) NOPASSWD:ALL
ALL
しかし、ボブに戻って:
LIMITED_ADMINS ALL=(root) PRIV_ACTION
で指定されたコマンドをユーザー(グループが暗示されますが、与えられる可能性があります、参照)として(bob
およびUser_Alias LIMITED_ADMINS
すべてのホストで)の実行を許可します。それは良くなります。このスクリプトを記述することを前提として、さまざまなパラメーターを許可することにより、複数のスクリプトを記述することを回避できます。シェルのようなワイルドカードを喜んで使用して、渡される引数の可能性を制限します。ALL
root
man sudoers
Cmnd_Alias PRIV_ACTION
/etc/sudoers
私は一貫して、管理者がその使用sudoers
方法を使用しないことを発見しました。それが、私が始めた2冊の書籍「Linux Server Hacks」と「Linux Server Hacks Volume Two」のそれぞれの「Hack」を高く評価した理由ですこの素晴らしい施設のより洗練された使用。
あらゆる種類の複雑なものを思い付くことができます-これはセキュリティの面で正確には役に立たないかもしれません-あなたの特定の場合の解決策ですが、あなたの基本的な語彙を話すと、/etc/sudoers
かなり魔法の偉業を実行できます:)
注:気が向いた/etc/sudoers.d/
場合は、下に新しいファイルを作成することもできます。これは、次/etc/sudoers
の行が含まれていることを前提としています。
#includedir /etc/sudoers.d