![]() |
|
|
![]() Закажи Linux-атрибутику!!!
|
Хранение информации о пользователях корпоративной системы в БД MySQL для всех используемых сервисовПоместил: Администратор сайта Дата:2008-02-24 20:33:40Хранение информации о пользователях корпоративной системы в БД MySQL для всех используемых сервисов. Зачем оно нужно? Многие программы используют для аутентификации собственные базы данных пользователей, что существенно затрудняет администрирование корпоративной информационной системы. Данное решение позволяет справиться с этой задачей, путем создания единой базы данных пользователей для различных сервисов. Почему MySQL, а не LDAP? Cуществует достаточно много opensource проектов, где часто используется MySQL. Это позволяет просто интегрировать полученную систему к конкретному приложению. А также намного проще администрировать, настраивать, модифицировать структуру БД MySQL, чем LDAP. Установка и настройка MySQL MySQL — свободная система управления базами данных (СУБД). MySQL является собственностью компании MySQL AB, осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор. Помимо этого компания MySQL AB разрабатывает функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации. # sudo apt-get install mysql-server Во время конфигурирования установите пароль для root. Устанавливаем phpMyAdmin для более наглядной работы с базой данных # sudo apt-get install phpmyadmin Управление пользователями, NSS и PAM Linux система многопользовательская. По умолчанию, большинство дистрибутивов используют «классический» набор файлов, в которых хранится информация о пользователях и группах: /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow. Во многих ситуациях этого вполне достаточно, но иногда возникает необходимость в интеграции Linux в более или менее чужеродное, либо просто распределенное окружение, и именно в этот момент к нам на помощь приходят такая интересная подсистема, как NSS Name Service Switch. Основная задача NSS создать модульное окружение для управления пользователями. Реализовано это посредством загружаемых библиотек. Основные вызовы NSS реализованы в библиотеке libc, а libc в свою очередь загружает и вызывает бакэнды. Мы будем использовать nss-mysql. Подсистема PAM (Pluggable Authentification Modules) идейно очень схожа с NSS, но отличается от нее назначением. Основная задачам PAM аутентификация пользователей (проверка паролей, прав доступ, ограничений и так далее). Как и NSS, PAM состоит из набора основных библиотек и бакэндов, причем необходимые бакэнды, порядок их вызова и некоторые опциональные параметры, определяются в конфигурационных файлах PAM, обычно они расположены в каталоге /etc/pam.d. Главным отличием PAM от NSS (кроме естественно назначения) является то, что PAM является не составной и неотъемлемой частью libc, а отдельным множеством библиотек. Основная часть стандартных утилит UNIX для управления пользователями и группами и получения информации о них, в большинстве дистрибутивов Linux общего назначения, адаптирована и собрана с поддержкой NSS и PAM. К таким утилитам относятся passwd, chsh, chfn, id, who и другие. NSS также используется даже такими утилитами как ls, find, ps то есть всеми теми программами, которые отображают имя пользователя. Соответственно, если программа запрашивает у пользователя пароль скорее всего она использует и NSS, и PAM (например XDM или KDM). Большинство программ, в чьи функции входит обработка почты, также используют NSS. Любая служба, не описанная в одном из файлов PAM из каталога /etc/pam.d, будет использовать правила, взятые из /etc/pam.d/other. По умолчанию установлена политика deny, как и должно быть. Установка и настройка NSS-MySQL Устанавливаем библиотеку nss-mysql # sudo apt-get install libnss-mysql Переходим в папку с примером структуры базы данных пользователей и групп # cd /usr/share/doc/libnss-mysql/examples Создаем базу с названием nss_mysql # mysql -u root -ppassword mysql> CREATE DATABASE `nss_mysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; mysql> quit; Импортируем данные в созданную базу # mysql -u root -ppassword nss_mysql < sample.sql Настройка теневых паролей позволяет видеть зашифрованные пароли только root. Нужно правильно установить права таблицы и колонки в них, чтобы даже узнав логин и пароль (в данном случае это пользователь nss_shadow) от базы данных, нельзя было прочитать колонку с паролями. # mysql -u root -p password > GRANT select(user_name,user_id,uid,gid,realname,shell,homedir,status) on nss_mysql.user to nss@localhost identified by 'password'; > GRANT select(group_name,group_id,gid,group_password,status) on nss_mysql.groups to nss@localhost identified by 'password'; > GRANT select(user_id,group_id) on nss_mysql.user_group to nss@localhost identified by 'password'; > GRANT select(user_name, password, user_id, status, realname, lastchange, min, max, warn, inact, expire ) on nss_mysql.user to nss_shadow@localhost identified by 'securepassword'; > FLUSH PRIVILEGES; > quit Правим пароли # sudo mcedit /etc/nss-mysql.conf users.db_user = nss; users.db_password = password; # sudo mcedit /etc/nss-mysql-root.conf shadow.db_user = nss_shadow; shadow.db_password = securepassword; Редактируем файл /etc/nsswitch.conf #sudo mcedit /etc/nsswitch.conf passwd: compat mysql group: compat mysql shadow: compat mysql Устанавливаем права доступа к файлу nss-mysql-root.conf с правом чтения только для root # sudo chmod 400 /etc/nss-mysql-root.conf # sudo getent shadow Должны появиться пользователи из БД: delancie:$1$pp$FiHzni87Pc3CeOaG24jZV/:11704:0:0:0:0:0: guillaume:$1$pp$FiHzni87Pc3CeOaG24jZV/:11704:0:0:0:0:0: linus:$1$pp$FiHzni87Pc3CeOaG24jZV/:11704:0:0:0:0:0: Можно попробовать зайти под пользователем linus и паролем pass. Установка и настройка PAM-MySQL Устанавливаем библиотеку pam-mysql # sudo apt-get install libpam-mysql Теперь нужно настроить политики аутентификации, редактируя файлы каталоге в /etc/pam.d/ #/etc/pam.d/common-account account required pam_unix.so account optional pam_mysql.so user=nss passwd=password host=127.0.0.1 db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1 # /etc/pam.d/common-auth - authentication settings common to all services auth requisite pam_unix.so nullok_secure auth optional pam_mysql.so user=nss passwd=password host= 127.0.0.1 db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1 auth optional pam_smbpass.so migrate # /etc/pam.d/common-password - password-related modules common to all services password requisite pam_unix.so nullok obscure min=4 max=8 md5 password required pam_smbpass.so nullok use_authtok try_first_pass password sufficient pam_mysql.so user=nss passwd=password host=127.0.0.1 db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1 Установка и настройка SAMBA Samba — свободная программа для работы с протоколом SMB/CIFS, выпущена под GNU General Public License. Начиная с третьей версии Samba предоставляет службы файлов и печати для различных клиентов Microsoft Windows, и может интегрироваться с Windows Server: либо как Основной контроллер домена (PDC), либо как член домена. Она также может быть частью домена Active Directory. # sudo apt-get install samba # sudo apt-get install libpam-smbpass smbclient В некоторых файлах настройки PAM изменения были внесены на этапе настройки pam-mysql. Пример можно найти выше. (Изменяются файлы /etc/pam.d/common-password и /etc/pam.d/common-auth, путем добавления модуля pam_smbpass.so .) Для того, чтобы пароли пользователей менялись через SAMBA, нужно отредактировать /etc/pam.d/samba: @include common-auth @include common-account @include common-session @include common-password Теперь редактирем /etc/samba/smb.conf: unix password sync = yes pam password change = yes И перезагружаем сервис samba, используя команду /etc/init.d/samba restart. Теперь залогиньтесь пользователем linus. В приветствии должна помимо всего прочего появиться строчка «Added user linus», что говорит о том, что пользователь добавлен в базу SAMBA. Попробуейте подключиться, используя smbclient: smbclient -L localhost -U linus Выявленные проблемы Не получается сменить пароль пользователя, используя passwd: passwd: User not known to the underlying authentication module passwd: password unchanged Список задач 1. Нужно реализовать интерфейс для работы с пользовательской базой, а также с разграничением прав на работу с сервисами. (Частично выполнено: http://avist.biz/page/show/libnssmysqlgui ) 2. Настроить работу почтового сервера, прокси-сервера, ftp-сервера.
Подготовлен графический интерфейс для libnss-mysql: страничка проекта: http://avist.biz/page/show/libnssmysqlgui
Продолжение следует! Павел Зайцев, технический директор ООО «Авист» Обсуждение на форуме компании "Авист" Оригинал статьи расположен по адресу: http://avist.biz/article/show/31.html Комментарии
Добавить комментарий |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Powered by XST
Contact us by e-mail: Все права защищены (с) 2007, AVIST Ltd, RUSSIAN FEDERATION |
![]() |