Zapewnienie / bin i / lib w więzieniu chroot

11

Muszę być w stanie dostarczyć katalogi / bin i / lib w więzieniu chroot, aby programy mogły dynamicznie łączyć się poprawnie.

Czy istnieje sposób, aby to osiągnąć bez tworzenia kopii katalogów / bin i / lib w więzieniu chroot?

Próbowałem dowiązań symbolicznych, ale nie działają one z więzów chroot, a katalogów nie można połączyć na stałe.

anonimowy tchórz
źródło

Odpowiedzi:

14

Możesz użyć mountdo ponownego zamontowania katalogów, których potrzebujesz w więzieniu:

# mount --bind /bin /chroot/bin
# mount --bind /lib /chroot/lib
# chroot /chroot

Do użytku w /etc/fstab:

/bin /chroot/bin none bind
/lib /chroot/lib none bind

Twoje zdrowie!

jgr
źródło
2
Wielkie dzięki. Linux staje się coraz lepszy, im więcej się nim bawię: p
anonimowy tchórz
Cieszę się, że udało się dobrze! Twoje zdrowie!
jgr
3

Jeśli nie chcesz montować katalogów, jak powiedział jgr, możesz użyć cpdo rekurencyjnego kopiowania katalogów i tworzenia dowiązań twardych dla wszystkich plików:

cp -alf /bin /chroot/bin
cp -alf /lib /chroot/lib
chroot /chroot

W ten sposób Państwa chrootaa /bini /libmoże mieć nieco inną strukturę / zawartość niż główny katalogach.

Josh
źródło
1
Dobry pomysł, ale jeśli / chroot jest na innym urządzeniu, to nie zadziała. Nie można na stałe tworzyć linków między urządzeniami.
AllenKll,
1
#!/bin/bash

copy_file_and_dependencies() {
    PROGRAM="$1"
    DEPENDENCIES="$(ldd "$PROGRAM" | awk '{ print $3 }' | grep -v '(' | grep -v 'not a dynamic executable')"

    mkdir -p "${JAIL}$(dirname $PROGRAM)"
    cp -Lv "$PROGRAM" "${JAIL}${PROGRAM}"

    for f in $DEPENDENCIES; do
        mkdir -p "${JAIL}$(dirname $f)"
        cp -Lv "$f" "${JAIL}${f}"
    done
}

export -f copy_file_and_dependencies

copy_file_and_dependencies /etc/ld.so.cache
copy_file_and_dependencies /bin/sh
# ...
Mcandre
źródło
1
Wydaje się, że celem tego pytania jest zapewnienie dostępu do istniejących plików, a nie kopiowanie ich do chroot.
psusi