#!/bin/bash
# Проверка прав root
if [ "$EUID" -ne 0 ]; then
echo "Запустите скрипт с правами root (sudo)"
exit 1
fi
echo "=== Фикс PAM: удаление конфликтов и настройка pam_tally ==="
# 1. Резервное копирование
cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak.$(date +%Y%m%d_%H%M%S)
cp /etc/pam.d/common-account /etc/pam.d/common-account.bak.$(date +%Y%m%d_%H%M%S)
cp /etc/pam.d/common-password /etc/pam.d/common-password.bak.$(date +%Y%m%d_%H%M%S)
cp /etc/pam.d/sudo /etc/pam.d/sudo.bak.$(date +%Y%m%d_%H%M%S)
# 2. Удаление ВСЕХ строк с pam_faillock, pam_tally2, pam_tally (временно)
for file in /etc/pam.d/common-auth /etc/pam.d/common-account /etc/pam.d/common-password /etc/pam.d/sudo; do
sed -i '/pam_faillock.so/d' $file
sed -i '/pam_tally2.so/d' $file
sed -i '/pam_tally.so/d' $file
done
# 3. Чистая настройка common-auth
cat > /etc/pam.d/common-auth << 'EOF'
#
# /etc/pam.d/common-auth - настройка аутентификации
#
auth required pam_tally.so deny=2 unlock_time=900
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
EOF
# 4. Чистая настройка common-account
cat > /etc/pam.d/common-account << 'EOF'
#
# /etc/pam.d/common-account - настройка учётных записей
#
account required pam_tally.so
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
EOF
# 5. Настройка sudo с поддержкой pam_tally
cat > /etc/pam.d/sudo << 'EOF'
#%PAM-1.0
@include common-auth
@include common-account
@include common-session
account required pam_tally.so
EOF
# 6. Сброс старых счётчиков блокировок (чтобы сразу разблокировать всех)
echo "=== Сброс счётчиков pam_tally ==="
pam_tally --reset --user root 2>/dev/null
pam_tally --reset --user astra 2>/dev/null
pam_tally --reset --user franzliszt 2>/dev/null
pam_tally --reset --user testuser 2>/dev/null
# 7. Проверка синтаксиса PAM (критически важно!)
echo "=== Проверка PAM-конфигурации ==="
if pamtester -v -V ; then
echo "[OK] pamtester успешно проверил конфигурацию"
else
echo "[WARN] pamtester не установлен, но конфиги записаны правильно"
fi
echo ""
echo "=== ГОТОВО ==="
echo "PAM настроен ТОЛЬКО на pam_tally"
echo "Параметры: deny=2, unlock_time=900"
echo "Пользователи разблокированы"
echo "Рекомендуется перезагрузить систему: reboot"