Próbuję uruchomić chroot na mojej książce mac. Ustawiłem katalog jail, aby zawierał wszystkie wymagania dla / bin / sh i / bin / bash (rekurencyjnie nazywane / usr / bin / otool)
# ls /var/chroot/*/*
/var/chroot/bin/bash /var/chroot/bin/sh
/var/chroot/usr/lib:
libDiagnosticMessagesClient.dylib libauto.dylib
libc++abi.dylib libobjc.A.dylib
libSystem.B.dylib libc++.1.dylib
libncurses.5.4.dylib system
kiedy próbuję użyć chroot w / var / chroot, ciągle powtarza, że może „znaleźć / bin / bash
# chroot /var/chroot/
chroot: /bin/sh: No such file or directory
$ sudo chroot /var/chroot/
chroot: /bin/bash: No such file or directory
Jakikolwiek pomysł co powoduje, że chroot nie działa na moim Macu?
OSX wersja 10.8.4
Edytować: W CentOS, kiedy uruchamiam ldd / bin / bash, otrzymuję wszystkie potrzebne libi. Jeśli nie będę ich kopiował, to mówi / bin / bash: Brak takiego pliku lub katalogu, więc zakładam, że oznacza to, że w mac brakuje mi bibliotek, po prostu nie wiem, które.
Odpowiedzi:
5 dla odpowiedzi № 1Kiedy powiedziałeś, że zrobiłeś rekurencję otool -L
co masz na myśli? Istnieje wiele bibliotek współdzielonych potrzebnych do wykonania tej pracy, na przykład:
otool -L /bin/bash
/bin/bash:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
Potem musisz uciekać otool -L
na tych (wtedy otool -L
na tych):
otool -L /usr/lib/libSystem.B.dylib
/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/system/libcache.dylib (compatibility version 1.0.0, current version 62.0.0)
/usr/lib/system/libcommonCrypto.dylib (compatibility version 1.0.0, current version 60049.0.0)
/usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 35.0.0)
/usr/lib/system/libcopyfile.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/system/libcorecrypto.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/system/libdispatch.dylib (compatibility version 1.0.0, current version 339.1.9)
/usr/lib/system/libdyld.dylib (compatibility version 1.0.0, current version 239.3.0)
/usr/lib/system/libkeymgr.dylib (compatibility version 1.0.0, current version 28.0.0)
/usr/lib/system/liblaunch.dylib (compatibility version 1.0.0, current version 842.1.4)
/usr/lib/system/libmacho.dylib (compatibility version 1.0.0, current version 845.0.0)
/usr/lib/system/libquarantine.dylib (compatibility version 1.0.0, current version 71.0.0)
/usr/lib/system/libremovefile.dylib (compatibility version 1.0.0, current version 33.0.0)
/usr/lib/system/libsystem_asl.dylib (compatibility version 1.0.0, current version 217.1.4)
/usr/lib/system/libsystem_blocks.dylib (compatibility version 1.0.0, current version 63.0.0)
/usr/lib/system/libsystem_c.dylib (compatibility version 1.0.0, current version 997.1.1)
/usr/lib/system/libsystem_configuration.dylib (compatibility version 1.0.0, current version 596.12.0)
/usr/lib/system/libsystem_dnssd.dylib (compatibility version 1.0.0, current version 522.1.11)
/usr/lib/system/libsystem_info.dylib (compatibility version 1.0.0, current version 449.1.3)
/usr/lib/system/libsystem_kernel.dylib (compatibility version 1.0.0, current version 2422.1.72)
/usr/lib/system/libsystem_m.dylib (compatibility version 1.0.0, current version 3047.16.0)
/usr/lib/system/libsystem_malloc.dylib (compatibility version 1.0.0, current version 23.1.10)
/usr/lib/system/libsystem_network.dylib (compatibility version 1.0.0, current version 241.3.0)
/usr/lib/system/libsystem_notify.dylib (compatibility version 1.0.0, current version 121.0.0)
/usr/lib/system/libsystem_platform.dylib (compatibility version 1.0.0, current version 24.1.4)
/usr/lib/system/libsystem_pthread.dylib (compatibility version 1.0.0, current version 53.1.4)
/usr/lib/system/libsystem_sandbox.dylib (compatibility version 1.0.0, current version 278.10.0)
/usr/lib/system/libsystem_stats.dylib (compatibility version 1.0.0, current version 93.1.26)
/usr/lib/system/libunc.dylib (compatibility version 1.0.0, current version 28.0.0)
/usr/lib/system/libunwind.dylib (compatibility version 1.0.0, current version 35.3.0)
/usr/lib/system/libxpc.dylib (compatibility version 1.0.0, current version 300.1.17)
Zrobiłem szybki test z:
mkdir -p /Users/chroot/bin /Users/chroot/usr/lib/system
cp /bin/bash /Users/chroot/bin
cp /usr/lib/* /Users/chroot/usr/lib
cp /usr/lib/system/* /Users/chroot/usr/lib/system
chroot /Users/chroot /bin/bash
To zadziałało, więc zakładam, że brakuje Ci biblioteki, której potrzebujesz. Prawdopodobnie możesz napisać skrypt, aby w pełni wykonać rekurencję otool -L
i po prostu uzyskaj dokładnie potrzebne biblioteki, ale prawdopodobnie łatwiej jest wykonać kopię zbiorczą.
3 dla odpowiedzi № 2
Musisz skopiować /usr/lib/dyld
do twojego więzienia chroot, aby uzyskać dynamiczny linker. Jeśli tak nie jest, próba wykonania czegokolwiek w więzieniu chroot nie powiedzie się bez żadnego błędu innego niż Killed: 9
. Kiedy już to zrobisz /usr/lib/dyld
skopiowane, a jeśli brakuje dalszych bibliotek, pojawi się błąd, np .:
dyld: Library not loaded: /usr/lib/libncurses.5.4.dylib
Referenced from: /bin/bash
Reason: image not found
Z twojej listy plików widzę, że nie masz /usr/lib/dyld
, więc myślę, że jest bardzo prawdopodobne, że to twój problem. Nie jestem pewien, dlaczego się dostajesz No such file or directory
zamiast Killed: 9
dla tego problemu; być może jest to różnica w wersji systemu operacyjnego - testuję na Mac OS X 10.10.5, testujesz (lub byłeś) w systemie Mac OS X 10.8.4.
odpowiedź hwatkins oczywiście działa, ponieważ kopiuje oba /usr/lib/dyld
i każdy wymagany dylib do uruchomienia /bin/bash
do więzienia. Jednak zakładając więzienie, wolę kopiować tylko minimum, aby go uruchomić. Po skopiowaniu dyld i bash, możesz śledzić komunikaty o błędach, aby uzyskać ścieżki do wszystkich innych potrzebnych bibliotek. (Trochę pracochłonne, ale gwarantowane minimum.)
Metoda rekurencyjnego wywoływania otool -L
działa również w przypadku plików * .dylib, ale nie powiedział o tym /usr/lib/dyld
. To dlatego, że -L
drukuje używane biblioteki udostępnione, ale /usr/lib/dyld
nie jest dokładnie biblioteką współdzieloną. Jeśli uciekasz otool -l
w bibliotece wykonywalnej zobaczysz -L
dane wyjściowe pasują do polecenia load LC_LOAD_DYLIB
(i kilka wariantów, takich jak LC_REEXPORT_DYLIB
), podczas gdy odniesienie do dyld
jest w LC_LOAD_DYLINKER
, który nie jest wyprowadzany przez -L
.