Настройка авторизации пользователей в БД используя pam_mysql
Данная статья поможет Вам настроить любое приложение использующее PAM для авторизации пользователей в БД MySQL.
Для примера я приведу полную настройку связки vsFTPd с модулем pam_mysql.
Установка
Возьмите пакет pam_mysql из репозитория Fedora Extras. Скачиваем srpm пакет.
Установим скачанный пакет.
rpm -ihv pam_mysql-XXX.fc6.src.rpm
Перейдем в каталог /usr/src/redhat/SPECS и дадим команду на сборку пакета для нашего дистрибутива.
rpmbuild -ba pam_mysql.spec
После того как мы пересобрали пакет перейдите в каталог /usr/src/redhat/RPMS/i386/ и установите пакет pam_mysql командой:
rpm -ihv pam_mysql-XXX.rpm
Настройка БД MySQL
Запустите Mysql командой:
service mysqld start
Войдите в интерфейс MySQL:
mysql
Создаем БД дляработы с модулем pam_mysql:
mysql> create database pam_db; Query OK, 1 row affected (0.05 sec)
Скажем использовать эту БД.
mysql> use pam_db; Database changed
Создадим таблицу для пользователей.
mysql> create table pam_table(id int not null auto_increment primary key, user varchar(50),passwd varchar(50)); Query OK, 0 rows affected (0.00 sec)
Создадим таблицу где будут храниться журналы.
mysql> create table pam_log(id int not null auto_increment primary key,user varchar(255),message varchar(255),process int,host varchar(255),time varchar(255)); Query OK, 0 rows affected (0.01 sec)
Создадим пользователя pam_user которому разрешено работать c БД.
mysql> grant all on pam_db.* to pam_user@localhost identified by 'pam_pass'; Query OK, 0 rows affected (0.00 sec)
Обновляем привилегии пользователей.
mysql> flush privileges; Query OK, 0 rows affected (0.02 sec)
Создадим тестового пользователя test с паролем test (для примера пароли в БД будут храниться в открытом виде).
mysql> insert into pam_table set user='test',passwd='test'; Query OK, 1 row affected (0.00 sec)
Выходим из интерфейса mysql:
mysql> \q
Настройка vsftpd
Перейдите в каталог /etc/pam.d отредактируйте файл vsftpd следующим образом(должны остаться только эти 2 строки):
auth optional pam_mysql.so user=pam_user passwd=pam_pass db=pam_db table=pam_table \ usercolumn=user passwdcolumn=passwd crypt=0 verbose=1 sqllog=yes \ logtable=pam_log logusercolumn=user logmsgcolumn=message \ logpidcolumn=process loghostcolumn=host logtimecolumn=time account required pam_mysql.so user=pam_user passwd=pam_pass db=pam_db table=pam_table \ usercolumn=user passwdcolumn=passwd crypt=0 verbose=1 sqllog=yes \ logtable=pam_log logusercolumn=user logmsgcolumn=message \ logpidcolumn=process loghostcolumn=host logtimecolumn=time
Внимание: Выставлена опция отладки verbose=1 после того как Вы проверите, что все работает корректно поменяйте на verbose=0. Отладочная информация храниться в /var/log/secure.
Правим конфигурационный файл /etc/vsftpd/vsftpd.conf
max_clients=200 max_per_ip=4 listen_address=10.0.0.1 anonymous_enable=NO local_enable=YES write_enable=YES local_umask=222 dirmessage_enable=YES connect_from_port_20=YES chown_uploads=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=600 data_connection_timeout=120 ftpd_banner=Welcome to FTP service. chroot_list_enable=NO pam_service_name=vsftpd listen=YES tcp_wrappers=YES virtual_use_local_privs=YES guest_enable=YES guest_username=virtual chroot_local_user=YES local_root=/home/virtual
Теперь создадим локального пользователя virtual с домашним каталогом в /home/virtual – именно к этому каталогу и будут обращаться пользователи после авторизации.
useradd -g nobody -d /home/virtual -s /sbin/nologin virtual
Запустите сервис vsftpd:
service vsftpd start
Тестирование
Проверьте, что авторизация работает:
ftp 10.0.0.1 Connected to 10.0.0.1. 220 Welcome to FTP service. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (10.0.0.1:user): test 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. quit
Авторизация прошла успешно.
Теперь убедитесь, что в таблицу pam_log базы данных pam_db сохраняется информация о авторизации.
# mysql mysql> use pam_db; mysql> select * from pam_log; +----+------+------------------------+---------+---------------+---------------------+ | id | user | message | process | host | time | +----+------+------------------------+---------+---------------+---------------------+ | 1 | test | AUTHENTICATION SUCCESS | 8256 | 10.0.0.2 | 2006-12-20 10:56:04 | | 2 | test | QUERYING SUCCESS | 8256 | 10.0.0.2 | 2006-12-20 10:56:04 | +----+------+------------------------+---------+---------------+---------------------+
На этом настройка законченна.
Может распространяться свободно при указании авторства. Автор: Фролов Денис.
