Я просто хотел сказать следующее:
1. В механизме sudo существует механизм исключения (списка) команд из доступных
2. Однако вариант "разрешить все, кроме" не работает по причине того, что изменение списка sudoers возможно произвести кучей разных способов (а не только выполнением команды visudo). Это дает возможность разрешить себе выполнение и "запрещенной" команды.
Соответственно, наилучший метод - это давать разрешение только на требуемый список команд (следя при этом за тем, чтобы при помощи этих команд нельзя было бы изменить список sudoers).
Есть, впрочем, еще один вариант - установить на все файлы в папке /etc/sudoers.d/ , на папку /etc/sudoers.d и на файл /etc/sudoers атрибут "i", запретив нужной группе/пользователю предварительно выполнение команды /usr/bin/chattr
Но это нужно проверять - возможно и в этом случае найдется способ "обхода" этого запрета.
Пользователь решил продолжить мысль 08 Июля 2015, 15:28:49:
А вообще, стоит, видимо, поверить написанному в man sudoers
Limitations of the ‘!’ operator
It is generally not effective to “subtract” commands from ALL using the
‘!’ operator. A user can trivially circumvent this by copying the
desired command to a different name and then executing that. For exam‐
ple:
bill ALL = ALL, !SU, !SHELLS
Doesn't really prevent bill from running the commands listed in SU or
SHELLS since he can simply copy those commands to a different name, or
use a shell escape from an editor or other program. Therefore, these
kind of restrictions should be considered advisory at best (and rein‐
forced by policy).
In general, if a user has sudo ALL there is nothing to prevent them from
creating their own program that gives them a root shell (or making their
own copy of a shell) regardless of any ‘!’ elements in the user specifi‐
cation.