Ошибки аутентификации PAM для одного имени пользователя. Все остальные имена пользователей входят правильно

Короткий ответ: это не отдельные вызовы; вы выполняете svn update только один раз.

(Вы можете проверить это, запустив функцию под set -x, что заставляет bash печатать каждую команду по мере ее выполнения: set -x; svn_update_all; set +x)

Если вы действительно хотите запустить svn несколько раз (и вы уверены, что у вас никогда не будет пробелов в путях), вы можете просто убрать кавычки вокруг $repos:

svn_update_all ()
{ 
    repos=`find . -name '.svn'`
    for i in $repos
    do
        svn update `dirname $i`
        echo
    done
}

Вот как обстоит дело с циклами for. bash(1) говорит:

for name [ [ in [ word ... ] ] ; ] do list ; done

Список слов, следующий за in, расширяется, генерируя список элементов. Переменная name устанавливается в каждый элемент этого списка по очереди по очереди, и каждый раз выполняется list.

Таким образом, содержимое блока for выполняется один раз для каждого word после in. Вот пример:

count=0
for num in one two three; do
do
    let count++
    echo "loop $count: '$num'"
done
loop 1: 'one'
loop 2: 'two'
loop 3: 'three'

Но строка в кавычках воспринимается как одно слово. В основном это и происходит в вашем сценарии:

count=0
for num in "one two three"; do
    let count++
    echo "loop $count: '$num'"
done
loop 1: 'one two three'

Уберите кавычки, и $repos снова будет разделен на отдельные слова, а затем svn update будет запущен один раз для каждого репозитория, как вы и ожидали.

Обратите внимание, однако: это сломается, если у вас есть путь, в котором есть пробелы.

Самый простой способ обработки путей, которые могут содержать пробелы - это направить вывод find во встроенную команду read:

find . -name '.svn' | while read i
do
    svn update `dirname $i`
    echo
done

Самый безопасный способ - использовать действия find -exec или -execdir, чтобы не беспокоиться о том, что bash разделит имена файлов:

# print the repo dir, then run "svn update" in it
find . -name '.svn' -printf '%h: ' -execdir svn update \;
./mpc: Updating '.':
U    trunk/src/pow.c
U    trunk/tests/pow.dat
U    trunk/m4/mpc.m4
Updated to revision 1455.
./mpfr: Updating '.':
[etc]
1
16.01.2019, 23:51
2 ответа

Модуль pam_tally2ведет подсчет попыток доступа и может отказать в доступе, если слишком много неудачных попыток. Man-страницы для этого модуля содержат больше информации.

Спецификация этого модуля находится в /etc/pam.d/login, как, например,:

auth  required  pam_tally2.so deny=6 

Вы можете определить количество ошибок для пользователя с помощью:

pam_tally2 --user=<username>

Вы можете сбросить счетчик с помощью:

pam_tally2 --user=<username> --reset
0
27.01.2020, 23:31

Я столкнулся с той же проблемой -один пользователь не может войти в систему через Putty или локальный ssh, но нет новых записей в pam _tally2 с действительными или недействительными паролями.

Другие симптомы:

  • su-(запросил пароль и вернул "su :Ошибка аутентификации")
  • Записи в /var/log/secure отображали «sshd[] error :PAM :Ошибка аутентификации» без информации об аутентификации/учетной записи/сеансе
  • Сброс пароля с помощью «sudo passwd» явно сбрасывал пароль, указанные токены были успешно изменены, временные метки в /etc/shadow были обновлены правильно, но проблемы с аутентификацией остались
  • Срок действия учетной записи пользователя не истек

Все остальные пользователи смогли правильно войти в систему, так что это не было общей проблемой конфигурации PAM.

Решение:

faillock --user <username> (showed 5 valid failures)
faillock --user <username> --reset 
faillock --user <username> (now has 0 valid failures)

После этого я смог войти в систему через Putty и успешно использовать "su -"

3
27.01.2020, 23:31

Теги

Похожие вопросы