У меня есть браузер оболочка поводок и я выполнять команды оболочки в PHP и returing их в браузер , и я только что обнаружил команду корневой , и я хочу работать, например , ls
в корневой директории на измененном корне, На самом деле мне нужно бежать bash -c "ls /"
. Я пытаюсь это (я пытаюсь без sudo, но это не работает):
sudo chroot ~/projects/jcubic/leash ls
но получил ошибку:
chroot: failed to run command ‘ls’: No such file or directory
правильно ли использовать эту команду? Можно ли запустить ls в другом корневом каталоге?
когда я пытаюсь запустить chroot без sudo, я получаю эту ошибку:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
chroot
должен делать?/
каталог на другой. Нужно ли иметьbin
в этом каталоге для запуска команд?chroot
заранее заполнить тюрьму всеми двоичными файлами, которые вы хотите запустить, всеми необходимыми библиотеками и динамическим загрузчиком (если ваша ОС использует его). Такжеchroot
, как вы узнали, может работать только root .Ответы:
Чтобы выполнить любую команду внутри chroot, вы должны иметь эту программу доступной в chroot (поскольку она не может использовать программу, установленную в
/
файловой системе.Самый простой способ - скопировать
/usr/bin/ls
из в/home/kuba/projects/jcubic/leash/usr/bin/
(вам также понадобятся зависимые разделяемые библиотеки:)ldd /usr/bin/ls
.источник
chroot lucid /bin/bash -c "ls /"
илиchroot /var/chroot /bin/bash -c "ls /"
chroot
- это хорошее место для начала, когда вы сомневаетесь в синтаксисе. То же самое для других команд (bash
).Можно запустить
ls
в другом корне, ноls
команда и все файлы, от которых она зависит, должны присутствовать внутри этого корня. Нет способа запуститьls
команду, а затем внутри этого процесса изменить корень:ls
не имеет этой функции.Смысл chroot в том, чтобы ограничить видимость файлов теми, которые находятся в определенном каталоге. При запуске
chroot ~/projects/jcubic/leash ls
, тоchroot
команда изменяет корень его собственного процесса (изменение корневого каталога только влияет на процесс , который делает это и любой процесс , который впоследствии работает), а затем пытается запустить исполняемый файл с именемls
в каталоге на пути поиска. Поскольку корень сейчас~/projects/jcubic/leash
, исполняемый файл должен присутствовать в каталоге, например~/projects/jcubic/leash/bin
.Если вы хотите иметь нормальную систему с обычными командами в chroot, вам необходимо установить ее. Могут помочь такие инструменты, как debootstrap (для установки системы Debian) или инструменты обеспечения, такие как Docker (который настраивает среду, которая основана на chroot и ограничена другими способами).
Если вы просто хотите
ls
команду, вам все равно нужно скопировать больше, чемls
. Для запускаls
вам нужно скопироватьls
команду, а также все файлы, от которых она зависит. Посколькуls
это динамически связанная программа, вам нужен ее динамический загрузчик, а также все динамические библиотеки, от которых она зависит. Запуститеldd /bin/ls
список необходимых динамических библиотек. Например:В качестве альтернативы, более простой способ исследовать - получить статически связанный двоичный файл, например BusyBox (доступный в Debian и производные в виде
busybox-static
пакета).источник