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つのワイルドカードのみが必要です。

おすすめ記事