Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2018-08-04 14:25:21

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

mysql dostęp z zewnątrz - problem

mam problem z skonfigurowaniem serwera i udostępnieniem mysql-a poza localhost.
wykonuje:

root@XXXXXX:~# nmap localhost

Starting Nmap 6.47 ( http://nmap.org ) at 2018-08-04 14:21 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000044s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 995 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 2.66 seconds



root@XXXXXX:~# nmap (adres publiczny serwera)

Starting Nmap 6.47 ( http://nmap.org ) at 2018-08-04 14:21 CEST
Nmap scan report for XXXXXX
Host is up (0.000044s latency).
Not shown: 997 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 2.68 seconds


plik:

/etc/mysql/my.cnf
zawiera odkomentowany wpis
bind-address = 0.0.0.0

iptables czysty:

root@XXXXXX:~# iptables -nvL
Chain INPUT (policy ACCEPT 1337K packets, 201M bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 480K packets, 135M bytes)
pkts bytes target     prot opt in     out     source               destination


netstat:

root@XXXXXX:~# netstat -anp | grep 3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1979/mysqld
root@XXXXXX:~#


gdzie może tkwić problem ?

Offline

 

#2  2018-08-04 14:48:02

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: mysql dostęp z zewnątrz - problem

Może po prostu zmieniasz nie w tym pliku konfiguracyjnym co powinieneś.

Offline

 

#3  2018-08-04 18:07:23

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

w systemie jest tylko jeden plik:

root@XXXXXXX:~# find / -name my.cnf
/etc/mysql/my.cnf

root@XXXXXXX:~#

Offline

 

#4  2018-08-04 18:22:53

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Pokaż lepiej wyniki z roota:

Kod:

ps aux | grep mysqld
lsof -i :3306

Przy okazji wystawianie Mysqla na świat jest diabelnie niebezpieczne, lepiej łączyć się z nim przez tunel SSH lub OpenVPN, albo użyć jakiegoś numeru w typie FWknock czy coś podobnego.

Ja zazwyczaj używam do tego ipseta i takiego skrypta:

Kod:

### cat /etc/profile.d/sshbrama.sh 
#!/bin/sh


if [ -n "$SSH_CLIENT" ]; then 
    if [ "`id -u`" -eq 0 ]; then

    FROMIP=$(echo $SSH_CLIENT |awk '{print $1}' )
    ipset add brama $FROMIP  timeout  86400  --exist;
       fi
fi

i w skrypcie ustawiającym firewalla:

Kod:

 ### grep brama `which firewall`
iptables -t raw -A PREROUTING -m set --match-set brama src -j ACCEPT
ipset create brama hash:net maxelem 65535 timeout 86400 2>/dev/null
iptables -I INPUT  -m set --match-set brama src -j ACCEPT

W ten sposob delikatne usługi są schowane za FW, ale jak ktoś się lognie na roota po SSH, to przez 86400 sekund ma dostęp do wszyskich portów z "delikatnymi" usługami, na podstawie źródłowego adresu IP.

Pozdro

Ostatnio edytowany przez Jacekalex (2018-08-04 18:35:17)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2018-08-04 18:37:33

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

1. Mam świadomość zagrożenia - potrzebuje wykonać migrację bazy (+ upgrade z starszej wersji) i wykonać test. Produkcyjna maszyna za NAT-em.
zatem:

root@XXXXXXX:~# ps aux | grep mysqld
root      1630  0.0  0.0   4328  1620 ?        S    sie03   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     1979  0.0  1.2 615736 48764 ?        Sl   sie03   1:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root     16561  0.0  0.0  12736  2264 pts/0    S+   18:36   0:00 grep mysqld
root@XXXXXXX:~#


root@XXXXXXX:~# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1979 mysql   10u  IPv4  12228      0t0  TCP localhost:mysql (LISTEN)
root@XXXXXXX:~#


dzięki za rozwiązanie... wygląda na bezpieczne.

Offline

 

#6  2018-08-04 18:49:03

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

1. Naucz się używać znaczniki CODE.

2. Mysql słucha u Ciebie na

mysqld  1979 mysql   10u  IPv4  12228      0t0  TCP [b]localhost:mysql[/b] (LISTEN)[/quote]
czyli localhoście.

1. Mam świadomość zagrożenia - potrzebuje wykonać migrację bazy (+ upgrade z starszej wersji) i wykonać test. Produkcyjna maszyna za NAT-em.[/quote]
Jednorazowo to zrób zrzut bazy [b]mysqldump[/b]em lokalnie, skopiuj plik z kopią bazy po SSH i wczytaj na drugim serwerze.
Będziesz miał w ten sposób porządany efekt ale za 5 minut, a nie po 3 godzinach kombinowania, dlaczego Mysql nie słucha na 0.0.0.0:3306.

Ostatnio edytowany przez Jacekalex (2018-08-04 18:53:21)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2018-08-04 19:57:29

  meciarz - Użytkownik

meciarz
Użytkownik
Zarejestrowany: 2010-06-08

Re: mysql dostęp z zewnątrz - problem

a czy w pliku my.cnf masz linijkę

Kod:

skip-networking

jeśli masz, to powinieneś ją zahashować

Offline

 

#8  2018-08-04 20:17:27

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Problem może też być taki, że serwer Mariadb ma w Debianie inne pliki konfiguracyjne:

Kod:

### dpkg -L mariadb-server-10.1 | grep cnf
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf

Kod:

 ### grep bind  /etc/mysql/mariadb.conf.d/50-server.cnf  
bind-address        = 127.0.0.1

Wygląda na to, że [b]mysqld[/b] w Debianie  w ogóle nie zagląda do [b]/etc/mysql/my.cnf[/b]

Ostatnio edytowany przez Jacekalex (2018-08-04 20:25:53)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2018-08-04 21:11:06

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

1.

Kod:

root@XXXXXXX:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1639
Server version: 5.5.40-1 (Debian)

to starsza wersja Mysql-a jeszcze nie MariadB. 

dla pewności:

Kod:

root@XXXXXXX:~# dpkg -L mariadb-server-10.1 | grep cnf
dpkg-query: pakiet "mariadb-server-10.1" nie jest zainstalowany
Użyj dpkg --info (= dpkg-deb --info), aby zobaczyć informacje o pakiecie,
oraz dpkg --contents (= dpkg-deb --contents), aby sprawdzić jego zawartość.

2.
to już sprawdziłem:

Kod:

skip-networking

nie ma tej opcji w pliku.

3.
wygląda że musi czytać /etc/mysql/my.cnf, jest jeszcze plik /etc/mysql/debian-start i wygląda tak:

Kod:

source /usr/share/mysql/debian-start.inc.sh

MYSQL="/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf"
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
MYUPGRADE="/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf"
MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf"
MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
MYCHECK_PARAMS="--all-databases --fast --silent"
MYCHECK_RCPT="root"

ponieważ to nie jest maszyna która wyszła z moich rąk zastanawiam się czy nie ma czegoś natywnego... :(

Offline

 

#10  2018-08-04 21:28:25

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Server version: 5.5.40-1 (Debian)[/quote]
To jakaś prehistoryczna wersja nie  tylko serwera Mysql ale całego systemu Debian.

Tutaj:
https://packages.debian.org/wheezy/mysql-server

widać, że dużo starszy od wersji Wheezy i Jessie, gdzie była wesja mysql-server-5.5.60.

W aktualnym stabilnym Debianie to już metapakiet, który wciąga inny metapakiet: [b]default-mysql-server[/b], który z kolei wciąga właśnie [b]mariadb-server-10.1[/b].

Dowód rzeczowy:
https://packages.debian.org/stretch/mysql-server


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11  2018-08-05 16:30:46

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

hm.. może nie jest aż tak źle:

Kod:

root@XXXXXXX:~# cat /etc/debian_version
8.0
root@XXXXXXX:~#

wersja 5.5.4X
była chyba w debianie 7, zresztą tracker
[url]https://tracker.debian.org/pkg/mysql-5.5[/url]
datuje ją na lata 2016

ale wróćmy do meritum - jakieś sugestie jeszcze by serwer zmusić do pracy poza localhost ?

Offline

 

#12  2018-08-05 17:13:42

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Pokaż lepiej wynik:

Kod:

grep -r bind-addres  /etc/mysql/*

Gdzieś w tym folderze musi być plik, który to definiuje.

PS:
Najstarszy wpis w tym trackerze mysql-5.5:

[2015-12-15]Subject: Accepted mysql-5.5 5.5.46-0+deb6u1 (source all amd64) into squeeze-lts, squeeze-lts[/quote]
Więc 5.5.40 był chyba trochę wczesniej niż 15 grudnia 2015. xD

Poza tym:

Squeeze is the development codename for Debian 6.0.[/quote]
https://wiki.debian.org/DebianSqueeze

Chyba że masz tam nie Debiana tylko jakieś Ubuntu LTS, np 12.04 albo 14.04.

Ostatnio edytowany przez Jacekalex (2018-08-05 17:27:28)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#13  2018-08-05 23:05:59

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

OK - d początku:)  jest jeden plik i ma localhost zahaszowany:

Kod:

root@XXXXXXX:~# grep -r bind-addres  /etc/mysql/*
/etc/mysql/my.cnf:#bind-address         = 127.0.0.1
/etc/mysql/my.cnf:bind-address = 0.0.0.0
root@XXXXXXX:~#

dalej ?

Offline

 

#14  2018-08-05 23:28:12

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Wyłącz mysqla odpalanego przez managera uruchamiania systemu,
i potem tak (z konta root):

Kod:

sudo -u mysql bash

i w powłoce usera mysql odpalasz:

Kod:

/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf

Zobacz, czy wtedy będzie słuchał na wszyskich adresach.

Ostatnio edytowany przez Jacekalex (2018-08-05 23:32:42)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2018-08-06 00:18:51

  hiper - Użytkownik

hiper
Użytkownik
Zarejestrowany: 2018-08-04

Re: mysql dostęp z zewnątrz - problem

zrobione:

Kod:

root@XXXXXXX:~# /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

root@XXXXXXX:~# sudo -u mysql bash
mysql@XXXXXXX:/root$ /usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf
180806  0:11:32 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
mysql@XXXXXXX:/root$

mysql@XXXXXXX:/root$ nmap AA.BB.CC.DD
Starting Nmap 6.47 ( http://nmap.org ) at 2018-08-06 00:16 CEST
Nmap scan report for AA.BB.CC.DD
Host is up (0.0011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
mysql@XXXXXXX:/root$

no i zagadał.. co dalej ?

Ostatnio edytowany przez hiper (2018-08-06 00:19:10)

Offline

 

#16  2018-08-06 00:37:37

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

Kod:

mysql -h {AA.BB.CC.DD} -u root -p

i powinien grzecznie poprosić o hasło albo odrzucić polączenie, jeśli root ma dostęp
tylko z localhosta.
Oczywiście

Kod:

{AA.BB.CC.DD}

oznacza adres IP, nazwę hosta lub domenę serwera.

Chyba, że go firewall odfiltruje albo routing nawala.

Powinieneś zobaczyć coś podobnego do tego:

Kod:

mysql -h 127.0.0.1 -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 19
Server version: 10.1.34-MariaDB Gentoo Linux mariadb-10.1.34

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)]> status
--------------
mysql  Ver 15.1 Distrib 10.1.34-MariaDB, for Linux (x86_64) using readline 7.0

Connection id:        19
Current database:    
Current user:        root@localhost
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:        /usr/bin/less
Using outfile:        ''
Using delimiter:    ;
Server:            MariaDB
Server version:        10.1.34-MariaDB Gentoo Linux mariadb-10.1.34
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:        3306
Uptime:            18 min 58 sec

Threads: 8  Questions: 3292  Slow queries: 0  Opens: 3563  Flush tables: 1  Open tables: 6  Queries per second avg: 2.892

Note that you are running in safe_update_mode:
UPDATEs and DELETEs that don't use a key in the WHERE clause are not allowed.
(One can force an UPDATE/DELETE by adding LIMIT # at the end of the command.)
SELECT has an automatic 'LIMIT 1000' if LIMIT is not used.
Max number of examined row combination in a join is set to: 1000000

--------------

MariaDB [(none)]>

Ostatnio edytowany przez Jacekalex (2018-08-06 03:34:37)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#17  2018-08-06 17:46:09

  mlotek - Użytkownik

mlotek
Użytkownik
Skąd: się biorą dzieci ?
Zarejestrowany: 2018-07-25

Re: mysql dostęp z zewnątrz - problem

Zaloguj się jeszcze z localhosta i wykonaj

Kod:

SELECT User, Host FROM mysql.user;

żeby sprawdzić czy wybrany użytkownik może się logować z zewnątrz

Offline

 

#18  2018-08-06 19:46:17

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: mysql dostęp z zewnątrz - problem

[quote=mlotek]Zaloguj się jeszcze z localhosta i wykonaj

Kod:

SELECT User, Host FROM mysql.user;

żeby sprawdzić czy wybrany użytkownik może się logować z zewnątrz[/quote]
Po pierwsze, jak [b]@hiper[/b] dostanie komunikat ACCES DENIED w typie:

Kod:

ERROR 1045 (28000): Access denied for user 'root'@'192.168.0.10' (using password: YES)

to wtedy będziemy się martwić.

Po drugie, jeśli tam jest np [b]phpmyadmin[/b], to można w nim łatwo obejrzeć i  wyklikać dowolne uprawnienia.

Po trzecie uprawneinia w Mysql się sprawdza poleceniem [b]show grants for USER@HOST[/b],
np:

Kod:

MariaDB [(none)]> show grants for root@'%';
+--------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@%                                                                                                                          |
+--------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*XXXXXXXXXXXXXXXXXXXXXXXX' REQUIRE SSL WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

To by było na tyle

Ostatnio edytowany przez Jacekalex (2018-08-06 19:54:41)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.015 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00152 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.209.66.87' WHERE u.id=1
0.00292 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.209.66.87', 1711643960)
0.00039 SELECT * FROM punbb_online WHERE logged<1711643660
0.00101 DELETE FROM punbb_online WHERE ident='47.128.123.247'
0.00077 DELETE FROM punbb_online WHERE ident='47.128.42.172'
0.00065 SELECT topic_id FROM punbb_posts WHERE id=320458
0.00177 SELECT id FROM punbb_posts WHERE topic_id=30569 ORDER BY posted
0.00039 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30569 AND t.moved_to IS NULL
0.00024 SELECT search_for, replace_with FROM punbb_censoring
0.00108 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30569 ORDER BY p.id LIMIT 0,25
0.00089 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30569
Total query time: 0.01176 s