Sshd mysql

Allikas: Kuutõrvaja
Redaktsioon seisuga 26. oktoober 2007, kell 16:37 kasutajalt Jj (arutelu | kaastöö) (Install ja sedaistus)

Sissejuhatus

Vaja oleks süsteem õpetada tunnistama mysql'is asuvaid kasutajaid. Lisaks tahaksid need kasutajad logida ssh abil serverisse.

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

  1. mysql-pam
  2. 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/