mysqld
, относящиеся к безопасности
Access denied
("в доступе отказано")
При подключении к серверу MySQL используется, как правило, пароль. По линии связи пароль не передается в виде открытого текста, но алгоритм шифрования не очень сложный. Толковый хакер, если ему удастся перехватить трафик между клиентом и сервером, при определенной настойчивости может взломать пароль. Поэтому если связь между клиентом и сервером осуществляется по ненадежной сети, для шифрования связи следует использовать SSH-туннель.
Вся остальная информация передается в текстовом виде и может быть
прочитана кем угодно, кто в состоянии отлеживать подключение. Если это вас
беспокоит, можно воспользоваться протоколом со сжатием данных (в MySQL
3.22 и последующих версиях), что значительно затруднит подобные действия.
Чтобы еще более повысить безопасность связи, следует использовать протокол
ssh
. Open source
-клиент ssh
доступен на веб-сайте http://www.openssh.org/,
а коммерческий ssh
-клиент можно получить на веб-сайте
http://www.ssh.com/. С помощью такого протокола можно обеспечить
зашифрованную связь по протоколу TCP/IP между сервером MySQL и клиентом
MySQL.
Если вы используете MySQL 4.0, то можете также использовать предусмотренную в этой версии поддержку протокола OpenSSL. Обратитесь к разделу See section 4.3.9 Использование безопасных соединений.
Для обеспечения безопасности MySQL-системы необходимо строго придерживаться следующих рекомендаций:
other_user
не задан пароль, то кто
угодно может зайти под любым именем, просто введя mysql -u other_user
db_name
. Чтобы этого избежать, можно изменить пароль для всех
пользователей, отредактировав скрипт mysql_install_db
перед запуском
приложения, или только пароль для root
-пользователя MySQL, как это
показано ниже:
shell> mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD('new_password') WHERE user='root'; mysql> FLUSH PRIVILEGES;
root
. Это очень
опасно, потому что любой пользователь, имеющий привилегию FILE
, будет
в состоянии создавать файлы как пользователь root
(например
~root/.bashrc
). Чтобы предотвратить это, mysqld
откажется запускаться
от имени пользователя root
, если это не будет задано напрямую с
помощью опции --user=root
. В то же время mysqld
может быть запущена от
имени обычного непривилегированного пользователя. Можно также, в целях
еще большего укрепления безопасности, создать новый аккаунт
Unix-пользователя mysql
. При запуске mysqld
от имени другого
пользователя Unix у вас отпадает необходимость заменять имя
пользователя root
в таблице user
, так как имена пользователя в MySQL
не имеют ничего общего с аккаунтами пользователей Unix. Для запуска
mysqld
от имени другого пользователя Unix добавьте в группу [mysqld]
файла опций `/etc/my.cnf' или файла опций `my.cnf', находящегося в
каталоге данных сервера, строку user
, задающую имя пользователя.
Например:
[mysqld] user=mysqlВ результате сервер будет запущен от имени назначенного пользователя, независимо от того, производится запуск вручную или посредством
safe_mysqld
или mysql.server
. Для получения дополнительной информации
обратитесь к разделу See section A.3.2 Запуск MySQL от обычного пользователя.
--skip-symlink
). Это особенно важно в том
случае, если вы запускаете mysqld
от имени пользователя root
,
поскольку у того, кто имеет право доступа для записи в каталоги данных
mysqld
, появляется возможность стереть любой файл в системе!
Обратитесь к разделу See section 5.6.1.2 Использование символических ссылок для таблиц.
PROCESS
всем пользователям. Команда
mysqladmin processlist
выводит текст запросов, обрабатываемых в данный
момент. Следовательно, любой пользователь, имеющий право на выполнение
этой команды, получает возможность прочитать, например, такой запрос
другого пользователя, как UPDATE
user SET
password=PASSWORD('not_secure')
. mysqld
резервирует добавочное
подключение для пользователей, имеющих привилегию PROCESS
, так что
пользователь MySQL под именем root
может подключиться и осуществлять
контроль даже в том случае, когда все обычные подключения заняты.
FILE
всем пользователям. Любой
пользователь, имеющий такую привилегию, может записать в любом месте
файловой системы файл с привилегиями демона mysqld
! Чтобы обеспечить
здесь хоть минимальную защиту, все файлы создаваемые с помощью команды
SELECT ... INTO OUTFILE
, сделаны общедоступными для записи, но
перезаписать существующие файлы нельзя.
Привилегия FILE
может быть
также использована для чтения любого файла, доступного пользователю
Unix, от имени которого запускается сервер.
Можно также прочитать любой файл в текущую базу данных. Это может быть
использовано в корыстных целях. Возможно, например, с помощью команды
LOAD DATA
загрузить `/etc/passwd' в таблицу и прочесть ее позже с
помощью SELECT
.
mysqld
задать значение переменной
max_user_connections
.
User Comments
It really should be pointed out that running mysqld as nobody is almost
as bad as running it as root. Toss in e.g. apache run as nobody and
anyone who can execute CGI programs can do whatever he wants to
your database. Hooray.
Any service/daemon [such as MySQL] should run under its own separate user. Services that can access the filesystem should not own its own binaries since a change in them can be quite spectacular at reboot/restart :-)
Limit the service-user to read/write only the files neccessary for its proper operation.
[Off topic]
If you are running for example apache and allowing users to run their own cgi's, you should compile it/setup for using suEXEC to run as a particular user/site owner.
Add your own comment.