Офис на Linux
Переход на Linux
На заметку администратору

Футболки кепки значки Линукс Linux
Закажи Linux-атрибутику!!!

Переходим на Linux!
AVIST.BIZ/ Публикации/ Офис на Linux/ Хранение информации о пользователях корпоративной системы в БД MySQL для всех используемых сервисов

Хранение информации о пользователях корпоративной системы в БД 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

 

Продолжение следует!
Прошу присылать замечания и предложения на адрес devel [at] avist.biz

Павел Зайцев, технический директор ООО «Авист» 

Обсуждение на форуме компании "Авист"

Оригинал статьи расположен по адресу: http://avist.biz/article/show/31.html
Разрешается использование статьи при указании авторства и ссылки на сайт
http://www.avist.biz


Комментарии

Заголовок: Отлично
От: Анонимный
Спасибо, ждемс статью про настройку почтового сервера! web-интерфейс imho описывать не нужно - это довольно рутинная работа.
2008-02-25 09:59:19

Заголовок: Замечательно, но ЗАЧЕМ???
От: Анонимный
Ну, подменили вы sql-базой файловую систему. Избавление от LDAP'а еще в какие-то рамки лезет, он чрезвычайно неприятен бессмыссленностью встроенной структуры (т.е. встроенной специализированной базы данных) - это отрыжка американского бюрократического государственного стандарта. Сегодня люди с кастрированными мозгами смеются над тем, как все "прогнило" в СССР, но используют умершие в свое время - и потом возрожденные в упрощенном виде (XML - SGML, LDAP - ISOxxxx) олигофренические измышления бюрократов первых железок-динозавров в комьпютерном мире. Но далее все бессмысленно. Зачем? Вся ваша "работа" - в установке написанных другими модулей, и перенос хранилки информации из файла в БД. БД подменяет файловую систему ненужной прослойкой, которая жрет ресурсы и не делает ничего из того, что проще можно сделать с обычными файлами. ЗАЧЕМ??
2008-02-25 23:22:41

Заголовок: !!!
От: Администратор сайта
Как зачем??? Текстовые файлы с пользователями находятся на локальной машине и использовать их можно только на ней. А вот чтобы использовать единую базу для ВСЕХ КОМПЬЮТЕРОВ организации это решение как раз будет очень кстати! (Аналог ActiveDirectory впринципе получается)
2008-02-25 23:59:54

Заголовок: !!!!
От: Анонимный
Извините, но полный аналог ActiveDirectory можно поднять на связке ldap+kerberos. Вопрос: зачем велосипед? правльно сказано про лишнюю прослойку.
2008-02-26 10:22:41

Заголовок: о pam_mysql
От: Анонимный

У меня без pam_mysql работает. Он точно нужен? попробуйте вычеркнуть его из pam-auth :-)

по крайней мере, когда у меня vsftpd ищет юзеров через pam, то pam использует системную аутентификацию, и благодаря nss-mysql мы авторизируем юзеров.  

2008-02-26 10:46:21

Заголовок: полный аналог ActiveDirectory под linux ???
От: Анонимный
Каким образом на сегодняшний день можно поднять полноценный контролер домена под linux? Самое лучшее, чем можно довольствоваться - это самба, но там используются древние netbios и ntlm времен Windows NT. Поддержка kerberos грядет только в 4-й версии, которая сейчас находится на стадии альфа и неизвестно, сколько лет еще нужно ждать стабильного релиза.
2008-02-26 11:16:58

Заголовок: Re:
От: Администратор сайта

Про полный аналог AD речь не ведется, да и незачем он в большинстве случаев. Тут же показан метод как всё "завернуть" на mysql, что бывает достаточно полезно.

pam для локального входа настраивать не обязательно, libnss уже всё делет за него, но если настривать еще другие сервисы, то без него обойтись трудно.

2008-02-26 11:36:50

Заголовок: о pam_mysql
От: Анонимный

>но если настривать еще другие сервисы, то без него обойтись трудно.

 

Можно пример? попробую у себя сконфигурить этот сервис. Если pam-у подсунуть system-auth для этого сервиса,  то ведь через nss этот system-auth в итоге вытащит данные из MySQL. Или ошибаюсь?

2008-02-26 12:25:00

Заголовок: Re:
От: Администратор сайта

Попробовал убрать в настройках pam работу с pam_mysql.so - в итоге перестала работать аутентификация для imap (для работы с ним использую horde webgroupware) сервера (в статье не описывается). Samba тоже мускульных юзеров не пускает. Вы правы, можно из без libpam обойтись, но если не использовать libnss, то всё перекладывается только на libpam, примерная настройка которого описана.

 

2008-02-26 13:12:35

Заголовок: Велосипед ???
От: Жилкин Сергей

Странная статья, а уж комментарии и того страннее. Как how-to по настройке pam-mssql пойдёт. Но дальше ? К сведению, LDAP сервер данные хранит в одной табличке, а не в куче (в том же MySQL :) ) 

 

P.S.: А Вы беретесь научить Cisco протоколу mysql для обращения за авторизацией пользователей ?  

 

 

2008-02-26 15:30:08

Заголовок: IP в комментариях
От: Жилкин Сергей
Subj это для чего ??? :) 
2008-02-26 15:33:50

Заголовок: Re:
От: Анонимный

>Попробовал убрать в настройках pam работу с pam_mysql.so

Что же я тогда упустил? почему у меня vsftpd работает, по сути он использует pam, но ему достаточно системных pam_unix, в свою очередь системные на основе nsswitch.conf берут данные о пользователе, его пароле, хоуме, группах...

так же openssh берет инфу из базы, может быть imap\samba чего-то другого(большего) хотят от pam, где nss дать не в силах... не уверен правда. 

вот мой /etc/pam.d/ftp 

auth       required     pam_env.so
auth       sufficient   pam_unix.so try_first_pass likeauth nullok
auth       required     pam_deny.so

account    required     pam_unix.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password   sufficient   pam_unix.so try_first_pass use_authtok nullok md5 shadow
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
 

2008-02-26 21:06:58

Заголовок: Re:
От: Юзер

>>sudo apt-get install mysql-server

попробовал эту команду. ОС покрутила пальцем у виска иотказалась делать мне счастье. В чем моя ошибка? ОС FreeBSD 6.2

:-D

З.Ы. Не обращайте внимания. Статья клевая! Только бесполезная ...

З.Ы.Ы. Каптча через текст это тоже клево! Ее 100% не взломают! Не догадаются :)

2008-02-27 01:16:18

Заголовок: Re:
От: Анонимный

>Нужно реализовать web-интерфейс для работы с пользовательской базой

В общем-то да, нужная вещь. Я сейчас обычными insert добавляю пользователей в базу, давно хочу хотя бы bash-скрипт наваять, чтобы ускорить процесс ввода нового пользователя, да все лень, у меня пользователей - мало :-)

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

А те, кто не понимает, насколько это удобно - хранить пользователей в базе и не понимают это направление - пусть идут лесом. 

p.s. Привет Челябинцам из Екатеринбурга! 

2008-02-27 06:19:59

Заголовок: нашел решение проблемы с passwd
От: Анонимный

Вот теперь работает на ура.

кому нужно  

2008-02-27 21:08:04

Заголовок: Re:
От: Анонимный

}{peH c почтой, если кому по этому вопросу помочь :

А строчки в common-password должны быть такими

password sufficient pam_unix.so nullok obscure min=4 max=8 md5
password required pam_mysql.so user=nss passwd=rootmial host=127.0.0.1 db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1 try_first_pass

И того мы можем поменять пароль как у пользователя в /etc/password так и в базе данных. Только вот с правами к бд автор чего-то попутал. Отпишусь на счет прав после.

2008-02-27 21:30:08

Заголовок: Re:
От: icegreg

Автор, создай  форум для обсуждения таска,

icegreg 

2008-02-27 21:45:30

Заголовок: Re:
От: Администратор сайта

icegreg !

Спасибо большое за помощь!!! Форум создам в ближайщее время, еще раз спасибо за участие! 

2008-02-27 21:49:56

Заголовок: Re:
От: icegreg

Очень удобная на самом деле фитча. Все сервисы по умолчанию так или иначе используют pam, а уж только потом оспользуют самопальное sql\ldap. Теперь только остается добавлять группу пользакам и использовать where для донастройки. необходимо только нормальная работа passwd и gpass. Надо посмотреть, что бы useradd умело заносить пользака в БД. Тогда очень удобно и приятно. Во первых один и тотже пароль для всех сервисов.

А если и есть необходимость добавлять пароль зля другого сервиса, то alter и добавить поле mail_pass, ssh_pass и читать уже вот этот пароль.  Дальше дело техники. Так же конечно надо бы добавть поля доменов(NS,CIFS), И тогда просто  кайф. Веди сколько хочешь доменов.  Короче жду форума от автора. Доведем систему  

2008-02-29 20:21:00

Заголовок: Форум
От: Анонимный

Форум для обсуждения и "доведения" системы "до кондиции" :)

http://avist.biz/bb/viewtopic.php?id=2

2008-03-01 21:12:49

Заголовок: Re:
От: Администратор сайта

Подготовлена программа для управления пользователи для libnss-mysql: 

http://avist.biz/page/show/libnssmysqlgui

Прошу любить и жаловать :) 

2008-04-06 10:10:06


Добавить комментарий

Имя:
Заголовок:
Текст:
Введите то, что тут написано(регистр букв ВАЖЕН):
593339

Powered by XST
Contact us by e-mail:
Все права защищены (с) 2007, AVIST Ltd, RUSSIAN FEDERATION
 
Допускается частичное копирование информации с обязательным указанием ссылки http://www.avist.biz
Используемые на сайте материалы сторонних авторов принадлежат их владельцам.