# chroot: cannot run command `/bin/sh': No such file or direct

## [clu]

привет  :Smile: 

всё делалось по доке http://butsugenjitemple.org/~ka0ttic/docs/apache_chroot/

после 

# mkdir /chroot

# mkjailenv /chroot/apache

# addjailsw /chroot/apache

решил проверить -получилось али нет:

```

caps linux # mkdir /chroot

caps linux # mkjailenv /chroot/apache

mkjailenv

A component of Jail (version 1.9 for linux)

http://www.gsyc.inf.uc3m.es/~assman/jail/

Juan M. Casillas <assman@gsyc.inf.uc3m.es>

Making chrooted environment into /chroot/apache

        Doing preinstall()

        Doing special_devices()

        Doing gen_template_password()

        Doing postinstall()

Done.

caps linux #

caps linux # addjailsw /chroot/apache/

addjailsw

A component of Jail (version 1.9 for linux)

http://www.gsyc.inf.uc3m.es/~assman/jail/

Juan M. Casillas <assman@gsyc.inf.uc3m.es>

Guessing mv args()

Guessing ls args()

Guessing ln args()

Guessing grep args()

Guessing cat args()

Guessing rmdir args()

Guessing vi args(-c q)

Guessing tail args()

Guessing sh args()

Guessing id args()

Guessing rm args()

Guessing head args()

Guessing cp args()

Guessing pwd args()

Guessing mkdir args()

Guessing touch args()

Guessing more args()

Warning: not allowed to overwrite /chroot/apache//etc/passwd

Warning: not allowed to overwrite /chroot/apache//etc/group

Warning: can't create /proc/meminfo from the /proc filesystem

Warning: file /chroot/apache//usr/share/vim/vimfiles/ exists. Overwritting it

Warning: file /chroot/apache//usr/share/vim/vimfiles/ exists. Overwritting it

Warning: file /chroot/apache//usr/share/vim/vim63/ exists. Overwritting it

/bin/mknod: `/chroot/apache//dev/urandom': File exists

Done.

caps linux # chroot /chroot/apache/ /bin/sh

chroot: cannot run command `/bin/sh': No such file or directory

```

что за лажа - подозреваю, не хватает млиб или файлов...

----------

## bukazoid

 *Quote:*   

> 
> 
> chroot /chroot/apache/ /bin/sh
> 
> 

 

вроде не влияет но,

там вроде написано 

chroot /chroot/apache /bin/sh

----------

## viy

Должен быть файлик /chroot/apache/bin/sh. Если в той же папке есть bash, то можно симлинк сделать.

Я так думаю...

----------

## YD

Но это нахер не надо, mod_chroot делает свою работу добротно. Только запускать серв надо через apache2ctl самому или же сделать startup script. Для рестарта юзать stop -> start, иначе траблы будут.

----------

## bukazoid

 *YD wrote:*   

> .....
> 
>  mod_chroot делает свою работу добротно. ...
> 
> 

 

он загоняет в chroot весь апач или только запущенные в нём сервлеты ?

----------

## [clu]

 *viy wrote:*   

> Должен быть файлик /chroot/apache/bin/sh. Если в той же папке есть bash, то можно симлинк сделать.
> 
> Я так думаю...

 

ну конечно же он там лежит! помимо того, система его видит

caps ~ # chroot /chroot/apache/ /bin/sh

chroot: cannot run command `/bin/sh': No such file or directory

caps ~ # chroot /chroot/apache/ /bin/sh/

chroot: cannot run command `/bin/sh/':  Not a directory 

caps ~ # ls -l /chroot/apache/bin/sh

-rwxr-xr-x  1 root root 665380 May 17 15:09 /chroot/apache/bin/sh

----------

## bukazoid

 *Quote:*   

> 
> 
> ...
> 
> caps ~ # chroot /chroot/apache/ /bin/sh/
> ...

 

такая строка много говорит о написавшем её ....  :Smile: 

chroot /chroot/apache /bin/sh

-

проверить либы 

ldd /bin/sh

покажет нужные либы

ищем их в /chroot/apache/lib

пример:

iam:# ldd /bin/sh 

    libdl.so.2 => /lib/libdl.so.2 (0x4001e000)

    libc.so.6 => /lib/libc.so.6 (0x40022000)

    /lib/ld-linux.so.2 (0x40000000)

==> должны быть

/chroot/apache/lib/libdl.so.2

/chroot/apache/lib/libc.so.6

/chroot/apache/lib/ld-linux.so.2

P.S. jail собирался без ошибок ?

----------

## [clu]

[quote="bukazoid"] *Quote:*   

> 
> 
> ...
> 
> caps ~ # chroot /chroot/apache/ /bin/sh/
> ...

 

такая строка много говорит о написавшем её ....  :Smile: 

chroot /chroot/apache /bin/sh

дядя, если ты не понял - это было сделан для проверки - как ругнётся, и я выделил чернём статус- специально что бы понятно было что находит  и говорит что это не директория :\

----------

## YD

Народ мало того, что вы сейчас заепётесь делать chroot environment. Мало того, что в вы не static скомпилили. Мало того, в chroot'e будет sh... Представьте теперь что вам придётся при каждом обновлении проделывать это ЗАНОГО и САМОМУ следить за версиями. Есть варианты.

1.

```
ROOT="/chroot/apache" emerge -Dpv apache
```

2. 

Поставьте mod_chroot, сразу столько гемора с плеч. Притом судя по поведению в chroot запирается апаче полностью Читайте доку, поймёте. + У вас в chroot'e не будет НИЧЕГО кроме самих сайтов (PHP и т.п. подобное собирайте как модуль), DB сокета и pid-файла.

з.ы. А вообще юзать апаче для chroot'a нелогично, ибо chroot апаче не брат, есть замечательный web-сервер lighttpd.

----------

## bukazoid

 *YD wrote:*   

> 
> 
> ```
> ROOT="/chroot/apache" emerge -Dpv apache
> ```
> ...

 

chroot для безопасности, ROOT= зделает так что поставится масса потенциально опасных програмLast edited by bukazoid on Wed May 18, 2005 2:30 pm; edited 1 time in total

----------

## YD

Да хоть сотня, через ROOT делается своя мини-Gentoo  :Wink:  и она не зависит от материнской ОС. записи об установленных пакетах пишутся туда же в chroot. Надо тогда скрипт и рекурсивно обходить все подкаталоги chroot. У меня установлены все сервисы, которые нативно делают chroot, такие как djbdns (через daemontools), vsftpd и другие. Искуственно вешать BIND или там другие сервисы в chroot =/ Ну блин, каменный век.

----------

## bukazoid

 *bukazoid wrote:*   

>  *YD wrote:*   
> 
> ```
> ROOT="/chroot/apache" emerge -Dpv apache
> ```
> ...

 

__

edited

----------

## YD

некрасиво делать edit и полностью менять пост =/

[edit]

Да и насчёт безопасности, я на это намекнул в том же посте, где написал ROOT=.. emerge ..

----------

## bukazoid

 *YD wrote:*   

> некрасиво делать edit и полностью менять пост =/
> 
> 

 

извеняй думал успею пока никто не прочитал  ....  :Sad: 

----------

## bukazoid

chroot - the mod_chroot way

mod_chroot allows you to run Apache in a chroot jail with no additional files. The chroot() system call is performed at the end of startup procedure - when all libraries are loaded and log files open. There are still some things you have to keep in mind - see below.

не совсем понял, говорится что:

1 грузятся libs

2 открываются logs

3 делается chroot

4 запускается apache

?

add

P.S. вообще проблема была что chroot не работает ....

----------

## YD

1. инициализация апаче и модулей

2. последним в списке LoadModule должен быть mod_chroot, подгружается mod_chroot.

3. вызывается системный вызов chroot и попадаем в "тюрьму"

4. Вот теперь apache слушает на сокете и принимает вызовы, запущенные child'ы тоже работают в chroot'e.

P.S. Добавлю от себя.

Для нескольких сайтов систему надо строить на VHost'ах. Для этого в главном конфиге пишем:

 *Quote:*   

> 
> 
> DocumentRoot /  #(не охота гадить реальный / линками на chroot)
> 
> Listen 127.0.0.1:80  

 

В конфиге vhost'ов

 *Quote:*   

> 
> 
> #network IP
> 
> NameVirtualHost a.b.c.d:80
> ...

 

При старте будут ворнинги, что у vhost'ов не существует DocumentRoot, но это понятно почему.

делаем 

```
mkdir -p /chroot/apache/var/run && touch /chroot/apache/var/run/apache2.pid && ln -sfn /chroot/apache/var/run/apache2.pid /var/run/apache2.pid && apache2ctl start
```

Писал по памяти, мог где-то ошибиться.

Note: /etc/init.d/apache2 на сколько помню глючит с таким конфигом & /var/run/apache2.pid линк может пропадать, желательно в скрипт записать принудительно делать перед apache2ctl.

----------

## [clu]

как бы пологичнее организвать 

chroot для vsftpd,apache+php,mysql,bind ? я вижу ты дока в этом деле, было бы приятно получить инфу  :Wink: 

получше своместить ?

----------

## YD

vsftpd - достаточно секьюрный, сам входит в chroot после того, как юзер залогинится.

apache+mod_php - уже говорил mod_chroot (есть mod_security, но я решил что он пока не требуется мне).

mysql  - есть конечно вариант, что кто-то может получить достаточный доступ к публичному сервису, чтобы ломать mysql с него. Но в принципе PAX + grsec делают своё дело и mysql можно оставить как есть, главное чтоб PHP мог приконнектиться к сокету.

bind - не произноси даже это слово  :Wink:  djbdns ОЧЕНЬ прост в настройке. По дефолту сделан для работы в chroot'e (его туда daemontools загоняют).

----------

## [clu]

ls /var/run/ -l

lrwxrwxrwx  1 root   root    34 May 19 16:03 apache2.pid -> /chroot/apache/var/run/apache2.pid

caps run # apache2ctl start

(20014)Error string not specified yet: Error retrieving pid file /var/run/apache2.pid

----------

## YD

Извиняюсь, я ступил. Мне просто вспомнился мануал по mod_chroot. Тогда давно тоже наткнулся на эту траблу.

```
rm /chroot/apache/var/run/apache2.pid && apache2ctl -k start
```

NOTE: symlink в /var/run должен остаться, хотя он будет ссылатся на несуществующий файл.

----------

## [clu]

 UPDATE: я опечатлся с симлинком  :Smile: ) 

```

caps run # ls -l /var/run/

total 24

lrwxrwxrwx  1 root   root    28 May 20 10:10 apache2.pid -> /var/www/var/run/apache2.pid

```

я сделал так:

mkdir -p /var/www/var/run

ln -sf  /var/www/var/run/apache.pid /var/run/apache.pid

в конфиге httpd.conf подравил всё что было /var/www/localhost/htdocs/ на /localhost/htdocs

в vhosts.conf всё что было /var/www/vhostX.com на /vhostX.com (соответсвенно

/var/www/vhost1.com/htdocs => /vhost1.com/htdocs

/var/www/vhost1.com/cgi-bin/ => //vhost1.com/cgi-bin)

тепрь не работает пхп  :Smile: 

модуль подгружает а в ответ пустоту - будем колупать  :Wink: 

Apache/2.0.54 (Gentoo/Linux) mod_ssl/2.0.54 OpenSSL/0.9.7e Hardened-PHP/4.3.11 mod_chroot/0.4 Server at 10.10.0.1 Port 80Last edited by [clu] on Fri May 20, 2005 7:13 am; edited 2 times in total

----------

## YD

ёпрст ты всё наоборот сделал :>

----------

## [clu]

 *YD wrote:*   

> ёпрст ты всё наоборот сделал :>

 

бл.... да как это ? %\

вроде всё по логие и правильно. напиши плз что не так ^_^

----------

## YD

 *Quote:*   

> Last edited by [clu] on Fri May 20, 2005 2:13 am; edited 2 times in total

  %)

Сейчас норм? Помнится у меня были небольшие траблы с PHP, но уже не помню в чём у меня загвоздка была.

----------

## [clu]

нет  :Sad: 

запускает и фунциклиурет с вхостами нормально, но ни пхп ни перл не выполняет.

перл - понятно ( как боротся ещё нет) почему. а вот пхп - темная лошадка - даже в access_log Не пишет обращения.

----------

## [clu]

такое подзрение что нужно всё собирать статиком  :Smile:  может есть ещё причины ?

----------

## YD

Хех, там трабла очевидно из-за ~x86. apache битый  :Sad:  Столкнулся на ворке с этой траблой. mod_php даже так segfault давал. С x86 веткой всё цивильно.

----------

