Согласно руководству 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.