Настройка аутентификации PAM и сопоставления пользователей с помощью аутентификации Unix
В этой статье мы рассмотрим настройку аутентификации PAM с использованием плагина аутентификации pam и сопоставления пользователей и групп с модулем PAM pam_user_map. Основная аутентификация будет обрабатываться модулем PAM pam_unix, который выполняет стандартную аутентификацию Unix по паролю.
Гипотетические требования
В этом руководстве мы будем исходить из следующих гипотетических требований:
- Пользователь Unix
fooдолжен быть сопоставлен с пользователем MariaDBbar. (foo: bar) - Любой пользователь Unix в группе Unix
dbaдолжен быть сопоставлен с пользователем MariaDBdba. (@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().
© 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/