su
не дает специальных полномочий root. Так что препятствовать тому, чтобы кто-то с полномочиями root использовал его, бессмысленно. sudo
только с помощью visudo
: создайте новый файл sudo
для дополнения оригинала и поместите его в /etc/sudoers.d /
. !
: «бла бла бла \! Бла бла»
или 'бла бла бла! бла бла '
. Одиночные кавычки остановят все вычисления строки. Я считаю, что это не поможет вам запретить пользователю с привилегией sudo
выполнить команду su
, потому что любой пользователь с правами sudo
может скопировать su
из каталога по умолчанию, а затем выполнить его, как всегда, вы не можете предоставить пользователю полную привилегию sudo
, тогда не позволяйте ему делать определенные вещи, потому что он всегда найдет способ обойти ограничение, вы должны сделать это наоборот, дать ему некоторую привилегию.
[Пожалуйста, внимательно прочитайте комментарии, сопровождающие ваш вопрос, так как, похоже, вы не все делаете правильно с sudo
]
В bash
есть механизм под названием "подстановка истории", который включается в командной строке. Он позволяет вам вставить всю или часть предыдущей команды (отсюда и "история") в редактируемую команду.
Символ, запускающий подстановку истории, - !
. Например, !WORD
заменяется последней командой, начинающейся с WORD
. Если такой команды нет, bash
выдаст сообщение об ошибке, которое вы получили: bash: !WORD: событие не найдено
.
Если вам нужно набрать !
без активации механизма подстановки истории, вы должны либо экранировать его \!
или заключить его в одинарные кавычки '!'
.
Например: echo 'Пользователь ALL = NOPASSWD: ALL, !/bin/su' | ...
Если расширение истории не дает вам покоя, вы также можете отключить его с помощью set +H
, набирать команды без кавычек !
, и снова включить его позже с помощью set -H
.