Настройка Авторизации Пользователей в MySQL Средствами libnss_mysql

Задача: Настроить FTP-сервер и квоты на дисковое пространство, выделяемое каждому из пользователей.

Решение: В связи с тем, что количество пользователей достаточно велико (нескольких сотен), то заводить их как локальных пользователей было бы нецелесообразным. После нескольких экспериментов pam_mysql был отвергнут, т.к. квоты можно настроить только локальным пользователям, т.е. встала задача найти инструмент, который бы позволял хранить учетные записи пользователей в базе данных, и при этом чтобы система не видела разницы между локальным пользователем и пользователем из БД. В сети интернет был найден проект libnss_mysql, который и позволяет решить вышеописанную задачу.

Установка libnss_mysql

Для дистрибутива CentOS пакет libnss_mysql доступен в репозитории Fedora EPEL.

Сборка libnss_mysql из исходных текстов

Если ваш дистрибутив – не CentOS, прийдется собирать libnss_mysql из исходных текстов. Для этого:

1. Загрузите пакет с исходными текстами, например так:

# wget http://sourceforge.net/project/showfiles.php?group_id=56073&release_id=354053.

2. Скопируйте полученный файл в /usr/src/redhat/SOURCES.

# cp libnss-mysql-1.5.tar.gz /usr/src/redhat/SOURCES

3. Извлеките из данного архива файл libnss-mysql.spec и внестите в него некоторые изменения (дело в том, что SPEC-файл, содержащийся в архиве, неработоспособен, т. к. содержит ошибку).

4. Распакуйте архив:

# tar -zxvf /usr/src/redhat/SOURCES/libnss-mysql-1.5.tar.gz

5. Скопируйте SPEC-файл в /usr/src/redhat/SPECS/:

# cp /usr/src/redhat/SOURCES/libnss-mysql-1.5/libnss-mysql.spec /usr/src/redhat/SPECS/

6. Отредактируйте файл /usr/src/redhat/SPECS/libnss-mysql.spec, поставив после строки

 %attr(0755,root,root) /lib/*.so*

еще одну:

 %attr(0755,root,root) /lib/*.la*

После данных изменений сборка RPM-пакета пройдет успешно.

7. Соберите RPM-пакет:

# rpmbuild -ba  libnss-mysql.spec

После сборки пакет будет записан в каталог /usr/src/redhat/RPMS/i386/.

8. Установите пакет libnss_mysql:

# rpm -Uhv /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=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
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-сервер несколько файлов общим размером больше лимита квоты.

Заключение

Таким образом, для создания нового пользователя необходимо:

  • Создать пользователя в базе данных;
  • Создать домашний каталог пользователя;
  • Назначить пользователя владельцем каталога;
  • Назначить права доступа на каталог пользователя;
  • Установить квоты для пользователя.

Данные задачи можно автоматизировать написанием простого скрипта, который и будет выполнять вышеуказанные действия.

Если Вы хотите назначить пользователю такие же квоты, такие же как и у другого пользователя, выполните:

# edquota -p testftp2 testftp

Автор: Денис Фролов

Статьи по Теме

Категории
Поиск