Согласно руководству sudoers :
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
example:
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
reinforced by policy).
Вот почему ваша политика sudoers не работает.
Если вы хотите запретить пользователю получать права root и изменить свой пароль, попробуйте следующую процедуру:
Предполагая, что ваши sudoers содержит эту директиву:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Предполагая, что ваше имя пользователя foo, его группы fooи sudo. groupsвывод команды:
foo sudo
Удалить пользователя fooиз sudoгруппы: gpasswd -d foo sudoпосле этого пользователь fooне может запускать команды с помощью sudo.
Отредактируйте файл sudoers. Используйте эту команду:
sudo visudo -f /etc/sudoers.d/foo
Определите fooразрешение пользователя , например:
foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
Это означает, что пользователь fooможет выполнять любые команды в каталоге, /usr/bin/кроме passwdи suкоманды. Примечание. Если пользователь fooхочет изменить свой пароль, можно выполнить passwdкоманду без sudo.
Еще один пример fooразрешения пользователя :
foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
Это означает, что пользователь fooможет выполнять любые команды в каталоге /usr/bin/и может изменять любой пароль, кроме root, на ВСЕХ машинах.
Вы можете определить группы команд путем определения Cmnd_Aliasesи создания «уровней разрешений». Вы можете найти полезные примеры в разделе ПРИМЕР руководства по sudoers , и здесь есть полезная ссылка о том, как использовать sudoers.