2013-10-09 3 views
5

खोजने में असमर्थ मैं अपनी मैक बुक पर काम करने के लिए chroot पाने की कोशिश कर रहा हूँ। मैं सेटअप जेल निर्देशिका सभी आवश्यकताओं को शामिल करने के लिए/bin/श और/bin/bash (रिकर्सिवली कहा जाता है/usr/bin/otool) के लिएओएसएक्स और क्रोट/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 इस्तेमाल करने की कोशिश यह, क्या पर अपने मैक काम करने के लिए नहीं 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 

किसी भी विचार?

OSX संस्करण 10.8.4

संपादित करें: CentOS पर, जब मैं ldd/bin/bash चलाने के लिए, मैं सभी libs जरूरत मिलता है। अगर मैं उन्हें पूरी तरह कॉपी नहीं करता हूं, तो यह कहता है/bin/bash: ऐसी कोई फ़ाइल या निर्देशिका नहीं। तो मुझे लगता है कि इसका मतलब है कि मैक पर मुझे libs याद आ रही है; बस यकीन नहीं है कि कौन सा।

+0

यह देखने के लिए कमांड को 'स्ट्रेस' करने का प्रयास करें कि यह क्या खोल रहा है (1) ' – kojiro

+0

मैक के पास स्ट्रेस नहीं है, इसलिए मैंने डट्रस का उपयोग किया। इसे dtruss सामान के अलावा किसी भी libs को लोड न देखें: sudo dtruss -fa -t खुला/bin/bash खुला ("/ usr/lib/dtrace/libdtrace_dyld.dylib \ 0", 0x0, 0x0) = 3 0 खुला ("/ dev/tty \ 0", 0x6, 0x7FFF737E7788) = 3 0 खुला ("/ dev/dtracehelper \ 0", 0x2, 0x7FFF5DA4E460) = 3 0 खुला ("/ usr/share/terminfo/73/स्क्रीन \ 0 ", 0x0, 0x0) = 3 0 खुला ("/dev/dtracehelper \ 0 ", 0x2, 0x7FFF5A9FA4C0) = 3 0 – ekaqu

+0

सुडो डीट्रस/बिन/बैश-सी" इको हाय "मुझे बहुत कुछ देता है क्या libs खोले गए हैं के बारे में अधिक जानकारी। – ekaqu

उत्तर

5

जब आपने कहा कि आपने एक रिकर्सिव 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) 

मैं एक त्वरित परीक्षण किया:

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) है साथ:

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 कॉपी करने की आवश्यकता है। यदि वह मौजूद नहीं है, तो क्रोट जेल में कुछ भी निष्पादित करने का प्रयास Killed: 9 के अलावा किसी भी त्रुटि के बिना विफल हो जाएगा। एक बार जब आप प्राप्त /usr/lib/dyld की प्रतिलिपि बनाई है, तो अगर आप किसी भी आगे पुस्तकालयों याद कर रहे हैं तो आपको एक त्रुटि, जैसे मिल जाएगा: फ़ाइलों मैं देख रहा हूँ आप /usr/lib/dyld की जरूरत नहीं है की अपनी सूची से

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

, तो मुझे लगता है यह बहुत है शायद यह आपकी समस्या है। मुझे यकीन नहीं है कि इस समस्या के लिए आपको Killed: 9 के बजाय No such file or directory क्यों मिल रहा है; संभवतः यह एक ओएस संस्करण अंतर है - मै मैक ओएस एक्स 10.10.5 पर परीक्षण कर रहा हूं, आप मैक ओएस एक्स 10.8.4 के साथ परीक्षण कर रहे हैं (या थे)।

ह्वाटकिन्स का कोर्स कोर्स का जवाब है क्योंकि यह /usr/lib/dyld और प्रत्येक आवश्यक डिलिब को /bin/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 से नहीं है।