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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
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
Może po prostu zmieniasz nie w tym pliku konfiguracyjnym co powinieneś.
Offline
w systemie jest tylko jeden plik:
root@XXXXXXX:~# find / -name my.cnf
/etc/mysql/my.cnf
root@XXXXXXX:~#
Offline
Pokaż lepiej wyniki z roota:
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:
### 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:
### 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)
Offline
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
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
a czy w pliku my.cnf masz linijkę
skip-networking
jeśli masz, to powinieneś ją zahashować
Offline
Problem może też być taki, że serwer Mariadb ma w Debianie inne pliki konfiguracyjne:
### 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
### 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)
Offline
1.
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:
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:
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:
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
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
hm.. może nie jest aż tak źle:
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
Pokaż lepiej wynik:
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
OK - d początku:) jest jeden plik i ma localhost zahaszowany:
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
Wyłącz mysqla odpalanego przez managera uruchamiania systemu,
i potem tak (z konta root):
sudo -u mysql bash
i w powłoce usera mysql odpalasz:
/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)
Offline
zrobione:
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
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
{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:
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)
Offline
Zaloguj się jeszcze z localhosta i wykonaj
SELECT User, Host FROM mysql.user;
żeby sprawdzić czy wybrany użytkownik może się logować z zewnątrz
Offline
[quote=mlotek]Zaloguj się jeszcze z localhosta i wykonaj
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:
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:
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)
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00007 | SET NAMES latin2 |
0.00124 | 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='3.137.175.80' WHERE u.id=1 |
0.00079 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.175.80', 1732677177) |
0.00040 | SELECT * FROM punbb_online WHERE logged<1732676877 |
0.00112 | DELETE FROM punbb_online WHERE ident='85.208.96.209' |
0.00062 | SELECT topic_id FROM punbb_posts WHERE id=320404 |
0.00006 | SELECT id FROM punbb_posts WHERE topic_id=30569 ORDER BY posted |
0.00075 | 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.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00170 | 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.00091 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30569 |
Total query time: 0.00785 s |