Dlaczego źle jest mieć słabe hasło użytkownika MySQL?

23

Przedstawiono mi argument dotyczący „nie potrzebujesz silnego hasła użytkownika mysql, ponieważ aby go użyć, mieliby oni już dostęp do twojego serwera”. Mówimy o 4-cyfrowym haśle, które jest standardowym słowem w słowniku angielskim na stronie internetowej firmy.

Nie wpływając na odpowiedzi z własnej wiedzy i doświadczenia, chciałbym pokazać im odpowiedzi z bezinteresownego źródła zewnętrznego. Czy ktoś ma ochotę włączyć się do tego? Programowanie / praktyczne odpowiedzi będą mile widziane.

Obywatel
źródło
7
Brzmi jak jedno z tych root:rootloginów.
3
Czterocyfrowe hasło? Jak 1337?
Gumbo,

Odpowiedzi:

39

Ktokolwiek wysunął ten argument, zdaje się mówić: „Gdy ktoś postawi stopę w drzwiach, równie dobrze możesz dać mu pełny dostęp”. Zgodnie z tą logiką zapora sieciowa eliminuje potrzebę stosowania wszystkich haseł w sieci wewnętrznej.

Silne hasła to jeden krok w kierunku ograniczenia szkód wyrządzonych przez wtargnięcie do sieci. Nie ma powodu, aby podnosić ręce do góry, ponieważ tylko jedna mała część twojej sieci została naruszona.

meagar
źródło
13
„Obrona w głębi” to motto dnia.
Scott Pack
3
Pamiętaj tylko, że po uzyskaniu dostępu do systemu plików będą mieli dostęp do pliku PHP lub pliku konfiguracyjnego, w którym i tak przechowywane jest hasło, chyba że skonfigurujesz w tym celu dodatkowe zabezpieczenia, co zwykle jest trudne lub niemożliwe na współdzielonych hostach .
Lotus Notes,
2
@Lotus Zakładając, że serwery PHP i MySQL są tą samą maszyną.
Środa
2
@Lotus Notes, w żadnym wypadku nie powinieneś używać użytkownika root. Dobrze zaprojektowana aplikacja umożliwia tylko niezbędny dostęp. W większości przypadków obejmuje to dostęp do danych, ale nie zawsze wszystkie dane, aw niektórych przypadkach może to być nawet tylko do odczytu.
bradlis7,
1
@Lotus Notes: Wiele hostów współdzielonych wykorzystuje suPHP, który zapewnia chmod-ing 660 wrażliwych plików PHP.
webbiedave
14

Naprawdę wraca do idei „ Defense in Depth ”, aby co najmniej silne hasło mogło je spowolnić, abyś mógł je odkryć i zablokować. Podoba mi się analogia posiadania jednego klucza dla zamkniętej społeczności w porównaniu do klucza na drzwiach każdego domu.

Koder mocy
źródło
Czekałem, aż ktoś wymyśli analogię klucza / drzwi: |
Środa
Ale inny klucz do każdego drzwi w domu jest prawdopodobnie za burtą. Gdzie rysujesz linię?
Dan.
4
@ Dan: ale w bezpiecznym obiekcie można oczekiwać innego klucza do każdych drzwi, prawda? W domu jednorodzinnym nie - można oczekiwać, że wszystkie zamki będą używać tego samego klucza. Ale we wspólnym domu (jak u współlokatorów) zależałoby to od filozofii gospodarstwa domowego: albo otwarte drzwi (być może wszystkie drzwi z tym samym kluczem), albo różne klucze dla każdego współlokatora.
wallyk
5
Zamki i inne urządzenia bezpieczeństwa są używane przede wszystkim dla złodzieja amatora lub tylko w celu odstraszania profesjonalisty. Kolejnym środkiem odstraszającym jest odpowiednie oświetlenie wokół domu i unikanie regularnych rutynowych czynności, które pokazują, gdzie i co robisz przez cały dzień. Nigdy nie rozmawiaj z nieznajomym na temat planów urlopowych i ostrzegaj lokalną policję, jeśli Cię nie będzie na dłuższy czas. Zawsze staraj się, aby wyglądało to tak, jakby ktoś był w domu. Ponadto, aby ... czekać, jakie było pytanie?
Stephen Watkins,
6

Wiele zależy od konfiguracji serwera MySQL. Jeśli akceptuje tylko żądania poza domowym adresem IP (127.0.0.1), oznacza to, że jest ono umiarkowanie bardziej bezpieczne.

Biorąc pod uwagę scenariusz, w którym zezwalasz na zdalne adresy IP, staje się to znacznie większą sprawą.

Oprócz tego zawsze dobrze jest mieć silne bezpieczeństwo w przypadku włamania - lepiej, aby odeszli jak najmniej.

DivinusVox
źródło
6

Czy w rachunkowości jest blokada na kasie Petty Cash? Jeśli tak, dlaczego? Czy budynek nie ma fizycznego bezpieczeństwa?

JohnFx
źródło
5

nie potrzebujesz silnego hasła użytkownika mysql, ponieważ aby go użyć, mieliby oni już dostęp do twojego serwera

Nie jest to prawdą, ponieważ mysql może być również używany w środowisku między sieciami klient-serwer, a domyślnie jedyne, czego potrzebujesz, to użytkownik / przepustka, aby uzyskać dostęp do bazy danych (offcourse, port 3306 otwarty i serwer publicznie widoczny ).

Denis Biondic
źródło
5

W rzeczywistości może być na odwrót: jeśli mają dostęp do mysql, mogą uzyskać dostęp do samego systemu operacyjnego serwera.

  1. Zapytania MySQL LOAD_FILE i SELECT ... INTO OUTFILE umożliwiają użytkownikom mysql odczytywanie i zapisywanie plików w bazowym systemie plików. Każdy plik, do którego użytkownik mysql również ma dostęp (czy Twój MySQL działa jako root?). Jeśli pod Linuksem / UNIXem po prostu zapytaj WYBIERZ PLIK_ŁADU ('/ etc / passwd') i zobacz, jak się uśmiechają. Jeśli mysqld działa jako root, możesz spróbować SELECT LOAD_FILE ('/ etc / shadow') i obserwować, jak płacze sysadmin.
  2. Wiele razy pod Linuksem użytkownik „root” mysql ma takie samo hasło jak użytkownik „mysql” serwera (ten, który uruchamia mysqld). Jeśli to hasło jest trywialne (lub możliwe do znalezienia przez automatyczne narzędzia, takie jak medusa / hydra), możesz po prostu SSH / telnet bezpośrednio do serwera bazy danych i wygłupiać się.
Renik
źródło
4

Jeśli ktoś uzyska dostęp root do twojego serwera, nie będzie potrzebował żadnego hasła MySQL. Ale jeśli mogą uruchamiać aplikacje na serwerze tylko jako użytkownik inny niż root i nie będący użytkownikiem sieci, silne hasło MySQL może nadal zapisywać dane. Ale tak, większość hacków pochodzi z sieci, co oznacza, że ​​haker uzyska dostęp do twojego konta internetowego i może w ten sposób wyodrębnić hasło DB z plików PHP.

Wszystko to przy założeniu, że twój serwer MySQL nie akceptuje połączeń z dowolnego miejsca poza lokalnym hostem. Jeśli tak, to potrzebujesz silnego PW.

rustyx
źródło
4

Coś, co wydaje się tutaj pominięte, to czy ufasz swoim użytkownikom w zaufanej sieci?

Szczerze mówiąc, nie wiem, bo wiem, jak byłem, kiedy zaczynałem w branży IT. Szturchałem i grzebałem w obszarach, do których nie miałem prawa, i szczerze mówiąc, słabe hasło do MySQL byłoby dla mnie przyjemnością, ponieważ skorzystałbym z szansy na szczęście i dostałem się, i mogłem siać spustoszenie (przez przypadek, oczywiście).

Co się stanie, jeśli ktoś użyje inżynierii społecznej, aby uzyskać dostęp do zaufanej sieci? Więc co robisz? Jeśli znajdują się na maszynie za zaporą firewall, to blammo, twoje solidne zabezpieczenia zapory są zrujnowane i trafiają prosto na maszynę.

Silne hasła są tak proste do zrobienia, a istnieje wiele narzędzi do zarządzania hasłami, które ułatwiają bezpieczeństwo haseł, więc naprawdę nie ma wymówki, aby tego nie robić.

Mark Henderson
źródło
Chodzi o to, że nie powinieneś zezwalać na połączenia zdalne w MySQL, a jeśli potrzebujesz, to określ localhost/ 127.0.0.1jako host. W ten sposób nikt nie może uzyskać dostępu do baz danych na zewnątrz (nawet tych w tej samej sieci).
Chazy Chaz,
2

Eh Jeśli twój serwer jest zablokowany IP, a użytkownik jest ograniczony do SELECT na zestawie tabel, w których nie obchodzi Cię informacja, to nie jest wielka sprawa.

Z drugiej strony, ustawiam moje hasła MySQL, uderzając przez minutę w klawiaturę, i kopiuję wklejając powstały bełkot do chronionego pliku, do którego odwołuję się w kodzie za każdym razem, gdy muszę się zalogować. Tak to powinno działać.

Dlaczego to ułatwia? Jeśli hasło jest dołączone do ograniczonego konta lokalnego (jak wszystkie powinny być), to dlaczego je wpisujesz? Jeśli tak nie jest, powinno mieć hasło, którego siła zależy od wartości chronionych danych.

Satanicpuppy
źródło
2

Informacje o koncie / dostępie do mySQL są przechowywane w osobnym pliku niż rzeczywiste bazy danych. W ten sposób możesz po prostu przeciągnąć i upuścić inny plik na jego miejsce. Z mySQL, jeśli mają dostęp do zapisu do odpowiedniej części twojego systemu plików, gra się kończy.

John Robertson
źródło
2

Ponieważ wymagania się zmieniają ...

Tak więc dzisiejszy serwer, który ogranicza się do akceptowania połączeń MySQL tylko z maszyną lokalną, może zostać jutro otwarty, aby można było użyć zewnętrznego narzędzia do zarządzania bazą danych. Osoba wykonująca tę konfigurację może nie wiedzieć, że używane są wyjątkowo słabe hasła.

Jeśli Twojemu użytkownikowi nie przeszkadza konieczność zapamiętania dobrego, silnego (np. Długiego, losowego) hasła, rozważ uczynienie go bardzo silnym, a następnie przechowywanie go w .my.cnf- nawet wygodniejszym niż posiadanie słabego hasła, które musi wpisać. Oczywiście ma to również wpływ na bezpieczeństwo, ale musisz gdzieś przechowywać hasło, na przykład aplikacje, które mają do niego dostęp, więc już zabezpieczasz kopie hasła.

Przeczytaj także, co powiedział @meagar.

Sean Reifschneider
źródło
1

Założenie, że mieliby już dostęp, nie jest prawdziwe. Jeśli jednak mają dostęp i nie mają uprzywilejowanego konta, nadal mogą łatwo zhakować hasło mysql.

Ponadto, jeśli serwer jest serwerem produkcyjnym na żywo, to reklamujesz się w Internecie. oznacza to, że w pewnym momencie ktoś będzie próbował przeprowadzić atak brute force na tym serwerze, w tym mysql, zarówno port, jak i konto użytkownika.

jeśli zależy Ci na danych, podstawowe kroki to mieć inne hasło roota dla bazy danych niż dla użytkownika root. inni stwierdzili, że powinieneś mieć również najniższe możliwe uprawnienia dla użytkowników i programów.

4-znakowe hasło można zhakować w ciągu kilku minut na dość tanim komputerze.

Może po prostu powtarzam to, co powiedzieli inni, ale im więcej masz amunicji dla swojego menedżera, tym lepiej.

weismanm
źródło
1

Wiele przyczyn z prawdziwego scenariusza było już wcześniej pisanych, więc dodam ten „filozoficzny”. Stosowanie silnych haseł i środków ostrożności w celu zwiększenia bezpieczeństwa to filozofia pracy. Sposób myślenia.

Używanie słabego hasła teraz, ponieważ mysql działa tylko na 127.0.0.1 i tylko użytkownik root ma do niego dostęp, pokazuje, że nie wybiegasz w przyszłość. Co się stanie, jeśli pewnego dnia będziesz musiał przyznać mysql dostęp przez sieć. Czy pamiętasz, aby objąć wszystkie zabezpieczenia, które pozostawiłeś?

Dobry administrator stawia najgorszy scenariusz na pierwszym miejscu w punkcie paranoi.

Cristian Vrabie
źródło
1

Zależy to od tego, jakie prawa ma użytkownik, należy zawsze blokować rzeczy na wielu poziomach. Zależy to również od danych przechowywanych w bazie danych. Powiedz też hipotetycznie, że w MySQL istnieje luka, która pozwala im przejąć całą bazę danych, ale wystarczyło zalogować się na dowolne konto użytkownika. Jeśli twoje hasło było silne, ta luka byłaby wyciszona. Ale tak naprawdę zależy to tylko od konkretnego przypadku.

ddcruver
źródło
W przypadku naruszenia bezpieczeństwa serwera MySQL użytkownik i hasło są bezużyteczne. Pliki bazy danych nie są szyfrowane. Użytkownicy MySQL dla aplikacji powinni mieć hosta lokalnego / 127.0.0.1, aby nie można ich było używać zdalnie ani wyłączać połączeń zdalnych.
Chazy Chaz,
1

Bardzo łatwo jest podszywać się pod kogoś innego w mysql. Biorąc pod uwagę identyfikator użytkownika bez hasła (najsłabsze zabezpieczenia) wystarczy użyć mysql -u userid. Jeśli ma hasło, jest nieco trudniejsze, ale słabe hasło ułatwia. Jeśli root nie ma hasła, mogę uzyskać dostęp do roota jako mysql -u root. Mogę wtedy zrobić wszystko w bazie danych, co root.

Dobrym pomysłem jest również użycie specyfikacji hosta w zabezpieczeniach, szczególnie jeśli zdalny dostęp jest lub może być dostępny.

Hasła w plikach mogą i powinny być w pewnym stopniu zabezpieczone przez uprawnienia. Dostęp przez root lub właściciela pliku haseł jest banalny. Jeśli to możliwe, należy użyć szyfrowania hasła na dysku. To sprawia, że ​​dostęp jest nieco trudniejszy, ale nadal podatny na ataki.

BillThor
źródło
0

Cóż, jeśli nie hostujesz bazy danych MySQL, ale jest ona w usłudze hostingowej i ktoś uzyskuje dostęp do adresu IP twojego serwera, nazwa użytkownika i hasło są ostatnią linią obrony. Zawsze dobrze jest mieć bezpieczną nazwę użytkownika / hasło.

Jan
źródło
Meh! Jeśli ktoś uzyska dostęp do serwera, może odczytać użytkownika / hasło z plików PHP ... Proszę zaktualizować lub usunąć tę odpowiedź.
Chazy Chaz,