/ / OSX i chroot nie mogą znaleźć / bin / bash - linux, macos, bash, chroot

OSX i chroot nie mogą znaleźć / bin / bash - linux, macos, bash, chroot

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 № 1

Kiedy 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.