Database
 sql >> база данни >  >> RDS >> Database

Защитена ли е вашата база данни? Помисли отново

1. Защитете сървъра си

Много известни атаки са възможни само след физически достъп до машина. Поради тази причина е най-добре сървърът на приложения и сървърът на база данни да са на различни машини. Ако това не е възможно, трябва да се внимава повече. В противен случай, чрез изпълнение на отдалечени команди чрез сървър на приложения, нападателят може да успее да навреди на вашата база данни дори без разрешения. Поради тази причина всяка услуга, работеща на същата машина като базата данни, трябва да получи възможно най-ниското разрешение, което все още позволява на услугата да работи.


Не забравяйте да инсталирате целия пакет за защита:антивирусна и анти-спам, защитна стена и всички пакети за сигурност, препоръчани от доставчика на вашата операционна система. Също така, не забравяйте да прекарате 10 минути, мислейки за физическото местоположение на вашия сървър – на грешното място сървърът ви може да бъде откраднат, наводнен, наранен от диви животни или скитници.

2. Localhost Security или Деактивирайте или ограничете отдалечения достъп

Помислете дали MySQL ще бъде извлечен от системата или ще има директен достъп от собствения му сървър. В случай, че се използва отдалечен достъп, гарантирайте, че само характеризираните хостове могат да стигнат до сървъра. Това обикновено се прави чрез TCP обвивки, IP таблици или някои други инструменти за програмиране на защитна стена или хардуерни инструменти за достъпност.
За да ограничите MySQL от отваряне на мрежов сокет, придружаващият параметър трябва да бъде включен в областта [mysqld] на my.cnf или my.ini:

skip-networking

Документът се намира в "C:\Program Files\MySQL\MySQL Server 5.1" каталог на операционната система Windows или "/etc/my.cnf" или "/etc/mysql/my.cnf" на Linux.
Този ред осакатява началото на системното администриране в средата на стартирането на MySQL. Би било идеално, ако имате предвид, че може да се използва локална връзка за създаване на връзка към MySQL сървъра.

Друго възможно решение е да принудите MySQL да слуша само локалния хост, като добавите следния ред в [mysqld] раздел на my.cnf адрес на свързване=127.0.0.1
Може да не желаете да забраните достъпа на системата до вашия сървър на база данни, ако клиентите във вашата организация се свързват със сървъра от техните машини или уеб сървъра, въведен на алтернативна машина. В този случай трябва да се вземе предвид следният ограничителен синтаксис за предоставяне:

mysql> GRANT SELECT, INSERT ON mydb.\* TO 'someuser'@'somehost';  

3. Деактивирайте използването на LOCAL INFILE

Следващата промяна е да деактивирате използването на "ЗАРЕЖДАНЕ НА ЛОКАЛЕН ИНФАЙЛ ДАННИ" команда, която ще помогне да се запази неодобреното разглеждане на кварталните записи. Това е особено важно, когато се открият нови уязвимости на SQL инжектиране в PHP приложения.
Освен това, в определени случаи, „ЛОКАЛЕН ИНФАЙЛ“ командата може да се използва за получаване на достъп до други файлове в операционната система, например "/etc/passwd" , като използвате следната команда:

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1

Или дори значително по-малко трудно:

mysql> SELECT load\_file("/etc/passwd")

За да деактивирате използването на „ЛОКАЛЕН INFILE“ команда, следният параметър трябва да се добави в [mysqld] раздел на конфигурационния файл на MySQL.

set-variable=local-infile=0

4. Променете потребителското име и паролата на root, запазете ги здрави

Потребителското име на администратор по подразбиране на MySQL сървъра е „root“ . Хакерите често се опитват да получат достъп до неговите разрешения. За да направите тази задача по-трудна, преименувайте „root“ към нещо друго и му предостави дълга, сложна буквено-цифрова парола.

За да преименувате потребителското име на администратора, използвайте командата за преименуване в конзолата на MySQL:

mysql> RENAME USER root TO new\_user;

MySQL „ПРЕИМЕНУВАНЕ НА ПОТРЕБИТЕЛ“ командата се появи за първи път в MySQL версия 5.0.2. Ако използвате по-стара версия на MySQL, можете да използвате други команди, за да преименувате потребител:

mysql> use mysql;

mysql> update user set user="new\_user" where user="root";

mysql> flush privileges;

За да промените паролата на потребителя, използвайте следната команда от командния ред:

mysql> SET PASSWORD FOR 'username'@'%hostname' = PASSWORD('newpass');

Също така е възможно да промените паролата с помощта на "mysqladmin" помощна програма:

shell> mysqladmin -u username -p password newpass

5. Премахнете базата данни "Тест"а

MySQL идва с "тестова" база данни, предназначена като тестово пространство. Той може да бъде достъпен от анонимен потребител и следователно се използва от множество атаки.
За да премахнете тази база данни, използвайте командата drop, както следва:

mysql> drop database test;  

Или използвайте "mysqladmin" команда:

shell> mysqladmin -u username -p drop test  

6. Премахване на анонимни и остарели акаунтии

Базата данни MySQL идва с някои анонимни потребители с празни пароли. В резултат на това всеки може да се свърже с базата данни, за да провери дали това е така, направете следното:

mysql> select \* from mysql.user where user="";  

В сигурна система не трябва да се повтарят линии. Друг начин да направите същото:

mysql> SHOW GRANTS FOR ''@'localhost';

mysql> SHOW GRANTS FOR ''@'myhost';

Ако грантовете съществуват, тогава всеки може да получи достъп до базата данни и поне да използва базата данни по подразбиране„тест“ . Проверете това с:

shell> mysql -u blablabla

За да премахнете акаунта, изпълнете следната команда:

mysql> DROP USER "";

MySQL "DROP USER" командата се поддържа, като се започне с MySQL версия 5.0. Ако използвате по-стара версия на MySQL, можете да премахнете акаунта, както следва:

mysql> use mysql;

mysql> DELETE FROM user WHERE user="";

mysql> flush privileges;  

7. Увеличете сигурността с контрол на достъп, базиран на роли

Много често срещана препоръка за сигурност на базата данни е да се намалят разрешенията, дадени на различни страни. MySQL не е по-различен. Обикновено, когато разработчиците работят, те използват максималното разрешение на системата и обръщат по-малко внимание на принципите на разрешения, отколкото можем да очакваме. Тази практика може да изложи базата данни на значителен риск.
* Всяка нова инсталация на MySQL 5.x вече е инсталирана, като се използват правилните мерки за сигурност.
За да защитите вашата база данни, уверете се, че файловата директория, в която всъщност се съхранява базата данни MySQL, е собственост на потребителя "mysql" и групата "mysql".

shell>ls -l /var/lib/mysql

Освен това се уверете, че само потребителят "mysql" и "root" имат достъп до директорията /var/lib/mysql .
Двоичните файлове на mysql, които се намират в директорията /usr/bin/, трябва да са собственост на "root" или на конкретния системен потребител "mysql". Други потребители не трябва да имат достъп за запис до тези файлове.

shell>ls -l /usr/bin/my\*  

8. Проверявайте привилегиите на база даннита

Разрешенията на операционната система бяха фиксирани в предходния раздел. Сега нека поговорим за разрешенията за база данни. В повечето случаи има потребител администратор (преименуван "root") и един или повече действителни потребители, които съжителстват в базата данни. Обикновено "root" няма нищо общо с данните в базата данни; вместо това се използва за поддръжка на сървъра и неговите таблици, за даване и отнемане на разрешения и т.н.
От друга страна, някои потребителски идентификатори се използват за достъп до данните, като потребителския идентификатор, присвоен на уеб сървъра за изпълнение на заявки за „избор\актуализация\вмъкване\изтриване“ и за изпълнение на съхранени процедури. В повечето случаи не са необходими други потребители; обаче само вие, като системен администратор, можете наистина да знаете нуждите на вашето приложение.

Само на администраторски акаунти трябва да бъдат предоставени привилегиите SUPER / PROCESS /FILE и достъп до базата данни на mysql. Обикновено е добра идея да намалите разрешенията на администратора за достъп до данните.

Прегледайте привилегиите на останалите потребители и се уверете, че те са зададени по подходящ начин. Това може да стане с помощта на следните стъпки.

mysql> use mysql;  

[Идентифициране на потребители]

mysql> select \* from users;  

[Списък на безвъзмездните средства на всички потребители]

mysql> show grants for ‘root’@’localhost’;

Горният оператор трябва да се изпълни за всеки потребител! Имайте предвид, че само потребители, които наистина се нуждаят от root привилегии, трябва да им бъдат предоставени.

Друга интересна привилегия е "ПОКАЖЕТЕ БАЗА ДАННИ". По подразбиране командата може да се използва от всеки, който има достъп до подканата на MySQL. Те могат да го използват за събиране на информация (например получаване на имена на бази данни), преди да атакуват базата данни, например, като откраднат данните. За да предотвратите това, се препоръчва да следвате процедурите, описани по-долу.

  • Добавете „ --skip-show-database“ към стартовия скрипт на MySQL или го добавете към конфигурационния файл на MySQL
  • Дайте привилегията SHOW DATABASES само на потребителите, които искате да използвате тази команда

За да деактивирате използването на командата "SHOW DATABASES", трябва да се добави следният параметър в секцията [mysqld] на /etc/my.cnf :

[mysqld]

skip-show-database  

9. Активиране на записа

Ако вашият сървър на база данни не изпълнява много заявки, се препоръчва да активирате регистрирането на транзакции, като добавите следния ред към секцията [mysqld] на /etc/my.cnf файл:

[mysqld]

log =/var/log/mylogfile  

Това не се препоръчва за силно производствени MySQL сървъри, тъй като причинява големи разходи на сървъра.
Освен това проверете дали само идентификаторите на „root“ и „mysql“ имат достъп до тези регистрационни файлове (поне достъп за запис).

Регистър на грешките Уверете се, че само "root" и "mysql" имат достъп до регистрационния файл "hostname.err". Файлът се съхранява в директорията с данни на mysql. Този файл съдържа много чувствителна информация като пароли, адреси, имена на таблици, имена на съхранени процедури и части от кода. Може да се използва за събиране на информация и в някои случаи може да предостави на нападателя информацията, необходима за експлоатиране на базата данни, машината, на която е инсталирана базата данни, или данните в нея.

Регистър на MySQL Уверете се, че само "root" и "mysql" имат достъп до лог файла "logfile XY". Файлът се съхранява в директорията с данни на mysql.

10. Променете главната директорията

chroot на UNIX {операционна система} операционни системи е операция, която променя видимата главна директория на диска за текущия работещ метод и неговите деца. Програма, която е пренасочена към друга директория, не може да осъществява достъп или да наименува файлове извън тази директория и затова директорията се нарича „chroot jail“ или (по-рядко) „chroot prison“.

Чрез използването на средата chroot достъпът за запис на mySQL процесите (и дъщерните процеси) може да бъде ограничен, повишавайки сигурността на сървъра.

Уверете се, че съществува специална директория за chrooted среда. Това трябва да бъде нещо като:/chroot/mysql Освен това, за да направите използването на административните инструменти на базата данни удобно, следният параметър трябва да бъде променен в секцията [client] на конфигурационния файл на MySQL:

[клиент]

socket = /chroot/mysql/tmp/mysql.sock

Благодарение на този ред код, няма да е необходимо да се доставят командите mysql, mysqladmin, mysqldump и т.н. с --socket=/chroot/mysql/tmp/mysql.sock параметър всеки път, когато тези инструменти се изпълняват.

11. Редовно изтривайте старите дневници

По време на инсталационните процедури има много чувствителни данни, които ще помогнат на нежелани потребители да атакуват база данни. Тези данни се съхраняват в историята на сървъра и могат да бъдат ужасно полезни, ако едно нещо се обърка по време на инсталацията. Чрез анализиране на хронологичните файлове администраторите могат да разберат какво се е объркало и вероятно да поправят нещата. Тези файлове обаче не са необходими след завършване на инсталацията.
Трябва да премахнем съдържанието на файла с история на MySQL (~/.mysql_history), където и да се съхраняват всички мъртви SQL команди (особено пароли, които се съхраняват като обикновен текст):

cat /dev/null > ~/.mysql\_history

В заключение, трябва да наблегнем на сигурността на базата данни. Това обаче трябва да е първото нещо за всяко лице или компания.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-близкото съвпадение, част 3

  2. Създаване на нови таблици в IRI Workbench

  3. Профилиране на данни:Откриване на подробности за данните

  4. Използване на JShell в Java 9 в NetBeans 9.0, част 3

  5. Съхранена процедура за изтриване на дублиращи се записи в SQL таблица