Задача: Поступила задача от Web-разработчика/курирующего приложения компании, «скажи, можно ли дать доступ к БД дилерс с сервера кастомайзера

С чего сперва следует начинать выполнение задачи – а перекладывания ответственности конечно же:

qip (09:05:51 22/04/2022)

Под твою ответственность, восстанавливать все будешь сам

qip (09:05:54 22/04/2022)

?

Сивков Владимир (09:06:22 22/04/2022)

может, с отдельным пользователем с правами только на чтение?

Вот это уже другой разговор и правильное уточнение поставленной задачи.

Портал customizer крутится на Ubuntu 18.04 Server я его вынес в свое время из Docker в полностью настроенное окружение, как это было сделано есть заметка "Адаптация работы портала dealers on Ubuntu 18.04 Server". Пробежав по ней глазами у меня созрели шаги реализации задачи:

Шаг №1: Создаю на портале dealers отдельного пользователя с правами на чтение и под ним можно зайти только с портала кастомайзера:

sudo mysql -u root -pPASSWORD -e "grant select on db_dealers.* to 'us_custom'@'999.999.999.999' identified by 'Aa1234567aA';"

Шаг №2: Проверяю на каком интерфейсе ожидает взаимодействие сервис mysql:

sudo netstat -tulpn | grep mysqld

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      4477/mysqld

Подключение к сервису mysql возможны только на локальной системе, не подходит.

Шаг №3: Изменяю подключение к сервису mysql ото всюду

нужно изменить работу mysqld на адресе 0.0.0.0:3306

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

bind-address            = 0.0.0.0

sudo systemctl restart nginx php7.3-fpm mysql

sudo netstat -tulpn | grep mysqld

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      11666/mysqld

Шаг №4: Т.к. у меня на портале dealers используется надстройка над правилами iptables, а именно firewalld, то создаю новую зону, открываю возможность подключение к порту 3306/tcp и с указанного IP адреса сервиса кастомайзера:

sudo firewall-cmd --new-zone=mysqlzone --permanent

sudo firewall-cmd --permanent --zone=mysqlzone --add-source=999.999.999.999/32

sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp

sudo firewall-cmd –-reload

Шаг №5: Вывожу на консоль текущие правила для зоны public и зоны mysqlzone:

Это текущие правила для зоны public

sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="5.100.250.72/32" service name="ftp" accept
        rule family="ipv4" source address="5.100.250.72/32" port port="49152-65534" protocol="tcp" accept
        rule family="ipv4" source address="95.181.250.248/32" service name="ssh" accept
        rule family="ipv4" source address="79.171.250.176/29" port port="22" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.144/30" port port="22" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.176/29" port port="587" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.144/30" port port="587" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.176/29" port port="49152-65534" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.144/30" port port="49152-65534" protocol="tcp" accept
        rule family="ipv4" source address="79.171.250.176/29" service name="ftp" accept
        rule family="ipv4" source address="79.171.250.144/30" service name="ftp" accept
        rule family="ipv4" source address="2.57.250.62/32" port port="22" protocol="tcp" log prefix="openvpn2" accept

А это текущие правила для созданной зоны mysql:

sudo firewall-cmd --zone=mysqlzone --list-all
mysqlzone (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: 999.999.999.999/32
  services:
  ports: 3306/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Шаг №6: Проверяю подключение с портала customizer к сервису dealers под созданными учетные данными и правами:

sudo mysql -u us_custom -pAa1234567aA -h dealers.ekzorchik.ru db_dealers -e "show tables"

mysql: [Warning] Using a password on the command line interface can be insecure.

+-----------------------------------------+

| Tables_in_db_dealers                    |

+-----------------------------------------+

| agregator                               |

| atribut2item                            |

| balans                                  |

| barrs

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

На заметку: для рабочего сервиса customizer.ekzorchik.ru на работе команды создания пользователя под базу с доступом отовсюду, хотя доступ ограничен IP-адресом посредством надстройки над iptables: firewall-cmd

sudo mysql -u root -pPASSWORD -e "create user 'us_custom'@'%' identified by '612mbddr@';"
sudo mysql -u root -pPASSWORD -e "use production;
ALTER USER 'us_custom'@'%' IDENTIFIED WITH mysql_native_password BY '612mbddr@'"
sudo mysql -u root -pPASSWORD -e "grant select on production.* to 'us_custom'@'%';"

ekzorchik@customizer:~$ sudo mysql -u root -pPASSWORD -e "use mysql;select user,host from mysql.user"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------+-----------+
| user | host |
+------------------+-----------+
| us_custom | % |
| 1cconnector | localhost |
| amigo | localhost |
| amigo_service | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
ekzorchik@customizer:~$

Итого, заметка полностью работоспособна и для себя оформлена и опубликована на портале https://lin.ekzorchik.ru. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.