आपको उपयोग करना चाहिए chroot। chrootआदेश रूट निर्देशिका है कि सभी बच्चे प्रक्रियाओं को देखने बदल जाता है। मैं यह दिखाने के लिए एक उदाहरण दूंगा कि यह कैसे काम करता है।
यह मौके पर लिखा गया था; मैं वास्तव में अभी UNIX मशीन के सामने नहीं हूँ। इस उदाहरण में, वहाँ एक निर्देशिका कहा जाता है dirतीन फाइलों के साथ: a, b, c, और ls। पहले तीन नियमित फाइलें हैं। lsअसली lsबाइनरी के लिए एक हार्डलिंक है ताकि हम चेरोट में फ़ाइलों को सूचीबद्ध कर सकें।
मैं जा रहा हूँ chrootमें dir। (ध्यान दें कि मैं मूल निर्देशिका में कुछ निर्देशिकाओं को भूल रहा हूं।)
यहाँ सेटअप है, शेल आउटपुट फॉर्म में:
$ pwd
/home/alex/test
$ l
dir
$ ls dir
a b c ls
$ ./ls dir # does the same thing
a b c ls
$ ls /
bin boot dev etc home mnt media proc sbin sys usr var
अब मैं हूँ chrootमें dir। /bin/bashतर्क चुनता है की प्रक्रिया नए रूट निर्देशिका के साथ चलाने की जानी चाहिए। यह करने के लिए चूक /bin/sh।
$ chroot /bin/bash dir
$ # this prompt is now from a subprocess running in the new root directory
$ PATH=/ ls
a b c ls
$ pwd
/
अब हम इससे बाहर निकलते हैं chroot:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
मुझे उम्मीद है कि यह दिखाता है कि chrootकमांड कैसे काम करता है। मूल रूप से आपको अपनी समस्या को हल करने के लिए क्या करना है, एक chrootकमांड चलाने के लिए उस उपयोगकर्ता के रूप में हर बार जब वे लॉग इन करते हैं। शायद इसे एक स्टार्टअप स्क्रिप्ट में डाल दें?
एक फ़ाइल के लिए एक हार्डलिंक एक के अंदर काम करना जारी रखेगा chroot, भले ही उस फ़ाइल को अन्य माध्यमों से एक्सेस नहीं किया जा सकता है (यह काम करता है क्योंकि हार्डलिंक इनकोड को इंगित करता है, पथ नहीं)। इसलिए, उपयोगकर्ता को उदाहरण के लिए mysqlकमांड को एक्सेस करने की अनुमति देने के लिए , आप निष्पादित करेंगे:
ln /usr/bin/mysql /path/to/chroot/target