私は次のファイルを定義しました/etc/sudoers.d/50-apps
Cmnd_Alias APPS=/usr/bin/systemctl start app-*, /usr/bin/systemctl stop app-*,\
/etc/init.d/app1, /etc/init.d/app2
Cmnd_Alias LOGS=/usr/bin/less /var/log/*, /bin/tail -f /var/log/*, /bin/tail /var/log/*,\
/bin/ls /var/log/*
%developers ALL= NOPASSWD: SETENV: APPS, LOGS
%testers ALL= NOPASSWD: SETENV: LOGS
ファイルは期待どおりに動作し、 によって検証されvisudo
、不要なコマンドをブロックします。ただし、sudo を使用してコマンドを実行するたびに、コマンドの実際の出力の前に次のメッセージが表示されます。
john@appserver1:~$ sudo ls /var/log/mysql
/etc/sudoers.d/50-apps:2:51: Alias "" already defined
/etc/init.d/app1, /etc/init.d/app2
^
/etc/sudoers.d/50-apps:5:40: Alias "�h6�U" already defined
/bin/ls /var/log/*
2 行目のゴミは実行するたびに変わります。何が問題なのでしょうか?
PS パス トラバーサルについては知っており、修正も加えましたが、この例は単純なままにしておきましょう。
答え1
これは、sudoers ファイルが 2 回含まれている場合に発生する可能性があります。これは、/etc/sudoers に次のような同じ意味を持つ 2 つの行が含まれている場合に発生する可能性があります。
@includedir /etc/sudoers.d
#includedir /etc/sudoers.d
これで、/etc/sudoers.d/ 内のすべてのファイルが 2 回読み取られ、上記の警告が発生します。