sudoersでCmnd_Aliasでコマンドパラメータを使用する方法は?

sudoersでCmnd_Aliasでコマンドパラメータを使用する方法は?

sudoersでコマンドパラメータを指定するには?背景として、awsこのコマンドは実際にサブシステム全体のゲートウェイなので、ユーザーだけが実行できるように制限したいと思います。aws s3 cp ...any other args...

以下を試してみると/etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

残念ながら、シェルはパスワードを求めるメッセージを表示します

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

Cmnd_Aliasからコマンドパラメータを削除すると、必要に応じて進行しますが(パスワードプロンプトなし)、認証が広すぎます。それでは、特定のタイプのコマンド呼び出しのみを制限する正しい方法は何ですか?

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

それから

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

ありがとうございます。

答え1

ワイルドカードを使用しませんでしたが、2つのパラメータを提供しました。したがってsudo、書き込みとまったく同じコマンドを探します(パスの検索を除く)(man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

次のようにしてみてください。

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

気づく:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

したがって、コマンドごとに1つのワイルドカードのみが必要です。

答え2

@muruと同じですが、完全な作業例を望む人のために:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

代わりに別のコマンドにすることができます/sbin/cmd1/sbin/cmd2

目的は、必要な暗号文ではなく暗号文を要求することをECHO_CMD示し、これらの簡単な実験で自信を得られるようにすることです。sudo echo X Asudo echo A X

(エコーがあると仮定して/bin/echoシステムの位置を確認しようとしますwhereis echo

答え3

sudoerに正規表現を使用することもできます。

これによりパスワードなしで実行できますが、/usr/bin/apt update upgrade and auto-remove.deb名を指定してもapt installパスワードの入力を求められます。

Cmnd_Alias UPDATES = /usr/bin/apt (update|upgrade|auto-remove)
%sudo ALL=(ALL:ALL) NOPASSWD: UPDATES
%sudo ALL=(ALL:ALL) ALL

答え4

cat私はこれが古いことを知っていますが、これが置き換えられ、ユーザーがアクセスできないファイルがあるとしましょうechoCユーザーをsudoersに追加すると、次のことが可能になります。

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=cat A *,cat B *

その後、次を実行してファイルCにアクセスできます。

sudo echo A C

Cはワイルドカード構文に正しく従うためです。私はこれがsudoコマンドでワイルドカードを使用するとセキュリティが脆弱であるという良い例だと思います。私はこの使い方に非常に注意を払い、ワイルドカードが持つことができるすべての可能なバリエーションを検討します!

関連情報