Tartalomjegyzék

< Hogyanok

MySQL azonosítás PAM-on keresztül Linuxon

LinuxMint rendszeren

Bevezetés

Korábbi LinuxMint, Ubuntu és a Debian verziókon ha MySQL-ből szeretnénk azonosítani a libpam-mysql-re volt szükségünk. LinuxMint 15, a Debian 7 verziója óta van egy libnss-mysql-bg nevű csomag amit használunk. Ezzel a csomaggal magába a PAM-ba nem is kell belenyúlnunk. Ennek beállításai nézzük meg.

Telepítések

Szükség van a mysql-server és a libnss-mysql-bg csomagra.

sudo apt-get install libnss-mysql-bg mysql-server

Beállítások

Telepítés után kapunk egy libnss-mysql.cfg és egy libnss-mysql-root.cfg állományt az /etc könyvtárban.

/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 1
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    nss-USER
password    userpass
#socket      /var/run/mysqld/mysqld.sock
#port        3306

A libnss-mysql.cfg fájlnak csak a végét kell javítani, írjuk be az általunk használt jelszót.

Az adatbázis neve pedig lehet majd auth, a felhasználónév ami eléri pedig nss-user.

A libnss-mysql-root.cfg tartalma:

/etc/libnss-mysql-root.cfg
username    nss-root
password    rootpass

Itt is a jelszót kell megváltoztatni.

Nyissuk meg az /etc/nsswitch.conf állományt, és keressük meg benne a következő sorokat:

passwd:         compat
group:          compat
shadow:         compat

Javítsuk így:

passwd:         compat mysql
group:          compat mysql
shadow:         compat mysql

A MySQL adatbázisban a következő adatbázist alakítsuk ki:

CREATE DATABASE auth;
USE auth;
 
# The TABLES ...
CREATE TABLE groups (
  name VARCHAR(16) NOT NULL DEFAULT '',
  password VARCHAR(34) NOT NULL DEFAULT 'x',
  gid INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY  (gid)
) AUTO_INCREMENT=6000;
 
CREATE TABLE grouplist (
  rowid INT(11) NOT NULL AUTO_INCREMENT,
  gid INT(11) NOT NULL DEFAULT '0',
  username CHAR(16) NOT NULL DEFAULT '',
  PRIMARY KEY  (rowid)
);
 
CREATE TABLE 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)
) AUTO_INCREMENT=6000;
 
 
# The permissions ...
GRANT USAGE ON *.* TO `nss-root`@`localhost` IDENTIFIED BY 'titok';
GRANT USAGE ON *.* TO `nss-user`@`localhost` IDENTIFIED BY 'titok';
 
GRANT SELECT (`username`, `uid`, `gid`, `gecos`, `homedir`, `shell`, `password`,
              `lstchg`, `min`, `max`, `warn`, `inact`, `expire`, `flag`)
             ON `auth`.`users`
             TO 'nss-root'@'localhost';
GRANT SELECT (`name`, `password`, `gid`)
             ON `auth`.`groups`
             TO 'nss-root'@'localhost';
 
GRANT SELECT (`username`, `uid`, `gid`, `gecos`, `homedir`, `shell`)
             ON `auth`.`users`
             TO 'nss-user'@'localhost';
GRANT SELECT (`name`, `password`, `gid`)
             ON `auth`.`groups`
             TO 'nss-user'@'localhost';
 
GRANT SELECT (`username`, `gid`)
             ON `auth`.`grouplist`
             TO 'nss-user'@'localhost';
GRANT SELECT (`username`, `gid`)
             ON `auth`.`grouplist`
             TO 'nss-root'@'localhost';

A jelszót változtassuk meg a kívántra. Ne maradjon „titok”! Ezt kellet beállítani a /etc/libnss-mysql-root.cfg és a /etc/libnss-mysql.cfg fájlokban.

Felhasználók felvétele

Az alábbi példában felveszünk egy joska nevű felhasználót:

INSERT INTO users (username,gecos,homedir,password)
    VALUES ('joska', 'Teszt József', '/home/vusers/joska', ENCRYPT('titok'));
INSERT INTO groups (name)
    VALUES ('vuser');
INSERT INTO grouplist (gid,username)
    VALUES (6000,'joska');

A példa második utasításában létrehoztam egy vuser csoportot. Természetesen ezt többször nem kell megtenni.

Az eredeti Debian elv szerint minden felhasználóval azonos nevű csoport is létrejön egy felhasználó felvételével. Ha most is ezt szeretnénk a csoportot létre kell hozni.

Jelszavak

Az így létrehozott felhasználó jelszava csak „crypt” algoritmussal lesz kódolva. Használható a többi algoritmus is. A Linuxokban manapság (2013) SHA-512 algoritmust használunk. Az /etc/shadow fájlból a kód egyben kimásolható, például:

$6$AbCdefgh$3GFj/6var2Rjchadbz4r86Hd9ujAY1Z0NaoMExRy1x.MtmJyqg7253pg.9i3YeHm0x8CmBAYWnEcODQ6WkhqD.

De generálhatunk is másikat. A jelszavak titkosításáról több információhoz juthatunk az Apró debianos tippek fejezetből.

Az egyik lehetőséget idemásolom. Szükségünk lesz a whois nevű csomagra. Eben van egy mkpasswd nevű parancs amely képes legenerálni az általunk kívánt kódot.

Telepítsük:

apt-get install whois

Kérdezzük le a használható kódolásokat:

mkpasswd --method=help

Találjunk ki egy 8 karaktert sót. Pl. AbCdefgh. Legyen az algoritmus: sha512. A jelszó legyen „titok”.

A kódolt jelszó előállítása:

mkpasswd --method=sha-512 --salt=AbCdefgh titok

Tesztelés

Nyissunk két terminált. Az egyikben figyeljük a naplófájlokat:

tail -f /var/log/auth.log

A másikban probáljunk meg egy bejelentkezést rootként:

login joska

Ha valami nem működik és nincs időnk folytatni akkor az /etc/nsswitch.conf fájlban vegyük ki a „mysql” szavakat, amit oda írtunk. Máskülönben az is előfordulhat, hogy újraindítás után nem tudjuk használni a rendszerünket.

A fenti parancsot (login) természetesen lehet a sudo-val is futtatni, de akkor két jelszót kér, egyet az aktuális felhasználónak. Én root felhasználóvá szoktam váli, ha rootként akarok dolgozni, a következő paranccsal:

sudo su -

Kilépés a root környezetből:

exit

A felhasználó egyéb tulajdonságainak lekérdezése:

apt-get install finger
finger joska
Login: joska          			Name: Teszt József
Directory: /home/vusers/joska       	Shell: /bin/bash
Last login Sat Oct  5 14:27 (CEST) on pts/0
No mail.
No Plan.

A Name tulajdonságnál ellenőrizhetjük az ékezetek helyességét.

Linkek