[[oktatas:linux:hogyanok|< 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. 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: 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 [[oktatas:linux:apró_debianos_tippek#jelszavak_titkosítása| 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 ===== * https://gist.github.com/alpacaaa/3196852 * http://www.spencerstirling.com/computergeek/mysqluser.html (libpam-mysql) * http://www.idimmu.net/2010/08/27/keeping-linux-users-in-a-mysql-database-with-libpam-mysql-on-ubuntu/ (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)