スクリプトで sed を使用するユーザーに対する sudo アクセス権を取り消す必要があります。
行に/ bin / suが含まれている場合にのみ、ユーザーにコメントを付けたいと思います。 - root
最初の行にのみコメントを付ける必要がある次のファイルを考えてみましょう。
mindadmin ALL = NOPASSWD: /bin/su - root
mindadmin ALL = NOPASSWD: /bin/ifconfig
私が使用したコマンドはsed
次のとおりです。
sed -e 's/minadmin[\s]+ALL[\s]+=[\s]+NOPASSWD:[\s]+/bin/su - root/#mindadmin ALL = NOPASSWD: /bin/su - root/g' /etc/sudoers
しかし、うまくいきません。文法的なエラーがありますか?
答え1
2つの問題があります。最初のものはsudoers
hasmindadmin
とmode minadmin
(nothing d
)です。
2番目の問題は、/
sの/bin/su
正規表現で次をエスケープする必要があることです。
sed -e 's/mindadmin[\s]+ALL[\s]+=[\s]+NOPASSWD:[\s]+\/bin\/su - root/#mindadmin ALL = NOPASSWD: \/bin\/su - root/g' /etc/sudoers
それ以外の場合、パターンは終了します。
代わりに別の区切り文字を選択することもできます。/
ファイルにその区切り文字が表示されない限り、エスケープする必要はありません。
答え2
sed '/\/bin\/su - root/ s/^/#/' filename
ファイル名に含まれる行を見つけ、行の先頭/bin/su - root
にコメント(#)(^)を追加します。
ファイルに影響を与えるようにsedにオプションを追加します-i
。
答え3
/bin/su - root
行末を含むすべての行をコメントアウトするには、sed式を単純化するだけです。
sed 's/.*\/bin\/su - root$/#&/'
またはもっと簡単に
sed 's,.*/bin/su - root$,#&,'
/bin/su - root
包含行のすべての行をコメントアウトするには、次のようにします。
sed 's,.*/bin/su - root,#&,'
答え4
&
一致するパターン全体が置き換えられるため、別の回避策は次のとおりです。
sed -i 's,.*/bin/su\s\+-\s+root,#&,' /etc/sudoers
/
別の区切り文字に置き換えられるので、エスケープする必要はありません。 suコマンドの後の間隔が異なる場合でも、このモードはより柔軟です。
最小値のみ変更する場合D管理者ユーザー:
sed -i 's,^mindadmin\s.*/bin/su\s+-\+root,#&,' /etc/sudoers
フラグ -i は変更をファイルに直接適用します。