Я использую pam_mount
для автоматического монтирования общих ресурсов SMB / CIFS при входе пользователя в систему, и пока это работает, но когда кто-то аутентифицируется без пароля (через ssh- key) монтировать не удается, потому что нет пароля для передачи программе монтирования. Это приведет к ошибке Permission denied
и будет считаться неудачной попыткой аутентификации. Проблема в том, что учетные записи пользователей блокируются после нескольких неудачных попыток аутентификации. Поэтому, если вы используете ssh-ключ, через некоторое время вы заблокируете себя.
Есть ли способ запретить PAM что-то смонтировать, если пароль не указан?
Я обнаружил в их списке рассылки, что опция soft_try_pass
должна помочь ( https://sourceforge.net/p/pam-mount/mailman/message/19574581/), но эта опция больше не доступна.
Это на Ubuntu 18.04 с libpam-mount
версия 2.16-3ubuntu0.1
.
У нас была такая же проблема с нашими клиентами Debian в среде Active Directory. Чтобы указать, что процесс аутентификации прошел успешно с помощью пароля, вы можете установить переменную среды, а затем условно подключиться к этой переменной во время настройки сеанса.
Создайте модифицированную версию конфигурации монтирования pam в /usr/share/pam-configs/libpam-mount-pw-only
:
Name: Mount volumes for user (pw auth only)
Default: yes
Priority: 128
Auth-Type: Additional
Auth:
[success=ok default=2] pam_exec.so /bin/true
optional pam_env.so envfile=/etc/default/pam-authenticate
optional pam_mount.so
Session-Interactive-Only: yes
Session-Type: Additional
Session:
[success=ok default=1] pam_exec.so quiet /usr/bin/printenv PAM_AUTHENTICATE
optional pam_mount.so
Password-Type: Additional
Password:
optional pam_mount.so disable_interactive
Затем создайте файл окружения echo 'PAM_AUTHENTICATE =TRUE' > /etc/default/pam-authenticate
и запустите pam-auth-update
, чтобы активировать измененную конфигурацию (и деактивировать исходную конфигурацию).
Если пользователь входит в систему, используя ключи ssh, вы увидите pam_exec(sshd:session): /usr/bin/printenv failed: код выхода 1
(т.е. PAM_AUTHENTICATE
не установлен ) в /var/log/auth.log
вместо неудачной попытки монтирования.
Примечание: sshd по-прежнему будет вызывать pam_setcred()
и анализировать стек auth
, если используются ключи ssh. Однако pam_exec.so
будет выполняться только для pam_authenticate()
(см. pam_exec — вызов внешней команды), так что здесь мы можем аутентификация на основе ключей.
Это всего лишь обходной путь. Я бы предпочел параметр pam_mount.conf.xml
для конкретного тома, чтобы указать, что не следует предпринимать никаких попыток монтировать том без пароля.