Возможно ли защититься от локального брутфорса?

Всем доброго времени суток, оказывается при запуске команды с помощью sudo можно автоматически вводить пароль от него путём передаче аргемента S и использования туннеля | в сочетании с команды вывода:

echo пароль | sudo -S команда

Вопрос: что мешает написать sh / bash скрипт, перебирающий заранее сгенерированные комбинации паролей или возможно "на лету"?

Например:

#!/bin/sh

for i in "12345" 1 2 3 4 5 1000 12345 "qweqwe"
do
        echo $i | sudo -S cat rootFile.txt
done

Где rootFile.txt - текстовый файл, недоступный текущему пользователю:

$ ll rootFile.txt 
-rwx------ 1 root root 14 июн  8 08:33 rootFile.txt*
$ who
    maxsmg   tty1         2024-06-07 08:43 (:0)
    maxsmg   pts/0        2024-06-07 08:43 (:0)
    maxsmg   pts/1        2024-06-08 08:48 (:0)

Вывод sh test.sh

На данном скриншоте видно, что в последний вариант пароля правильный и выводится текстовое описание файла rootFile.txt - Hello, World!


Ответы (1 шт):

Автор решения: DerSkythe

Вы можете включить pam_tally2 для пользователей.

Для этого отредактируйте /etc/pam.d/login или /etc/pam.d/system-auth, после всех auth добавьте:

auth     required       pam_tally2.so deny=3 even_deny_root unlock_time=120

После 3-х неудачных попыток пользователь будет заблокирован на 120 секунд.

Подробнее, смотри $ man pam_tally2

→ Ссылка