Згідно з посібником із судорів :
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).
Ось чому ваша політика щодо судерів не працює.
Якщо ви хочете заборонити користувачеві отримати дозвіл root та змінити його пароль, спробуйте виконати цю процедуру:
Припустимо, що ваші судори містять цю директиву:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Якщо припустити ваше ім’я користувача foo, його групи є fooі sudo. groupsвихід команди:
foo sudo
Видалити користувача fooз sudoгрупи: gpasswd -d foo sudoпісля цього користувач fooне може виконувати жодну команду з sudo.
Редагуйте файл судорів. Використовуйте цю команду:
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та створивши "рівні дозволів". Корисні приклади ви можете знайти в розділі ПРИКЛАДУ посібника з судорів , і ось корисне посилання про те, як користуватися судорами.