OS X: Хранить данные MySQL надежно, на зашифрованном изображении FileVault с помощью гибкой ссылки

Я пытаюсь заставить macports-установленный MySQL использовать каталог данных, сохраненный в моем FileVault-защищенном домашнем dir.

Я использовал sudo cp -a /opt/local/var/db/mysql5 ~/db/ ( -a для обеспечения полномочий файла остаются неповрежденными), и затем заменил исходный mysql5 каталог гибкой ссылкой: sudo ln -s ~/db/mysql5 /opt/local/var/db/mysql5

Однако, когда я теперь пытаюсь запустить MySQL, он перестал работать. Это следует за гибкой ссылкой, по крайней мере до такой степени, что это изменяет некоторые файлы в ~/db/mysql5 dir, особенно журнал ошибок, который добавляется к нему это:

110108 15:33:08 mysqld_safe Starting mysqld daemon with databases from /opt/local/var/db/mysql5
110108 15:33:08 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
110108 15:33:08 [Warning] '--log_slow_queries' is deprecated and will be removed in a future release. Please use ''--slow_query_log'/'--slow_query_log_file'' instead.
110108 15:33:08 [Warning] '--default-character-set' is deprecated and will be removed in a future release. Please use '--character-set-server' instead.
110108 15:33:08 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
110108 15:33:08 [Note] Plugin 'FEDERATED' is disabled.
110108 15:33:08 [Note] Plugin 'ndbcluster' is disabled.
/opt/local/libexec/mysqld: Table 'mysql.plugin' doesn't exist
110108 15:33:08 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110108 15:33:09  InnoDB: Started; log sequence number 4 1596664332
110108 15:33:09 [ERROR] /opt/local/libexec/mysqld: Can't create/write to file '/opt/local/var/db/mysql5/mac.local.pid' (Errcode: 13)
110108 15:33:09 [ERROR] Can't start server: can't create PID file: Permission denied
110108 15:33:09 mysqld_safe mysqld from pid file /opt/local/var/db/mysql5/gPod.local.pid ended

Я не вижу, почему MySQL не может создать pid файл, начиная с ручного создания его с помощью _mysql пользователь успешно выполняется (sudo -u _mysql touch mac.local.pid изнутри ~/db/mysql5)

Какие-либо идеи, как разрешить это?

0
задан 15.01.2011, 16:59

4 ответа

Tait Lewis, объясненный очень хорошо проблема с выполнить разрешением. Однако делая это в учетную запись реального пользователя - оба угроза безопасности и может потенциально предотвратить законное выполнение другим staff элементы группы.

Путем я решил ту же проблему, был следующие:

  • Создайте новую стандартную учетную запись пользователя (для этого примера, который мы назовем ею db) с FileVault, включенным для него. Используйте пароль, по крайней мере, в качестве сильного как пароль Вашего основного пользователя.
  • В то время как зарегистрированный как Ваш основной пользователь, выполненный следующие команды:
  • смонтируйте изображение FileVault пользователя дб, не делая это доступным для просмотра в Средстве поиска:

sudo hdiutil attach /Users/db/db.sparsebundle -owners on -mountpoint /Users/db -nobrowse

  • Исправьте полномочия так, чтобы _mysql пользователь может выполнить корневой каталог пользователя дб:

sudo chown :_mysql /Users/db; sudo chmod g=x /Users/db

  • MySQL Shutdown:

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop

  • Скопируйте файлы MySQL в FileVault:

sudo cp -a /opt/local/var/db/mysql5 /Users/db/ (НЕ добавляйте a / после mysql5)

  • Теперь Вы или удаляете, безопасный удаляют или просто переименовывают /opt/local/var/db/mysql5 каталог.

  • Затем, создайте гибкую ссылку:

sudo ln -s /Users/db/mysql5 /opt/local/var/db/mysql5

  • Наконец, запустите MySQL снова:

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start

Обратите внимание каждый раз перезагрузку Mac, необходимо будет смонтировать изображение (с sudo hdiutil ... команда), и запускают MySQL вручную, поскольку это не смонтирует, когда launchd попытается запустить его автоматически, прежде чем изображение будет смонтировано.

1
ответ дан 24.11.2019, 04:36

Я прокомментировал один из Ваших подобных вопросов, так как я думаю, что существует лучший способ хранить данные MySQL в зашифрованном состоянии.


Это походит на проблему полномочий. На Вашей домашней папке FileVault устанавливает полномочия на rwx------ (т.е. владелец может читать, записать и выполниться, но у группы и других пользователей нет полномочий), по сравнению со значением по умолчанию rwxr-xr-x из типичной папки.

Фактор в игре здесь, это выполняется, полномочия позволяют пользователю искать (иначе пересечение) папку. Таким образом, когда _mysql пользователь вызывает mysqld и это следует за символьной ссылкой, это дросселирует попытку пересечь Вашу домашнюю папку. Это mysqld_safe это пишет сообщения об ошибках в журнал, с помощью полномочий пользователя, который вызвал его (вероятно, корень, если mysqld_safe запускается с помощью сценария запуска MacPorts, sudo /path/to/mysqld_safe или подобный.)

Можно протестировать эту гипотезу путем выполнения следующих команд в последовательности:

$ cd ~/db/mysql5/
$ sudo -u _mysql touch mac.local.pid

должен успешно выполниться, потому что нет никакого обхода, включенного, и

$ sudo -u _mysql touch ~/db/mysql5/mac.local.pid
$ sudo -u _mysql touch /Users/[username]/db/mysql5/mac.local.pid

должен оба перестать работать, но

$ sudo -u _mysql touch ../mac.local.pid

вероятно, успешно выполнится, с тех пор ~/db/ вероятно, имеет более снисходительные полномочия папки по умолчанию, упомянутые ранее.

Простое решение состояло бы в том, чтобы установить группу на Вашей домашней папке к _mysql, и дайте полномочия группы искать Вашу домашнюю папку:

$ sudo chown :_mysql ~
$ chmod g=x ~

но это имеет серьезные разветвления безопасности. Любой действующий как _mysql пользователь (потенциально через уязвимость в MySQL) мог перейти в Вашу домашнюю папку и управлять файлами и папками согласно их полномочиям по умолчанию rwxr-xr-x для папок и rw-r--r-- для файлов. Как мы видели ранее, это включает ~/db/ и любые созданные пользователями папки или файлы, а также ~/Public/ и ~/Sites/. Даже при том, что взломщик не мог непосредственно получить список файлов в Вашей домашней папке, существует много общих файлов для чтения, и много способов использовать их для сбора данных вокруг того, что еще кладет вокруг. (.bash_history приходит на ум.)

2
ответ дан 24.11.2019, 04:36

Прежде всего, если Вы уже не сделали так, убедиться проверить, что Ваша версия MySQL будет поддерживать символьные ссылки для рассматриваемой таблицы (таблиц). В соответствии с этой статьей 2008 года, символьные ссылки только поддерживались для таблиц MyISAM в то время и "Для файлов, используемых таблицами для других механизмов устройства хранения данных, можно получить странные проблемы, при попытке использовать символьные ссылки".

После того как Вы убеждены, что Ваша версия MySQL должна поддерживать то, что Вы делаете, перепроверка, какого пользователя Вы пытаетесь запустить mysqld_safe как и сравнивают это с полномочиями на /opt/local/var/db/mysql5/. Так как Вы использовали cp -a, вероятно, что каталог принадлежит и перезаписываем _mysql пользователем (который является, почему это работает когда Вы sudo -u _mysql touch...), но Вы получаете отказы при попытке запустить MySQL с учетной записи обычного пользователя (который не является _mysql и, поэтому, не имел бы доступа для записи к каталогу).

0
ответ дан 24.11.2019, 04:36

Это может быть неправдоподобно, но если Вы - мягкое соединение с отдельным разделом, Вы могли бы всегда монтировать, что раздел в точке гибкой ссылки, затем сделайте гибкую ссылку, где Вы обычно монтировали бы его.

0
ответ дан 24.11.2019, 04:36

Теги

Похожие вопросы