Странная mysql проблема движущийся веб-сайт с сервера Ubuntu на сервер Mac

Хорошо, Вы используете своего рода странную установку, но просто в целом:

Прежде всего Linux не поддерживает верный (bsd стиль) тюрьмы (если Вы не устанавливаете openvz или vserver), но установка всего для выполнения как не priviledged пользователь + chroots может очень серьезно улучшить безопасность. Рабочие вещи как некорневой пользователь важны, chroots просто (возможно значительные) камень преткновения для потенциальных взломщиков).

Согласно php-fpm сайту, chrooting поддерживается через команду конфигурации. Конечно, php-fpm имеет как, никакая документация... Если Вы вводите по абсолютному адресу через источник tarball, Вы могли бы найти некоторую документацию или по крайней мере конфигурацию в качестве примера. в http://php-fpm.org/about/ говорится, что, устанавливая пользователя, группа и chroot возможны. Я никогда не использовал php-fpm, но это должен быть справедливо здравый смысл.

Для получения nginx, работающего как некорневой пользователь, откройте nginx конфигурационный файл, найдите строку, которая запускается с "пользователя", и измените его на не привилегированного пользователя в системе. Создайте нового пользователя с nologin как оболочка или не используйте никого пользователь.

Затем процесс к chroot любой демон в основном следующие:

  • Создайте каталог для корня определенного демона
  • Создайте скелетную структуру каталогов в chroot каталоге (так./и т.д../usr/lib, и т.д.)
  • Скопируйте по любым необходимым двоичным файлам и конфигурационным файлам (так nginx.conf, nginx двоичный файл, любые программы помощника, в которых Вы будете нуждаться),
  • Скопируйте по дополнительным файлам, которые необходимы в chroot. Это будет, по крайней мере, тупиком/etc/password файла (не теневой файл паролей, просто должен быть способ искать имена пользователей к uids),/etc/group файл и/etc/localtime (php будет жаловаться бесконечно, если у Вас не будет информации о часовом поясе).
  • Наконец, выполненный ldd на двоичных файлах, которые Вы скопировали. Это даст Вам список библиотек для копирования. Пройдите этот список и скопируйте необходимые общие объекты в их эквивалентное место в chrooted каталоге. Попытайтесь сохранить символьные ссылки или скопировать исходный файл в месте, где была ранее символьная ссылка.
  • Создайте любые необходимые устройства с mknod. Если Вы не знаете номеров устройств, погуглите их (исключая:/dev/random является c 1 8,/dev/null является c 2 2),
  • В то время как пути к вещам в Ваших файлах конфигурации должны остаться такими же, иногда им нужна тонкая настройка. Когда Вы - вручную chrooting демон, все в файле конфигурации должно ПРОИГНОРИРОВАТЬ часть пути, который не будет видим, после того как Вы - chrooted, например,/var/log/somelogfile останется/var/log/somelogfile несмотря на, он - новый путь, на самом деле являющийся/chroot/nginx/var/log/somelogfile

Следует иметь в виду, что любой демон, который может быть chrooted через конфигурационный файл, не потребует этого набора шагов - chrooting будет сделан программой после соответствующих зависимостей библиотеки, и конфигурационные файлы были загружены. Который делает жизнь намного более простой.

После того как Вы сделали это, в теории необходимо быть готовы выполнить nginx (или что-либо еще) chrooted. В Вашем/etc/init.d/сценарии для nginx найдите, куда nginx двоичный файл на самом деле выполняется, и измените его для использования chroot, например:

$DAEMON-c $CONFIGFILE

становится

/usr/sbin/chroot $DAEMON/chroot/directory/here-c $CONFIGFILE

Затем можно обычно запускать nginx с init.d сценария. *Если Вы получаете ошибку от chroot как "chroot: не может команда выполнения '/bin/that/actually/exists' ': Никакой такой файл или каталог" затем Вы пропускаете некоторые библиотеки или что-то еще существенное. Что-либо, что заставляет двоичному файлу не удаваться работать вообще, приведет к той ошибке (на самом деле, одно мое поле песней говорит что Операция, не разрешенная вместо этого).

Так как я не имею достаточно высоко точек представителя, чтобы отправить много ссылок, проверить www (точка) securityfocus (точка) com (наклонная черта) infocus/1694 (обеспечение апача шаг за шагом) - это - другой http демон, это - те же основные шаги, по крайней мере, насколько chrooting идет.

Также имейте в виду, что к Вашим полномочиям файла в chroot папке нужно проявить внимание - в основном пока пользователь, которого выполняет nginx, как может читать/иметь дело с Вашими файлами в chroot, все будет прекрасно.

Наконец, как пример того, какие вещи типа требуются в chroot среде, вот случайный список файлов от openwall поля, это выполняет много вещей chrooted. Я использую mysql в качестве примера:

localhost!root:/# find /chroot/mysql 
/chroot/mysql
/chroot/mysql/var
/chroot/mysql/var/run
/chroot/mysql/var/run/mysql.sock
/chroot/mysql/var/run/mysqld.pid
/chroot/mysql/var/log
/chroot/mysql/etc
/chroot/mysql/etc/my.cnf
/chroot/mysql/etc/hosts
/chroot/mysql/etc/host.conf
/chroot/mysql/etc/resolv.conf
/chroot/mysql/etc/group
/chroot/mysql/etc/passwd
/chroot/mysql/etc/my.cnf.orig
/chroot/mysql/etc/nsswitch.conf
/chroot/mysql/tmp
/chroot/mysql/lib
/chroot/mysql/lib/libtermcap.so.2
/chroot/mysql/lib/libdl.so.2
/chroot/mysql/lib/libc.so.6
/chroot/mysql/lib/librt.so.1
/chroot/mysql/lib/libpthread.so.0
/chroot/mysql/lib/libz.so.1
/chroot/mysql/lib/libcrypt.so.1
/chroot/mysql/lib/libnsl.so.1
/chroot/mysql/lib/libstdc++.so.6
/chroot/mysql/lib/libm.so.6
/chroot/mysql/lib/libgcc_s.so.1
/chroot/mysql/lib/ld-linux.so.2
/chroot/mysql/lib/libnss_compat.so.2
/chroot/mysql/lib/libnss_files.so.2
/chroot/mysql/lib/libnss_compat-2.3.6.so
/chroot/mysql/lib/libnss_files-2.3.6.so
/chroot/mysql/data
/chroot/mysql/data/mysql
/chroot/mysql/data/mysql/db.frm
/chroot/mysql/data/mysql/db.MYI
/chroot/mysql/data/mysql/db.MYD
[further mysql tables have been omitted]
/chroot/mysql/dev
/chroot/mysql/dev/null
/chroot/mysql/usr
/chroot/mysql/usr/local
/chroot/mysql/usr/local/libexec
/chroot/mysql/usr/local/libexec/mysqld
/chroot/mysql/usr/local/charsets
/chroot/mysql/usr/local/charsets/README
/chroot/mysql/usr/local/charsets/Index.xml
/chroot/mysql/usr/local/charsets/armscii8.xml
/chroot/mysql/usr/local/charsets/ascii.xml
/chroot/mysql/usr/local/charsets/cp1250.xml
/chroot/mysql/usr/local/charsets/cp1251.xml
/chroot/mysql/usr/local/charsets/cp1256.xml
/chroot/mysql/usr/local/charsets/cp1257.xml
/chroot/mysql/usr/local/charsets/cp850.xml
/chroot/mysql/usr/local/charsets/cp852.xml
/chroot/mysql/usr/local/charsets/cp866.xml
/chroot/mysql/usr/local/charsets/dec8.xml
/chroot/mysql/usr/local/charsets/geostd8.xml
/chroot/mysql/usr/local/charsets/greek.xml
/chroot/mysql/usr/local/charsets/hebrew.xml
/chroot/mysql/usr/local/charsets/hp8.xml
/chroot/mysql/usr/local/charsets/keybcs2.xml
/chroot/mysql/usr/local/charsets/koi8r.xml
/chroot/mysql/usr/local/charsets/koi8u.xml
/chroot/mysql/usr/local/charsets/latin1.xml
/chroot/mysql/usr/local/charsets/latin2.xml
/chroot/mysql/usr/local/charsets/latin5.xml
/chroot/mysql/usr/local/charsets/latin7.xml
/chroot/mysql/usr/local/charsets/macce.xml
/chroot/mysql/usr/local/charsets/macroman.xml
/chroot/mysql/usr/local/charsets/swe7.xml
/chroot/mysql/usr/local/share
/chroot/mysql/usr/local/share/mysql
/chroot/mysql/usr/local/share/mysql/english
/chroot/mysql/usr/local/share/mysql/english/errmsg.sys
/chroot/mysql/bin
/chroot/mysql/bin/test
/chroot/mysql/bin/nohup

Пример установки для демона, который может быть chrooted через, он - конфигурационный файл, maradns:

localhost!root:/# find /chroot/maradns/
/chroot/maradns/
/chroot/maradns/logger
/chroot/maradns/db.[removed]
/chroot/maradns/db.[removed2]
/chroot/maradns/db.[removed3]

Как Вы видите, maradns не потребовал, чтобы много получило его chrooted (на самом деле, это просто потребовало "chroot_dir = "/chroot/maradns" в/etc/mararc файле.

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

0
задан 25 February 2011 в 01:10
2 ответа

"НИКАКОЙ ТАКОЙ ФАЙЛ ИЛИ КАТАЛОГ" не похож на ошибку веб-сервера. Если использование mysql_error () к возвратам текст сообщения об ошибке, скопируйте все сообщение об ошибке с кодом ошибки:

CODE: MESSAGE

если Вы не используете mysql_error (), добавьте mysql_error () вызов после проблемы mysql_query ().

PHP не может соединиться с MySQL. Добавьте проверку после mysql_connect ():

mysql_connect(..) or die('Could not connect: ' . mysql_error());
0
ответ дан 5 December 2019 в 17:15

То сообщение об ошибке возвращается из вызова mysql_query или чего-то, что Вы находите в журнале mysqld или где-то в другом месте? Если первый, Вы могли бы использовать 'dtruss' любой на самом процессе (процессах) веб-сервера (который может быть хитрым, чтобы сделать), или на упрощенной версии Вашего кода, выполненного с php-cli. 'dtruss' позволит Вам видеть, какие файлы он пробует и не удается открыться.

0
ответ дан 5 December 2019 в 17:15

Теги

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