私は、ユーザーグループがdhcpcdサービスインスタンスに対するいくつかの制御を持つことを許可したいと思います。つまり、私は彼らが次を実行したいと思います:
systemctl (start,stop,...) [email protected]
パスワードを求めるプロンプトは表示されませんが、次の場合にのみ[Eメール保護]。これを行う方法を見つけましたが、各サブコマンドをその行にリストする必要があります。
%mygroup ALL=NOPASSWD: /usr/bin/systemctl start [email protected], /usr/bin/systemctl stop [email protected], ...
よりエレガントな方法はありますか?
答え1
Sudoersワイルドカードはワイルドカード文字(man glob
、man fnmatch
)のみをサポートします。ただし、、、、などのコマンドはファイルでstart
はないため、ワイルドカードを使用できません。stop
restart
systemctl
セキュリティの観点からすべてのコマンドを列挙する必要があるのは良いことです。システム更新[email protected]
などのコマンドを使用して更新する場合、shutdown-machine
sudoユーザーはそれを使用できません(幸いにも)。
sudoersのマニュアルにはこれに関するメモがあります。
Wildcards in command line arguments should be used with care.
Command line arguments are matched as a single, concatenated string. This mean a wildcard character such as ‘?’ or
‘*’ will match across word boundaries, which may be unexpected. For example, while a sudoers entry like:
%operator ALL = /bin/cat /var/log/messages*
will allow command like:
$ sudo cat /var/log/messages.1
It will also allow:
$ sudo cat /var/log/messages /etc/shadow
which is probably not what was intended. In most cases it is better to do command line processing outside of the
sudoers file in a scripting language.
一方、入力時間を節約するには、マニュアルで推奨されているとおりに正確に実行できます。それはスクリプト言語を使うことです。たとえば、次のように書くことができます/usr/local/sbin/sudoers-dhcpd.sh
。
#!/bin/sh
case "$1" in
start)
systemctl start [email protected]
;;
stop)
systemctl stop [email protected]
;;
restart)
systemctl restart [email protected]
;;
*)
echo You are not allowed to do that!
;;
esac
次のようにsudoers行を追加します。
%mygroup ALL=NOPASSWD: /usr/local/sbin/sudoers-dhcpd.sh