Tartalomjegyzék
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
- http://www.spencerstirling.com/computergeek/mysqluser.html (libpam-mysql)
- http://www.aychedee.com/2012/03/14/etc_shadow-password-hash-formats/ (Jelszó generálás és a shadow fájl)
- http://linuxczar.net/code/hashpw.py (Jelszó generálás Python nyelven)
- http://www.akkadia.org/drepper/SHA-crypt.txt (Az SHA algoritmus)