Ключевые слова:nss, auth, redhat, mysql, (найти похожие документы)
From: Denis Frolov
Date: Mon, 3 Aug 2010 17:02:14 +0000 (UTC)
Subject: Настройка авторизации пользователей в БД используя libnss MySQL
Оригинал: http://www.redhat-club.org/Articles/DenisFrolov/LibnssMySQLConfiguration
Постановка задачи
Задача: Настроить FTP сервер и квоты на дисковое пространство
выделяемое каждому из пользователей.
Решение: В связи с тем, что количество пользователей достаточно велико
(нескольких сотен), то заводить их как локальных пользователей я
посчитал нецелесообразным.
После нескольких экспериментов pam_mysql был отвергнут т.к. квоты можно
настроить только локальным пользователям, т.е. встала задача найти
инструмент, который бы позволял хранить учетные записи пользователей в
БД, и при этом чтобы система не видела разницы между локальным
пользователем и пользователем из БД.
На просторах Интернет был найден проект libnss_mysql ([21]Домашняя
страница), который и позволяет проделать описанный выше фокус.
Сборка RPM пакета, установка
Скачем пакет с исходными текстами, например так:
wget http://sourceforge.net/project/showfiles.php?group_id=56073&release_id=354053.
Скопируем полученный файл в /usr/src/redhat/SOURCES.
cp libnss-mysql-1.5.tar.gz /usr/src/redhat/SOURCES
Нам необходимо извлечь из данного архива файл libnss-mysql.spec и
внести в него некоторые изменения (дело в том, что spec содержащийся в
архиве неработоспособен, т. к. содержит ошибку).
Распаковываем архив:
tar -zxvf /usr/src/redhat/SOURCES/libnss-mysql-1.5.tar.gz
Копируем SPEC файл в положенное ему место:
cp /usr/src/redhat/SOURCES/libnss-mysql-1.5/libnss-mysql.spec /usr/src/redhat/SPECS/
Подредактируем файл /usr/src/redhat/SPECS/libnss-mysql.spec поставив
после строки
%attr(0755,root,root) /lib/*.so*
еще одну строку
%attr(0755,root,root) /lib/*.la*
Теперь сборка RPM пакета пройдет успешно.
Собираем пакет:
rpmbuild -ba libnss-mysql.spec
После сборки пакет будет записан в каталог /usr/src/redhat/RPMS/i386/.
Установим пакет libnss_mysql:
rpm -ihv /usr/src/redhat/RPMS/i386/libnss-mysql-1.5-1.i386.rpm
Настройка
Настройка MySQL
Если MySQL у Вас еще не запущен, сделайте это командой
service mysqld start.
Перейдите в каталог /usr/share/doc/libnss-mysql-1.5/sample/linux и
скопируйте оттуда файл sample_database.sql в свой каталог:
cp sample_database.sql $HOME
В данном файле содержится набор SQL команд для создания необходимых
таблиц в БД MySQL.
Отредактируйте данный файл в своем домашнем каталоге.
Вам необходимо поправить в нем строки которые создают тестовую группу и
тестового пользователя.
INSERT INTO users (username,gecos,homedir,password) VALUES ('cinergi', 'Ben Goodwin', '/home/cinergi', ENCRYPT('cinergi'));
INSERT INTO groups (name) VALUES ('foobaz');
INSERT INTO grouplist (gid,username) VALUES (5000,'cinergi');
Поправим следующим образом:
INSERT INTO users (username,gecos,homedir,password) VALUES ('testftp', 'Test FTP USER', '/home/testftp', ENCRYPT('pass'));
INSERT INTO groups (name) VALUES ('ftpuser');
INSERT INTO grouplist (gid,username) VALUES (5000,'ftpuser');
Также необходимо поправить строки задающие пароли для доступа к БД,
вместо rootpass и userpass поставьте <<адекватные>> пароли для доступа.
GRANT USAGE ON *.* TO `nss-root`@`localhost` IDENTIFIED BY 'rootpass';
GRANT USAGE ON *.* TO `nss-user`@`localhost` IDENTIFIED BY 'userpass';
После этого выполните:
mysql <sample_database.sql
Создастся БД Auth и необходимые таблицы.
Настройка libnss_mysql
В каталоге /etc находятся 2 файла
* libnss-mysql.cfg
* libnss-mysql-root.cfg
Отредактируйте данные файлы, сменив в них параметр password на пароли
которые Вы задали в файле sample_database.sql.
Отредактируйте файл nsswitch.conf заменив в нем строки
passwd: files
shadow: files
на строки:
passwd: files mysql
shadow: files mysql
Приступим к настройке квот для пользователей.
Отредактируйте файл /etc/fstab следующим образом:
Вместо строки
LABEL=/home /home ext3 defaults 1 2
поставьте строку:
LABEL=/home /home ext3 nosuid,noexec,usrquota 1 2
Перемонтируйте раздел /home
mount -o remount /home
Создадим каталог нашего тестового пользователя testuser:
mkdir /home/testftp
chown testftp.ftpusers /home/testftp
chmod 700 /home/testftp
Нам необходимо создать в файловой системе файлы квот, делается это
командой:
quotacheck -cug /home
Строим таблицу таблицу текущего использования диска:
quotacheck -avug
Правим квоты для пользователя testftp командой
edquota testftp
откроется текстовый редактор (по умолчанию vi), Вам необходимо
отредактировать значения полей soft и hard задающие мягкое и жесткое
ограничение на число блоков для пользователя в данной файловой системе.
После правки данного файла, проверьте, что квоты для пользователя
установлены:
quota testftp
Настройка vsftpd
Отредактируйте файл настроек vsFTPd следующим образом:
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=YESchown_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
chroot_local_user=YES
Перезапустите vsftpd командой:
service vsftpd restart
Тестирование
С клиентского компьютера выполните команду:
ftp 10.0.0.1
Connected to 10.0.0.1.
220 Welcome to FTP service.
530 Please login with USER and PASS.
Name: testftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
Подключение прошло успешно. Теперь попытайтесь закачать на ftp
несколько файлов общим размером больше, чем то значение в которое вы
выставили квоты.
Заключение
Для создания нового пользователя нам надо:
1. Создать пользователя в БД
2. Создать ему домашний каталог
3. Назначить пользователя владельцем каталога
4. Назначить права доступа на каталог пользователя
5. Установить квоты для пользователя
Данные задачи можно автоматизировать написанием простого скрипта
который и будет выполнять указанные действия.
Если Вы хотите назначить пользователю такие же квоты такие же как и у
другого пользователя выполните: edquota -p testftp2 testftp.
Может распространяться свободно при указании авторства.
Автор: Фролов Денис