Я пытаюсь заставить 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
)
Какие-либо идеи, как разрешить это?
Tait Lewis, объясненный очень хорошо проблема с выполнить разрешением. Однако делая это в учетную запись реального пользователя - оба угроза безопасности и может потенциально предотвратить законное выполнение другим staff
элементы группы.
Путем я решил ту же проблему, был следующие:
db
) с 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
sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop
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
sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start
Обратите внимание каждый раз перезагрузку Mac, необходимо будет смонтировать изображение (с sudo hdiutil ...
команда), и запускают MySQL вручную, поскольку это не смонтирует, когда launchd попытается запустить его автоматически, прежде чем изображение будет смонтировано.
Я прокомментировал один из Ваших подобных вопросов, так как я думаю, что существует лучший способ хранить данные 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
приходит на ум.)
Прежде всего, если Вы уже не сделали так, убедиться проверить, что Ваша версия MySQL будет поддерживать символьные ссылки для рассматриваемой таблицы (таблиц). В соответствии с этой статьей 2008 года, символьные ссылки только поддерживались для таблиц MyISAM в то время и "Для файлов, используемых таблицами для других механизмов устройства хранения данных, можно получить странные проблемы, при попытке использовать символьные ссылки".
После того как Вы убеждены, что Ваша версия MySQL должна поддерживать то, что Вы делаете, перепроверка, какого пользователя Вы пытаетесь запустить mysqld_safe
как и сравнивают это с полномочиями на /opt/local/var/db/mysql5/
. Так как Вы использовали cp -a
, вероятно, что каталог принадлежит и перезаписываем _mysql пользователем (который является, почему это работает когда Вы sudo -u _mysql touch...
), но Вы получаете отказы при попытке запустить MySQL с учетной записи обычного пользователя (который не является _mysql и, поэтому, не имел бы доступа для записи к каталогу).
Это может быть неправдоподобно, но если Вы - мягкое соединение с отдельным разделом, Вы могли бы всегда монтировать, что раздел в точке гибкой ссылки, затем сделайте гибкую ссылку, где Вы обычно монтировали бы его.