Хочу, что бы пользовательские аккаунты хранились в базе MySQL (не надо петь про безопасность, вопрос не в этом.)
Выкачал pam_mysql-0.5, скомпилировал, поставил.
Создал базу, куда занёс двух пользователей user1 (password), user2 (magic). При этом, пользователь user1 был ещё добавлен в систему через useradd (keyword) В скобках указаны пароли.
Теперь поправил файл /etc/pam.d/sshd
====================================================
auth required /lib/security/pam_mysql.so
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system_auth
password required /lib/security/pam_mysql.so
session required /lib/security/pam_mysql.so
session required /lib/security/pam_limits.so
session optional /lib/security/pam_console.so
====================================================
Выполняю со второй машины команду
[user@10.0.0.1]$ ssh 10.0.0.2 -l user1
Password: keyword
Password: password
[user1@10.0.0.2]$
Т.е. нормально подключился. Причём с паролем, указанным в базе данных, а не в системе.
Выполняю другую команду:
[user@10.0.0.1]$ ssh 10.0.0.2 -l user2
Password: magic
Password:
Т.е. команду не принимает. В messages валится такой лог:
====================================================
sshd[2385]: Connection from 10.0.0.1 port 3065
sshd[2385]: Enabling compatibility mode for protocol 2.0
sshd[2385]: input_userauth_request: illegal user user2
sshd[2385]: Could not reverse map address 10.0.0.1.
sshd[2385]: Failed none for illegal user user2 10.0.0.1 port 3065 ssh2
sshd[2385]: pam_sm_authenticate called.
sshd[2385]: dbpasswd changed.
sshd[2385]: crypt changed.
sshd[2385]: where changed.
sshd[2385]: db_connect called.
sshd[2385]: returning 0 .
sshd[2385]: db_checkpasswd called.
sshd[2385]: SELECT Password FROM user WHERE User='NOUSER'
sshd[2385]: pam_mysql: select returned more than one result
sshd[2385]: returning 7 after db_checkpasswd.
sshd[2385]: Failed keyboard-interactive for illegal user user2 from 10.0.0.1 port 3065 ssh2
====================================================
Получается, что прежде, чем обратиться к pam, ssh ищет этого юзера в passwd и уже потом отдаёт его на проверку PAM? Вопрос, а как заставить его обращаться к PAM, не обращаясь к passwd?