Я хочу заблокировать всех, кто запускает su без опции входа.
Они могут запускать su - <user> , su -l <user> , su --login <user> . Но su <user> будет заблокирован.
Как этого добиться?
Вы можете написать скрипт, который проверяет аргументы CLI и передает их в su . Если параметры - , -l или --login не указаны, пользователь выведет предупреждение об использовании этих параметров.
*** Обратите внимание, это не будет "блокировать" их использование su поскольку они могут вызывать двоичный файл напрямую.
Пример сценария su.sh :
#!/bin/bash
### script to prompt at su
### counter variable
CNT=0
### evaluate all the CLI arguments passed to "su" and check if the login is specified (also let `-V` version argument work)
for arg in $@
do
if [[ $arg == - || $arg == -l || $arg == --login || $1 == -V ]]; then
### increment counter if login argument is found
CNT=$((CNT+1))
fi
done
### check if login argument is given
if [[ $CNT -ge 1 ]]; then
/usr/bin/su $@
else
echo -e '*** Please use "-", "-l" or "--login" with the "su" command ***'
exit 2
fi
Вместо этого сделайте для этого скрипта псевдоним в файле .bashrc вашего пользователя, например, псевдоним su=/usr/bin/su.sh Таким образом, каждый раз, когда вы вызываете date, этот скрипт запускается, и он сообщает вам, что вы установили флаг команды set date, и запрашивает подтверждение.
Вы также можете избежать использования псевдонима, просто заменив команду su , как показано ниже, но также измените имя двоичного файла su в скрипте с /usr/bin/su на /usr/bin/su_cmd
mv /usr/bin/su /usr/bin/su_cmd
mv /usr/bin/su.sh /usr/bin/su