Отладка «chroot :не удалось загрузить команду '<имя исполняемого файла _>'», кроме ldd и /proc//maps

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

Для этого вам необходимо установить утилиту conntrack(8), которую можно использовать для управления таблицей отслеживания активных соединений ядра. Для этого используется интерфейс сокета netlink, который предлагает функции, недоступные через /procили другие средства.

Например, conntrack -Fудалит все соединения, conntrack -D --dst=8.8.8.8удалит все записи с этим пунктом назначения, conntrack -D --src=192.168.35.107удалит все записи с этим источником и т. д.

Его легко установить в большинстве дистрибутивов, например, с. apt-get install conntrack, yum install conntrackи т. д.

1
09.05.2021, 17:05
1 ответ

TL;DR;
rngdтребует, чтобы /lib/arm -linux -gnueabihf/ld -linux.so.3(программный интерпретатор)существовал именно в этом месте, когда вы запускаете исполняемый файл, в отличие от lddон не разрешает его в /lib/ld -linux -armhf.so.3


Этот отличный ответ о механизме интерпретатора программ указал мне правильное направление.

Чтобы понять это, я сначала нашел и попытался использовать переменную окружения LD _DEBUG :

sudo chroot /home/pi/rngd_chroot/ bash
bash-5.0# LD_DEBUG=libs rngd
bash: /sbin/rngd: No such file or directory

Установка LD_DEBUGне приводит к выводу для rng, но есть вывод для bash, поэтому я решил, что он даже не загрузил программный интерпретатор библиотеку(ld -linux).

Предполагая, что поиск в библиотеке выполняется ld -linux , логично, что он не может найти сам ld -linux , если он не находится в точном месте (. ] /lib/arm -linux -gnueabihf/ld -linux.so.3 в моем случае ).

Не знаю, почему lddне сообщает об этом как об отсутствующей библиотеке. Я предполагаю, что это ошибка особенность ldd.

Также, если мы сравним вывод lddдля bashиrng:

pi@raspberrypi:~/rngd_chroot $ ldd bin/bash
       ...
        /lib/ld-linux-armhf.so.3 (0xb6f9b000)    
pi@raspberrypi:~/rngd_chroot $ ldd sbin/rngd
       ...
        /lib/arm-linux-gnueabihf/ld-linux.so.3 => /lib/ld-linux-armhf.so.3 (0xb6f10000)

Для bashон не имеет -левой стороны, он просто показывает фактический локальный путь интерпретатора программы .

Думаю, это связано с тем, как связываются исполняемые файлы.

Если у кого-то есть более полное представление о том, что именно происходит и какова правильная терминология для этих двух типов программных интерпретаторов , пожалуйста, опубликуйте это как ответ или комментарий (Я добавлю его сюда ).

0
28.07.2021, 11:33

Теги

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