2013-10-09 47 views
5

我想讓chroot在我的mac書上工作。我設置了監獄目錄包​​含所有要求的/ bin/sh的和/斌/慶典(遞歸調用的/ usr/bin中/ otool)OSX和chroot無法找到/ bin/bash

# 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 

當我嘗試上的/ var/chroot的使用chroot環境,它一直說它找不到/ 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 

任何想法什麼導致chroot不能在我的mac上工作?

OSX版本10.8.4

編輯: 在CentOS,當我運行LDD /斌/ bash中,我得到的所有庫需要。如果我不把它們全部複製,它說/ bin/bash:沒有這樣的文件或目錄。所以我認爲這意味着在Mac上我缺少libs;只是不確定哪個。

+0

嘗試'strace'的命令,看看它試圖'打開(1)' – kojiro

+0

Mac沒有strace,所以我用dtruss。沒有看到它加載除了dtruss東西以外的任何庫: sudo dtruss -fa -t open/bin/bash open(「/ usr/lib/dtrace/libdtrace_dyld.dylib \ 0」,0x0,0x0)= 3 0打開(「/ dev/dtracehelper \ 0」,0x2,0x7FFF5DA4E460)= 3 0 打開(「/ dev/tty \ 0」,0x6,0x7FFF737E7788)= 3 0 open(「/ usr/share/terminfo/73 /屏幕\ 0「,0x0,0x0)= 3 0 open(」/ dev/dtracehelper \ 0「,0x2,0x7FFF5A9FA4C0)= 3 – ekaqu

+0

sudo dtruss/bin/bash -c」echo hi「似乎給了我很多有關打開哪些庫的更多詳細信息。 – ekaqu

回答

5

當你說你做了遞歸otool -L你是什麼意思?有很多事情,使這項工作所需的共享庫,例如:

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) 

然後,你必須運行在那些otool -L(當時otool -L這些):

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) 

我做了一個快速測試搭配:

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 

這個工作,所以我認爲你缺少你所需要的共享庫。你可以編寫一個腳本來完成一個遞歸的otool -L,只需要獲得你需要的確切的共享庫,但只是做一個批量複製可能更容易。

3

你需要複製/usr/lib/dyld到你的chroot jail來獲得動態連接器。如果不存在,那麼嘗試在chroot監獄中執行任何操作都將失敗,除Killed: 9以外沒有任何錯誤。一旦你/usr/lib/dyld複製過來,然後如果你缺少任何進一步的圖書館,你會得到一個錯誤,例如:

dyld: Library not loaded: /usr/lib/libncurses.5.4.dylib 
    Referenced from: /bin/bash 
    Reason: image not found 

從你的文件,我看你沒有/usr/lib/dyld的名單,所以我認爲這是非常可能這是你的問題。我不知道你爲什麼得到No such file or directory而不是Killed: 9這個問題;可能這是一個操作系統版本的差異 - 我正在測試Mac OS X 10.10.5,您正在(或正在)使用Mac OS X 10.8.4進行測試。

hwatkins的答案當然有效,因爲它複製了/usr/lib/dyld和每個必需的dylib運行/bin/bash到監獄。但是,在設立監獄時,我寧願只複製最低限度的設備以使其工作。一旦您複製了 dyld和bash,您可以按照錯誤消息獲取您需要的所有其他庫的路徑。 (有點費力,但它是有保證的最小值。)

遞歸調用otool -L的方法也適用於* .dylib文件,但它不會告訴您有關/usr/lib/dyld。這是因爲-L會打印使用的共享庫,但/usr/lib/dyld不完全是共享庫。如果在可執行庫上運行otool -l,則會看到-L輸出與加載命令LC_LOAD_DYLIB(以及一些變體,例如LC_REEXPORT_DYLIB)相匹配,而對dyld的引用位於LC_LOAD_DYLINKER中,而-L未輸出。