क्या सभी आदेशों को एक उपनाम के रूप में परिभाषित करने से रोकने का कोई तरीका है?
उदाहरण के लिए एक उपयोगकर्ता को rm
अन्य नाम (उबंटू डिफ़ॉल्ट कमांड) को अन्य नाम के रूप में परिभाषित करने में सक्षम नहीं होना चाहिए ।
~/.bashrc
।
क्या सभी आदेशों को एक उपनाम के रूप में परिभाषित करने से रोकने का कोई तरीका है?
उदाहरण के लिए एक उपयोगकर्ता को rm
अन्य नाम (उबंटू डिफ़ॉल्ट कमांड) को अन्य नाम के रूप में परिभाषित करने में सक्षम नहीं होना चाहिए ।
~/.bashrc
।
जवाबों:
ऐसा कोई तरीका नहीं है जिससे आप किसी उपयोगकर्ता को जो भी पसंद करते हैं, उसे परिभाषित करने से रोक सकते हैं। विचार करें:
/etc/bash.bashrc
। उन्होंने इसे जहां भी चुना, सक्षम किया।/etc/bash.bashrc
, और सभी ~/.bashrc
और ~/.bash_aliases
एक स्क्रिप्ट के माध्यम से। उन्होंने अपने उपनामों को दूसरी फाइल में डाल दिया और उसे स्रोत बना लिया।PROMPT_COMMAND
कुछ उपनामों को निष्क्रिय करता है। वे पुनर्परिभाषित या अपरिभाषित करते हैं PROMPT_COMMAND
।DEBUG
और अपरिभाषित उपनाम। वे जाल को हटाते हैं।unset
, builtin
और enable
; एक समारोह बनाओalias
; declare -rf alias
फ़ंक्शन को संशोधित करने से उपयोगकर्ताओं को रोकने के लिए; और समारोह का निर्यात करें। वे /bin/bash
साथ चलते हैं --rcfile
और --init-file
एक नया शेल शुरू करते हैं, जहां कहा जाता है कि निर्माण अब सक्षम हैं।आप संकलित समय पर उपनामों को अक्षम कर सकते हैं, तो यह आपके ऊपर होगा कि आप अद्यतित रहें और सुनिश्चित करें कि आप अगले शेलशॉक से प्रभावित नहीं हैं। बेशक, उपयोगकर्ता अपना बैश बना सकते हैं।
unalias alias
।
\unalias unalias
।
एक उपयोगकर्ता को उपनाम बनाने से रोकने का एकमात्र तरीका उन्हें शेल प्रदान करना है जो अलियासिंग का समर्थन नहीं करता है। यह आमतौर पर एक एक्स / Y समस्या है, जहां एक्स वास्तव में एक खतरा मॉडल है कि नहीं बल्कि समस्या को हल करने की कोशिश कर रहा से उचित नियंत्रण या आर्किटेक्चर के साथ हल किया जाना चाहिए है कार्योत्तर के बाद एक उपयोगकर्ता एक साझा तंत्र पर एक खोल दिया जाता है।
नीचे, मैं एक तकनीकी रूप से सही उत्तर प्रदान करता हूं, साथ ही यह क्या होगा और क्या हल नहीं होगा पर कुछ मार्गदर्शन। मैं वैकल्पिक नियंत्रणों पर कुछ अतिरिक्त मार्गदर्शन भी प्रदान करता हूं।
आप उपयोगकर्ता के लॉगिन शेल के रूप में rbash असाइन करके बैश के प्रतिबंधित शेल का उपयोग कर सकते हैं । उदाहरण के लिए:
foo:x:2001:2001:restricted user:/home/foo:/bin/rbash
फिर आपको उपयोगकर्ता के लिए अन्य रूप से बनाए गए उपनामों को अक्षम करना होगा , अधिमानतः हर किसी के खोल को भी तोड़ने के बिना। एक उदाहरण के रूप में, आप निम्न फ़ाइल जैसे /etc/profile.d/rbash.sh में जोड़ सकते हैं :
# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
# Check shell options; disable alias builtins when shell is restricted.
if [[ $- =~ r ]]; then
enable -n alias
enable -n unalias
fi
fi
जब तक आपने उपयोगकर्ता को चेरोट जेल में नहीं रखा है या उन्हें संशोधित PATH प्रदान किया है जिसमें अन्य गोले तक पहुंच शामिल नहीं है, तो उपयोगकर्ता bash
को संकेत पर टाइप करने और अप्रतिबंधित शेल प्राप्त करने से कुछ भी नहीं रोक रहा है।
इसके अलावा, डिज़ाइन द्वारा प्रतिबंधित शेल कई सामान्य गतिविधियों जैसे निर्देशिकाओं को बदलने से रोकता है:
$ cd /tmp
rbash: cd: restricted
लेकिन अन्य स्क्रिप्ट या कार्यक्रमों को ऐसा करने से PATH में नहीं रोकता है। इसका मतलब है कि आपको उपयोगकर्ता के वातावरण को सावधानीपूर्वक तैयार करना होगा, और विशेष रूप से आपको उन्हें अपने स्टार्टअप फ़ाइलों में पथ को संशोधित करने से रोकने की आवश्यकता है , क्योंकि भले ही rbash PATH को केवल पठन- पाठन के बाद ऐसा करता है।
यहां तक कि अगर आप rbash का उपयोग करते हैं, तो आपको नियंत्रण के व्यापक सेट के हिस्से के रूप में ऐसा करने की आवश्यकता है। कुछ उदाहरणों में शामिल हो सकते हैं:
रोकें गैर तकनीकी से उपयोगकर्ताओं को गलती से इस तरह के रूप में डिफ़ॉल्ट उपनाम प्रदान करके खतरनाक आदेशों लागू rm -i
, mv -i
और cp -i
में /etc/bash.bashrc फ़ाइल।
enable -n alias
तो इसके साथ गठबंधन कर सकते हैं ।फ़ाइलों और निर्देशिकाओं की सुरक्षा के लिए पारंपरिक यूनिक्स अनुमतियाँ या पॉसिक्स एसीएल।
लॉगिन जो एक एकल गैर-संवादात्मक आदेश निष्पादित करते हैं। उदाहरण के लिए:
foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
प्रति-कुंजी SSH मजबूर कमांड का उपयोग करें। उदाहरण के लिए:
# ~foo/.ssh/authorized_keys
command="/usr/local/bin/foo.sh" [remainder of line]
सशर्त मिलान ब्लॉक के साथ OpenSSH ForceCommand विकल्प का उपयोग करें ।
अपने विशिष्ट उपयोग के मामले के लिए विशेष उपकरण जैसे गिटोलिट या स्कूप्ली डिज़ाइन का उपयोग करें।
चिरोट जेल का उपयोग करें ।
एक पृथक्कृत वातावरण प्रदान करने के लिए Xenization, OpenVZ, LXC, VMware, VirtualBox, या अन्य तकनीकों जैसे वर्चुअलाइजेशन का उपयोग करें।
एक बार जब आप अपने खतरे के मॉडल को सही ढंग से परिभाषित कर लेते हैं, तो आप अपने उपयोग के मामले के लिए सबसे उपयुक्त नियंत्रणों की पहचान कर सकते हैं। आप क्यों अलियासिंग को रोकना चाहते हैं (जैसे वास्तविक दुनिया की समस्या यह क्या हल करती है?) की अधिक सार्थक समझ के बिना, आप सबसे उपयुक्त नियंत्रणों का चयन नहीं कर सकते।
यह काफी निरर्थक प्रयास है, जैसा कि मुरू के जवाब से पता चलता है। लेकिन कुछ विकल्प हैं, लेकिन वे सही नहीं हैं।
bash
मैनुअल के अनुसार , कार्य हमेशा उपनामों पर पूर्वता लेते हैं, इस प्रकार हम निम्नलिखित कार्य कर सकते हैं:
xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no
आप फंक्शन की परिभाषा को सिस्टमवाइड में रख सकते हैं .bashrc
, हालाँकि जैसा कि मुरू ने बताया, स्मार्ट उपयोगकर्ताओं को bashrc
उदाहरण के लिए एक अलग फाइल सोर्सिंग करके एलियास प्राप्त करने का तरीका मिलेगा ।
मेरे द्वारा खेला गया एक और विचार enable
अंतर्निहित है।
alias
एक शेल बनाया गया है, और bash
इसमें अच्छी enable
कमांड है जो बिल्डिन को सक्षम या अक्षम करने की अनुमति देता है। उदाहरण के लिए, यहाँ मुझे अक्षम किया गया है alias
।
xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$
दोबारा, सिस्टमवाइड bashrc
का उपयोग करना यहां एक विकल्प है।
rm
, तो यह सूची की जांच करता है। यह देखते हुए कि सूचियां बहुत बड़ी होंगी, शुरू होने में लंबा समय लगेगा, आपके उपयोगकर्ता आपसे बहुत शिकायत करेंगे और सिस्टम एडमिन के रूप में आपसे नफरत करेंगे :)
आप एक फ़ंक्शन को परिभाषित कर सकते हैं, /etc/profile
जिसे एक फ़ंक्शन कहा जाता है alias
जिसे आप चाहते हैं (शायद उपयोग कर रहे हैं type -p
) (सभी "उबंटू डिफ़ॉल्ट कमांड" के $PATH
बाद बिलियन alias
, ब्यूट को कॉल करने से पहले "एक्जीक्यूटेबल इन " हैं) , जैसा कि अन्य ने बताया है, आपके उपयोगकर्ता प्राप्त कर सकते हैं। उस के आसपास। क्यों नहीं उपयोगकर्ताओं का एक अलग सेट मिलता है, या उन्हें शिक्षित करते हैं ("यह परिभाषित करना alias
कि एक कमांड को ओवरराइड करता है एक बहुत अच्छा तरीका है शूटिंग पैर में शूटिंग का है, और भ्रम पैदा करता है (जैसे, ls
मेरे पासवर्ड के लिए संकेत क्यों करता है ?))।