Spec-Zone.ru › MariaDB

Настройка аутентификации PAM и сопоставления пользователей с помощью аутентификации Unix

В этой статье мы рассмотрим настройку аутентификации PAM с использованием плагина аутентификации pam и сопоставления пользователей и групп с модулем PAM pam_user_map. Основная аутентификация будет обрабатываться модулем PAM pam_unix, который выполняет стандартную аутентификацию Unix по паролю.

Гипотетические требования

В этом руководстве мы будем исходить из следующих гипотетических требований:

  • Пользователь Unix foo должен быть сопоставлен с пользователем MariaDB bar. (foo: bar)
  • Любой пользователь Unix в группе Unix dba должен быть сопоставлен с пользователем MariaDB dba. (@dba: dba)

Создание наших пользователей и групп Unix

Давайте создадим пользователей и группы Unix, которые мы используем для этой гипотетической ситуации.

Сначала давайте создадим пользователя foo и несколько пользователей для группы dba. Обратите внимание, что каждому из этих пользователей необходим пароль.

sudo useradd foo
sudo passwd foo
sudo useradd alice
sudo passwd alice
sudo useradd bob
sudo passwd bob

Затем давайте создадим группу dba и добавим в нее наших двух пользователей:

sudo groupadd dba
sudo usermod -a -G dba alice 
sudo usermod -a -G dba bob 

Нам также необходимо создать пользователей Unix с теми же именами, что и пользователи MariaDB bar и dba. См. здесь, чтобы узнать больше о причинах. Никто не будет входить в систему под этими пользователями, поэтому им не нужны пароли.

sudo useradd bar
sudo useradd dba -g dba

Установка модуля PAM pam_user_map

Далее, давайте установим модуль PAM pam_user_map.

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

В дистрибутивах Linux на основе RHEL, CentOS и подобных, использующих пакеты RPM, нам нужно установить gcc и pam-devel.

sudo yum install gcc pam-devel

В дистрибутивах Linux на основе Debian, Ubuntu и подобных, использующих пакеты DEB, нам нужно установить gcc и libpam0g-dev.

sudo apt-get install gcc libpam0g-dev

Затем мы можем собрать и установить библиотеку следующим образом:

wget https://raw.githubusercontent.com/MariaDB/server/10.4/plugin/auth_pam/mapper/pam_user_map.c 
gcc pam_user_map.c -shared -lpam -fPIC -o pam_user_map.so 
sudo install --mode=0755 pam_user_map.so /lib64/security/ 

Настройка модуля PAM pam_user_map

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

Файл конфигурации модуля PAM pam_user_map — /etc/security/user_map.conf. В соответствии с нашими гипотетическими требованиями, он будет выглядеть следующим образом:

foo: bar
@dba:dba

Установка плагина аутентификации PAM

Далее, давайте установим плагин аутентификации pam.

Войдите в сервер MariaDB и выполните следующее:

INSTALL SONAME 'auth_pam';

Настройка службы PAM

Далее, давайте настроим службу PAM. Мы назовём нашу службу mariadb, поэтому файл конфигурации нашей службы PAM будет расположен по адресу /etc/pam.d/mariadb на большинстве систем.

Поскольку мы выполняем только аутентификацию Unix с модулем PAM pam_unix и сопоставление групп с модулем PAM pam_user_map, наш файл конфигурации будет выглядеть следующим образом:

auth required pam_unix.so audit
auth required pam_user_map.so
account required pam_unix.so audit

Настройка модуля PAM pam_unix

Модуль PAM pam_unix добавляет некоторые дополнительные шаги настройки на многих системах. В основном нам нужно предоставить пользователю, который запускает mysqld, доступ к /etc/shadow.

Если пользователь mysql запускает mysqld, то мы можем сделать это, выполнив следующие действия:

sudo groupadd shadow
sudo usermod -a -G shadow mysql
sudo chown root:shadow /etc/shadow
sudo chmod g+r /etc/shadow

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

Создание пользователей MariaDB

Далее, давайте создадим пользователей MariaDB. Помните, что наша служба PAM называется mariadb.

Сначала создадим пользователя MariaDB для сопоставления пользователей: foo: bar

Это означает, что нам нужно создать пользователя bar:

CREATE USER 'bar'@'%' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON *.* TO 'bar'@'%' ;

Затем создадим пользователя MariaDB для сопоставления по группам: @dba: dba

Это означает, что нам нужно создать пользователя dba:

CREATE USER 'dba'@'%' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' ;

И для того, чтобы обеспечить сопоставление пользователей и групп, нам нужно создать анонимного пользователя, который аутентифицируется с помощью плагина аутентификации pam, который также может PROXY в качестве пользователей bar и dba. Прежде чем мы сможем создать прокси-пользователя, нам, возможно, потребуется очистить некоторые значения по умолчанию:

DELETE FROM mysql.db WHERE User='' AND Host='%';
FLUSH PRIVILEGES;

Затем создадим анонимного прокси-пользователя:

CREATE USER ''@'%' IDENTIFIED VIA pam USING 'mariadb';
GRANT PROXY ON 'bar'@'%' TO ''@'%';
GRANT PROXY ON 'dba'@'%' TO ''@'%';

Тестирование нашей конфигурации

Далее, давайте протестируем нашу конфигурацию, проверив, происходит ли сопоставление. Мы можем проверить это, войдя в систему под каждым из наших пользователей и сравнив возвращаемое значение USER(), которое является исходным именем пользователя, и возвращаемое значение CURRENT_USER(), которое является аутентифицированным именем пользователя.

Сначала давайте протестируем пользователя foo:

$ mysql -u foo -h 172.30.0.198
[mariadb] Password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 22
Server version: 10.3.10-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT USER(), CURRENT_USER();
+------------------------------------------------+----------------+
| USER()                                         | CURRENT_USER() |
+------------------------------------------------+----------------+
| foo@ip-172-30-0-198.us-west-2.compute.internal | bar@%          |
+------------------------------------------------+----------------+
1 row in set (0.000 sec)

Мы можем убедиться, что наш пользователь Unix foo был правильно сопоставлен с пользователем MariaDB bar, посмотрев значение возврата CURRENT_USER().

Затем давайте протестируем пользователя alice из группы dba:

$ mysql -u alice -h 172.30.0.198
[mariadb] Password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.3.10-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT USER(), CURRENT_USER();
+--------------------------------------------------+----------------+
| USER()                                           | CURRENT_USER() |
+--------------------------------------------------+----------------+
| alice@ip-172-30-0-198.us-west-2.compute.internal | dba@%          |
+--------------------------------------------------+----------------+
1 row in set (0.000 sec)

Затем давайте протестируем пользователя bob из группы dba:

$ mysql -u bob -h 172.30.0.198
[mariadb] Password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 20
Server version: 10.3.10-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT USER(), CURRENT_USER();
+------------------------------------------------+----------------+
| USER()                                         | CURRENT_USER() |
+------------------------------------------------+----------------+
| bob@ip-172-30-0-198.us-west-2.compute.internal | dba@%          |
+------------------------------------------------+----------------+
1 row in set (0.000 sec)

Мы можем убедиться, что наши пользователи Unix alice и bob из группы Unix dba были правильно сопоставлены с пользователем MariaDB dba MariaDB, посмотрев возвращаемые значения CURRENT_USER().

Содержание, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/configuring-pam-authentication-and-user-mapping-with-unix-authentication/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API