Newsgroup: it.comp.os.linux.sys
Titolo: pam-mysql

è da stamattina che bestemmio per far funzionare l'autenticazione mediante mysql.
 
ho creato un database di prova con un utente "pippo"
 
Poi:
 
 
# cat /etc/pam-mysql.conf 
# Sample configuration file for pam-mysql
 
users.host 		= 192.168.0.2
users.database 		= pam
users.db_user 		= pam
users.db_passwd		= IUq4qVetsz4njRAY
users.table 		= users
users.user_column 	= username
users.password_column 	= password
users.password_crypt 	= 1
verbose 		= 1
 
 
# cat /etc/pam.d/common-auth  | grep mysql
auth       optional     pam_mysql.so config_file=/etc/pam-mysql.conf
account    optional     pam_mysql.so config_file=/etc/pam-mysql.conf
 
(tutti optional perchè nel caso il login tramite mysql non andasse a buon fine, devo fare il fallback al login tramite passwd)
 
Ma nonostante ciò:
 
Jul 31 15:33:07 x sshd[1492]: Invalid user pippo from 192.168.0.5
Jul 31 15:33:07 x sshd[1492]: Failed none for invalid user pippo from 192.168.0.5 port 36746 ssh2
Jul 31 15:33:08 x sshd[1492]: pam_mysql - option verbose is set to "1"
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_sm_authenticate() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_open_db() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_open_db() returning 0.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_check_passwd() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_format_string() called
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_quick_escape() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - SELECT password FROM users WHERE username = 'pippo'
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_check_passwd() returning 6.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_sql_log() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_sql_log() returning 0.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_converse() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_open_db() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_check_passwd() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_format_string() called
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_quick_escape() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - SELECT password FROM users WHERE username = 'pippo'
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_check_passwd() returning 6.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_sql_log() called.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_mysql_sql_log() returning 0.
Jul 31 15:33:08 x sshd[1492]: pam_mysql - pam_sm_authenticate() returning 7.
Jul 31 15:33:08 x sshd[1492]: pam_unix(sshd:auth): check pass; user unknown
Jul 31 15:33:08 x sshd[1492]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.5 
Jul 31 15:33:10 x sshd[1492]: Failed password for invalid user pippo from 192.168.0.5 port 36746 ssh2
 
 
 
che diavolo è quel
"pam_mysql_check_passwd() returning 6." ?
 
ho controllato persino nel sorgente di pam-mysql, lui fa il return di un errore, ma non ho idea di chi sia "6"
 
 

 Jul 31 15:33:08 x sshd[1492]: pam_mysql - SELECT password FROM users WHERE username = 'pippo'
 
Non è che la query che pam_mysql invia sta usando la funzione di hashing sbagliata?

 Non è che la query che pam_mysql invia sta usando la funzione di hashing sbagliata?
 
No, ho provato anche mettendo '0' ovvero non usare cifratura ma inviare la password in chiaro.


IIRC, 0 e 1 non sono gli unici valori possibili. Oltre a password in chiaro, in mysql dovresti
avere crypt(), password() e md5() come funzioni per "crittare" la password.
Altra cosa, l'esistenza dell'account come la verifichi? Su file locale?
 
 

 Altra cosa, l'esistenza dell'account come la verifichi? Su file locale?
 
Non la verifico, devo? Vorrei poter usare utenti virtuali presenti solo su DB.
Con PAM devo avere anche la corrispondenza locale?

 Con PAM devo avere anche la corrispondenza locale?
 
Eh si.
 
PAM si occupa dell'autenticazione, in questo caso.
L'utente, il suo ID, i suoi gruppi devono stare altrove (ed il posto più 
semplice è /etc/passwd).
 
 

 semplice è /etc/passwd).
 
Allora non fa per me, l'obiettivo è avere *tanti* utenti ssh senza sporcare il sistema. Vedo di trovare altre soluzioni.

 sporcare il sistema. Vedo di trovare altre soluzioni.
 
 
A quick search...
 
http://4j.blogspot.it/2008/07/ssh-and-virtual-user-authentication.html
 
 
(mai provato... )
 
Max

 
http://4j.blogspot.it/2008/07/ssh-and-virtual-user-authentication.html
 
 
Fa uso di NSS, avrei preferito fare tutto in maniera nativa con pam.
Alla peggio, se non trovo altre soluzioni, farò come da guida (di articoli con NSS ne ho trovati a bizzeffe)

 Con PAM devo avere anche la corrispondenza locale?
 
Non necessariamente locale. Ma da qualche parte devi metterceli pure, sti account. Al sistema
un po' di info, tipo gruppi di appartenenza e home dir servono. NSS?

 Fa uso di NSS, avrei preferito fare tutto in maniera nativa con pam.
 
Beh, a me pare banale.
http://www.idimmu.net/2010/08/27/keeping-linux-users-in-a-mysql-database-with-libpam-mysql-on-ubuntu/
 

 mysql.
 
Perche` tanto odio[1]?
 
Enrico
[1] FreeIPA, NIS+ o LDAP, il resto meglio lasciarlo dove si trova

 Beh, a me pare banale.
 
Si, lo è.
I documenti che avevo letto io erano probabilmente obsoleti e scritti male, mi avevano fatto passare la voglia. Io cercavo per pam-mysql e non per nss, quindi forse i documenti da me trovati non erano proprio inerenti.
 
Effettivamente integrare nss sembra piuttosto semplice, sopratutto con il link di citrix.

 link di citrix.
 
Da quello che ho letto in giro, NSS ha una brutta storia di bug dietro le 
spalle, tanto da far decidere la scrittura di SSSD proprio per risolvere i 
problemi riscontrati e per implementare meccanismi di sicurezza aggiuntivi
 
Enrico