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 A
sudo 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
私はこれが古いことを知っていますが、これが置き換えられ、ユーザーがアクセスできないファイルがあるとしましょうecho
。C
ユーザーをsudoersに追加すると、次のことが可能になります。
# Cmnd alias specification
Cmnd_Alias ECHO_CMD=cat A *,cat B *
その後、次を実行してファイルCにアクセスできます。
sudo echo A C
Cはワイルドカード構文に正しく従うためです。私はこれがsudoコマンドでワイルドカードを使用するとセキュリティが脆弱であるという良い例だと思います。私はこの使い方に非常に注意を払い、ワイルドカードが持つことができるすべての可能なバリエーションを検討します!