我在以下文件中定义了/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/*
第二行中的垃圾每次运行时都会发生变化。可能是什么问题?
PS:我了解路径遍历并对其进行了修复,但让我们保持这个例子简单一些。
答案1
如果 sudoers 文件被包含两次,就会发生这种情况,如果 /etc/sudoers 包含两行具有相同含义的文件,就会发生这种情况,例如:
@includedir /etc/sudoers.d
#includedir /etc/sudoers.d
现在,/etc/sudoers.d/ 中的所有文件都将被读取两次,并会引起上述警告。