Я хочу заблокировать всех, кто запускает 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