Sshd mysql
Sissejuhatus
Näide kuidas saada unix süsteemis autentimine mysql baasi peale.
Antud näidet on testitud linux serveris kuid sama tarkvara on olemas ka FreeBSD
all ning peaks töötama seal samahästi (/etc asendub arvatavasti /usr/loca/etc jms radade muutused)
Install ja sedaistus
Süsteemi on vaja paigaldada kaks paketti lisaks mysql kliendile.
- mysql-pam
- libnss-mysql (versiooniks 1.5 näites)
Tekitame enda andmebaasiserverisse uue kasutajanime (kasutaja,parool) Loome enda andmebaasi uue baasi nimega auth ja sinna sisse järgneva struktuuriga tabelid.
CREATE TABLE IF NOT EXISTS `grouplist` ( `rowid` int(11) NOT NULL auto_increment, `gid` int(11) NOT NULL default '0', `username` char(16) NOT NULL default , PRIMARY KEY (`rowid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; CREATE TABLE IF NOT EXISTS `groups` ( `name` varchar(16) NOT NULL default , `password` varchar(34) NOT NULL default 'x', `gid` int(11) NOT NULL auto_increment, PRIMARY KEY (`gid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5001 ; CREATE TABLE IF NOT EXISTS `users` ( `username` varchar(16) NOT NULL default , `uid` int(11) NOT NULL auto_increment, `gid` int(11) NOT NULL default '5000', `gecos` varchar(128) NOT NULL default , `homedir` varchar(255) NOT NULL default , `shell` varchar(64) NOT NULL default '/bin/bash', `password` varchar(34) NOT NULL default 'x', `lstchg` bigint(20) NOT NULL default '1', `min` bigint(20) NOT NULL default '0', `max` bigint(20) NOT NULL default '99999', `warn` bigint(20) NOT NULL default '0', `inact` bigint(20) NOT NULL default '0', `expire` bigint(20) NOT NULL default '-1', `flag` bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (`uid`), UNIQUE KEY `username` (`username`), KEY `uid` (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5000 ;
Lisame ka ühe kasutaja ja grupi. Kasutaja nimeks saab kasutaja, parooliks samuti kasutaja
ning kodukataloogiks /home/kasutaja.
INSERT INTO users (username,gecos,homedir,password) VALUES ('kasutaja', 'Eesnimi Perenimi', '/home/kasutaja', ENCRYPT('kasutaja'));
Loome kasutajale grupi nimega kasutaja.
INSERT INTO groups (name) VALUES ('kasutaja');
Seome kasutaja loodud grupiga
INSERT INTO grouplist (gid,username) VALUES (5000,'kasutaja');
/etc/libnss-mysql.cfg
getpwnam SELECT username,'x',uid,gid,gecos,homedir,shell \ FROM users \ WHERE username='%1$s' \ LIMIT 1 getpwuid SELECT username,'x',uid,gid,gecos,homedir,shell \ FROM users \ WHERE uid='%1$u' \ LIMIT 1 getspnam SELECT username,password,lstchg,min,max,warn,inact,expire,flag \ FROM users \ WHERE username='%1$s' \ LIMIT 1 getpwent SELECT username,'x',uid,gid,gecos,homedir,shell \ FROM users getspent SELECT username,password,lstchg,min,max,warn,inact,expire,flag \ FROM users getgrnam SELECT name,password,gid \ FROM groups \ WHERE name='%1$s' \ LIMIT 1x getgrgid SELECT name,password,gid \ FROM groups \ WHERE gid='%1$u' \ LIMIT 1 getgrent SELECT name,password,gid \ FROM groups memsbygid SELECT username \ FROM grouplist \ WHERE gid='%1$u' gidsbymem SELECT gid \ FROM grouplist \ WHERE username='%1$s' host localhost database auth username kasutaja password parool
teine fail mis vaja seadistada /etc/libnss-mysql-root.cfg
sinna piisab kui lisada andmebaasi kasutajanimi ning parool
username kasutaja password parool
Järgnevalt PAM seadistus ssh'ga logimiseks /etc/pam.d/ssh
auth sufficient pam_mysql.so \ verbose=1 \ user=kasutaja \ passwd=parool \ host=localhost \ db=auth \ table=users \ usercolumn=username \ passwdcolumn=password crypt=4 account sufficient pam_mysql.so \ verbose=1 \ user=kasutaja \ passwd=parool \ host=localhost \ db=auth \ table=users \ usercolumn=username \ passwdcolumn=password crypt=4 password sufficient pam_mysql.so \ verbose=1 \ user=kasutaja \ passwd=parool \ host=localhost \ db=auth \ table=users \ usercolumn=username \ passwdcolumn=password crypt=4
lõpuks ka /etc/nsswitch.conf Mille alusel süsteem tunnistab kasutajaid andmebaasist.
passwd: files mysql shadow: files mysql group: files mysql
Ning nii toimib. Võid testida käskude id, finger abil ning proovida ssh'ga üle võrgu logida.
Lingid
http://libnss-mysql.sourceforge.net/
--Jj 26. oktoober 2007, kell 16:45 (EEST)