आपको उपयोग करना चाहिए 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