Как правильно настроить chroot?

122 views
Skip to first unread message

alekciy

unread,
Jul 15, 2009, 9:53:18 PM7/15/09
to highload-php-ru
Есть ли у кого либо работающий пример конфига с включеной chroot
директивой? Настроил конфиг, с незаданной chroot все работает, стоит
только прописать chroot так сразу падает с ошибкой:

Warning: Unknown: Filename cannot be empty in Unknown on line 0 Fatal
error: Unknown: Failed opening required '' (include_path='.') in
Unknown on line 0

Видимо интерпретатор что-то не может заиклюдить. Что не понятно.
Кстати может кто в курсе, должен ли сам php-cgi находиться внутри
chroot-а?

alekciy

unread,
Jul 19, 2009, 2:24:16 PM7/19/09
to highload-php-ru
Неужели директиву chroot вообще ни кто не использует? Скиньте хотя бы
пример с рабочего конфига, а?

Alexander V. Khokhlov

unread,
Jul 20, 2009, 4:27:15 AM7/20/09
to highloa...@googlegroups.com
http://wdev.tk/article/18.html

2009/7/19 alekciy <alekc...@gmail.com>

Неужели директиву chroot вообще ни кто не использует? Скиньте хотя бы
пример с рабочего конфига, а?



--

Yours sincerely
Alexander V. Khokhlov

alekciy

unread,
Jul 20, 2009, 6:44:41 PM7/20/09
to highload-php-ru
Ах, блин, как же я сам не догадался то... Спасибо, оно самое.

On 20 июл, 12:27, "Alexander V. Khokhlov" <alex.so...@gmail.com>
wrote:
> http://wdev.tk/article/18.html
>
> 2009/7/19 alekciy <alekciy...@gmail.com>

Alexander V. Khokhlov

unread,
Jul 21, 2009, 6:07:51 AM7/21/09
to highloa...@googlegroups.com


2009/7/20 alekciy <alekc...@gmail.com>

Ах, блин, как же я сам не догадался то... Спасибо, оно самое.

You are welcome. Подписывайтесь на RSS. Будет много интересного.

Sergej Kandyla

unread,
Jul 21, 2009, 6:16:10 AM7/21/09
to highloa...@googlegroups.com
Alexander V. Khokhlov пишет:
>
>
> 2009/7/20 alekciy <alekc...@gmail.com <mailto:alekc...@gmail.com>>

>
> Ах, блин, как же я сам не догадался то... Спасибо, оно самое.
>
>
> You are welcome. Подписывайтесь на RSS. Будет много интересного.
> --

Статья познавательная.
Но стратегически много ручных действий. Да и chroot как бы изначально не
был ориентирован на безопасность.

С точки зрения безопасности, надежности и разделения задачь было бы
правильне (в случаее FreeBSD) использовать jail (ezjail). Имхо.


--
Best wishes, Sergej Kandyla
Всегда улыбайтесь жизни и жизнь всегда улыбнется вам!

Alexander V. Khokhlov

unread,
Jul 21, 2009, 6:26:09 AM7/21/09
to highloa...@googlegroups.com
2009/7/21 Sergej Kandyla <sk....@gmail.com>


Статья познавательная.
Но стратегически много ручных действий. Да и chroot как бы изначально не был ориентирован на безопасность.

С точки зрения безопасности, надежности и разделения задачь было бы правильне (в случаее FreeBSD) использовать jail  (ezjail). Имхо.

Согласен, chroot -- это полумера. Просто вопрос стоял быстро развернуть простую песочницу. 

Про концепцию jail знаю, но как-то поленился :) Показалось что придется много возится с настройкой и запуском. Спасибо за наводку на ezjail, про эту софтину не слышал. Попробую на досуге.

alekciy

unread,
Jul 21, 2009, 7:30:59 AM7/21/09
to highload-php-ru
О jail знаю, тем паче в 7-ой ветки фряхи на сколько я помню его очень
даже хорошо доработали. Но в данном случае говорим о Debian, да и
кроме того тут сразу имеем втроенную директиву в сам php-fpm, т.е. все
то нужно для развертывания так это задать директиву, кроме того это не
для банковского сервера, просто есть ряд простых страничек и chroot
обеспечить чуть более высокий уровень безопасности чем сейчас есть.

On 21 июл, 14:16, Sergej Kandyla <sk.p...@gmail.com> wrote:
> Alexander V. Khokhlov пишет:

alekciy

unread,
Jul 23, 2009, 1:43:26 PM7/23/09
to highload-php-ru
А для MySQLi расширения какие либы копировал? Сокет то внутрь chroot я
слинковал, ошибок соединения с сервером нет, но скрипт не работает.
Для проверки использовал скрипт из мана:

<?php
ini_set('display_errors', 'On');
$mysqli = new mysqli("localhost", "root", "pass");

/* Проверка подключения */
if (mysqli_connect_errno()) {
printf("Ошибка подключения: %s\n", mysqli_connect_error());
exit();
}

printf("Информация о хосте: %s\n", $mysqli->host_info);

/* Закрытие соединения */
$mysqli->close();
?>

Пока сокет был настроен не правильно я получал "PHP Warning:
mysqli::mysqli(): (HY000/2002): Can't connect to local MySQL server
through socket" в логе, все вроде поправил, теперь скрипт выдает
"Информация о хосте:" и все, пусто. Т.е. вроде и соединились, только
ни чего не работает все равно. И библиотеки внутрь chroot вроде
скопировал:

# ls usr/lib
total 2.2M
dr--r--r-- 2 www www 12K 2009-07-23 03:05 gconv/
-rw-r--r-- 1 www www 146K 2009-07-23 20:57 libm.so
-rw-r--r-- 1 www www 2.0M 2009-07-23 20:47 libmysqlclient.so
-rw-r--r-- 1 www www 80K 2009-07-23 20:59 libz.so

но не пашет... Не туда/не то копировал?

On 20 июл, 12:27, "Alexander V. Khokhlov" <alex.so...@gmail.com>
wrote:
> http://wdev.tk/article/18.html
>
> 2009/7/19 alekciy <alekciy...@gmail.com>
>

Alex Vorona

unread,
Jul 23, 2009, 1:57:03 PM7/23/09
to highloa...@googlegroups.com
strace в таких случаях помогает хорошо

Konstantin Belov

unread,
Jul 23, 2009, 2:29:39 PM7/23/09
to highloa...@googlegroups.com
alekciy wrote:
> А для MySQLi расширения какие либы копировал? Сокет то внутрь chroot я
> слинковал, ошибок соединения с сервером нет, но скрипт не работает.
> Для проверки использовал скрипт из мана:
>
>
/bin/ln -f /var/db/mysql/mysql.sock /var/home/user/tmp

в /tmp/ появится mysql.sock

Никакие библиотек не копировал, потому что не нужно!

линковать нужно после каждого запуска MySQL

Борис Долгов

unread,
Jul 23, 2009, 7:09:02 PM7/23/09
to highloa...@googlegroups.com
А если делать симлинк?

23 июля 2009 г. 22:29 пользователь Konstantin Belov
(belo...@gmail.com) написал:

--
С уважением, Борис Долгов.
icq 77556665
e-mail bo...@dolgov.name

alekciy

unread,
Jul 23, 2009, 7:18:51 PM7/23/09
to highload-php-ru
Я делал strace для iconv и там разобраться получилось. Однако strace
mysql вываливает слишком много данных в консоль, да и перенаправление
в файл не выполняет. Файл с strace-ом создается, но пустой.

alekciy

unread,
Jul 23, 2009, 7:22:32 PM7/23/09
to highload-php-ru
Линковал. В папке tmp которая лежит внутри chroot файл сокета
mysqld.sock появился. PHP не пишет, что не может связаться. Соединение
проходит типа успешно, но ни какие запросы не отрабытывают. Попробую
конечно сейчас ребутнутся и все проделать по новой.

alekciy

unread,
Jul 23, 2009, 7:25:03 PM7/23/09
to highload-php-ru
Делать симлинк внутри chroot на файл вне chroot-а? Так симлинке же так
не работают...

On 24 июл, 03:09, Борис Долгов <bo...@dolgov.name> wrote:
> А если делать симлинк?

Alex Vorona

unread,
Jul 24, 2009, 1:11:22 AM7/24/09
to highloa...@googlegroups.com
24.07.2009 02:18, alekciy wrote:
> Я делал strace для iconv и там разобраться получилось. Однако strace
> mysql вываливает слишком много данных в консоль, да и перенаправление
> в файл не выполняет. Файл с strace-ом создается, но пустой.
>
>
strace -o не работает?

Alexey V. Karagodov

unread,
Jul 24, 2009, 2:24:39 AM7/24/09
to highloa...@googlegroups.com

On 24.07.2009, at 3:25, alekciy wrote:

> Делать симлинк внутри chroot на файл вне chroot-а? Так симлинке же так
> не работают...
>
> On 24 июл, 03:09, Борис Долгов <bo...@dolgov.name> wrote:
>> А если делать симлинк?

mount -t null

alekciy

unread,
Aug 14, 2009, 6:07:40 PM8/14/09
to highload-php-ru
Так, со всем предыдущим разобрался, но возникла неодижанная подстава.
Возникает ошибка:

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo
failed: Name or service not known in /test.php on line 3 Warning:
file_get_contents(http://www.yandex.ru/): failed to open stream:
php_network_getaddresses: getaddrinfo failed: Name or service not
known in /test.php on line 3

Расследование показало, что дело в том, что PHP не может резолвить
имена (если задавать IP адрес сервера, то все пашет). Скопировал из
etc файлы:

debian:~# ls
-rw-r--r-- 1 root root 9 2009-08-15 01:38 host.conf
-rw-r--r-- 1 root root 263 2009-08-15 01:41 hosts
-rw-r--r-- 1 root root 2.2K 2009-08-15 01:39 localtime
-rw-r--r-- 1 root root 475 2009-08-15 01:40 nsswitch.conf
-rw-r--r-- 1 root root 46 2009-08-15 01:16 resolv.conf

Но ошибка возникает все равно. Как я понимаю, что резолвинга системе
мало знать NS из resolv.conf, нужны еще какие то библиотеки, но какие?

P.S. Интересно, хоть кто нибудь кроме меня chroot использует о_О ?

Really Big Bug

unread,
Aug 17, 2009, 2:21:39 AM8/17/09
to highloa...@googlegroups.com
nsswitch.conf то скопирован, а нужные nss модули? в данном случае
libnss_dns, libnss_files, libnss_compat. Чтото типа cp -a
/lib/libnss_{dns,files,compat}* /chroot/lib/

alekciy

unread,
Aug 17, 2009, 6:36:58 PM8/17/09
to highload-php-ru
Да, спасибо. В итоге я разобрался и все именно так. Нужен был
libnss_dns.so.2 поскольку в nsswitch.conf у меня hosts: dns, ну и
после перезапустить php-fpm, т.к. оказалось, что он эти изменения
подхватывает только при полном рестарте, а я его не всегда делал.

А strace видимо от того ни чем и не помог, что при старте php-fpm
видимо требуемых либок не нашел и даже не пытался делать вызов при
запуске скрипта.

Andrei Nigmatulin

unread,
Aug 17, 2009, 6:47:23 PM8/17/09
to highloa...@googlegroups.com
On Tuesday 18 August 2009 02:36, alekciy wrote:
> Да, спасибо. В итоге я разобрался и все именно так. Нужен был
> libnss_dns.so.2 поскольку в nsswitch.conf у меня hosts: dns, ну и
> после перезапустить php-fpm, т.к. оказалось, что он эти изменения
> подхватывает только при полном рестарте, а я его не всегда делал.
>
> А strace видимо от того ни чем и не помог, что при старте php-fpm
> видимо требуемых либок не нашел и даже не пытался делать вызов при
> запуске скрипта.

Не php-fpm а glibc.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take

Reply all
Reply to author
Forward
0 new messages