Настройка авторизации пользователей в БД используя libnss MySQL

Постановка задачи

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

Решение: В связи с тем, что количество пользователей достаточно велико (нескольких сотен), то заводить их как локальных пользователей я посчитал нецелесообразным.

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

На просторах Интернет был найден проект libnss_mysql (Домашняя страница), который и позволяет проделать описанный выше фокус.

Сборка RPM пакета, установка

Скачем пакет с исходными текстами, например так:

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

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

Распаковываем архив:

Копируем SPEC файл в положенное ему место:

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

еще одну строку

Теперь сборка RPM пакета пройдет успешно.

Собираем пакет:

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

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

Настройка

Настройка MySQL

Если MySQL у Вас еще не запущен, сделайте это командой

Перейдите в каталог /usr/share/doc/libnss-mysql-1.5/sample/linux и скопируйте оттуда файл sample_database.sql в свой каталог:

В данном файле содержится набор SQL команд для создания необходимых таблиц в БД MySQL.

Отредактируйте данный файл в своем домашнем каталоге.

Вам необходимо поправить в нем строки которые создают тестовую группу и тестового пользователя.

Поправим следующим образом:

Также необходимо поправить строки задающие пароли для доступа к БД, вместо rootpass и userpass поставьте «адекватные» пароли для доступа.

После этого выполните:

Создастся БД Auth и необходимые таблицы.

Настройка libnss_mysql

В каталоге /etc находятся 2 файла

Отредактируйте данные файлы, сменив в них параметр password на пароли которые Вы задали в файле sample_database.sql.

Отредактируйте файл nsswitch.conf заменив в нем строки

на строки:

Приступим к настройке квот для пользователей.

Отредактируйте файл /etc/fstab следующим образом:

Вместо строки

поставьте строку:

Перемонтируйте раздел /home

Создадим каталог нашего тестового пользователя testuser:

Нам необходимо создать в файловой системе файлы квот, делается это командой:

Строим таблицу таблицу текущего использования диска:

Правим квоты для пользователя testftp командой

откроется текстовый редактор (по умолчанию vi), Вам необходимо отредактировать значения полей soft и hard задающие мягкое и жесткое ограничение на число блоков для пользователя в данной файловой системе.

После правки данного файла, проверьте, что квоты для пользователя установлены:

Настройка vsftpd

Отредактируйте файл настроек vsFTPd следующим образом:

Перезапустите vsftpd командой:

Тестирование

С клиентского компьютера выполните команду:

Подключение прошло успешно. Теперь попытайтесь закачать на ftp несколько файлов общим размером больше, чем то значение в которое вы выставили квоты.

Заключение

Для создания нового пользователя нам надо:

  1. Создать пользователя в БД
  2. Создать ему домашний каталог
  3. Назначить пользователя владельцем каталога
  4. Назначить права доступа на каталог пользователя
  5. Установить квоты для пользователя

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

Если Вы хотите назначить пользователю такие же квоты такие же как и у другого пользователя выполните: edquota -p testftp2 testftp.


Может распространяться свободно при указании авторства.

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

Articles/DenisFrolov/LibnssMySQLConfiguration (last edited 2008-05-18 11:11:04 by NikolayUlyanitsky)