क्यों कमांड के रूप में sudo रिटर्न कमांड नहीं मिला?


12

नमूना आदेश:

drush cc all

काम करता है, लेकिन यह:

sudo drush cc all

मुझे देता है:

sudo: drush: command not found

क्यों? इसे कैसे ठीक करें?


मैं भी इस मुद्दे को कभी कभी, के रूप में इस तरह के बुनियादी आदेश के साथ किया है cddzdo cd"कमांड नहीं मिला" का उपयोग करके । बेशक मैं बाद में एहसास हुआ कि cd, एक निर्देशिका में ing मैं में, मदद नहीं करेगा अनुमतियाँ बहुत ज्यादा नहीं है तो मैं या तो एक रूट खोल या करने की आवश्यकता की जरूरत है dzdo ls, dzdo mvआदि बाहर से सामग्री है कि dir।
वाइल्डकार्ड

2
इसके साथ समस्या sudo cdयह है कि cdएक अंतर्निहित कमांड है, एक कार्यक्रम नहीं है। यदि आप एक ऐसी निर्देशिका में जाना चाहते हैं, जिसकी आपके पास कोई पहुँच नहीं है, और (उदाहरण के लिए) वहाँ एक फ़ाइल का नाम बदलें, तो आप कर सकते हैं (उदाहरण के लिए) sudo mv dir/oldfile dir/newfile या sudo sh -c "cd dir; mv oldfile newfile"
जी-मैन का कहना है कि 'मोनिका' को पुनः स्थापित करें

जवाबों:


13

जब आप sudo, आपको एक पूर्व-निर्धारित मिलता है $PATH, जो रूट उपयोगकर्ता के डिफ़ॉल्ट पथ की तरह कुछ (माना जाता है) है । आपका कार्यक्रम द्वारा पहचानी गई निर्देशिकाओं की सूची में नहीं है $PATH

उदाहरण के लिए देखें

बाहरी आदेशों को निष्पादित करते समय sudo सुरक्षित रहने का प्रयास करता है।

पर्यावरण चर से निपटने के दो अलग-अलग तरीके हैं। डिफ़ॉल्ट रूप से, env_reset sudoers विकल्प सक्षम है। इस का कारण बनता है आदेशों युक्त एक न्यूनतम पर्यावरण के साथ निष्पादित करने के लिए TERM, PATH, HOME, SHELL, LOGNAME, USERऔर USERNAMEप्रेरक प्रक्रिया से चर के अलावा द्वारा अनुमति दी env_checkऔर env_keep sudoers विकल्प। पर्यावरण चर के लिए प्रभावी रूप से एक श्वेतसूची है।

यदि आप sudoअपने को संरक्षित करने के लिए कॉन्फ़िगर नहीं कर सकते हैं $PATH, तो प्रोग्राम के पूर्ण पथनाम को निर्दिष्ट करने के लिए सामान्य वर्कअराउंड है। यह उन स्क्रिप्ट के साथ अच्छी तरह से काम नहीं कर सकता है जो (निष्पादित नहीं) निर्देशिका में अन्य निष्पादन योग्य कॉल करते हैं।


0

आपको पूर्ण पथ निर्दिष्ट करना चाहिए। यह अधिक सुरक्षित भी है; यह पथ निर्दिष्ट नहीं करता है, यह अनुमान है कि एक हमलावर एक अन्य प्रोग्राम बना सकता है जो रूट अनुमतियों के साथ चलाया जाएगा।

इसके अलावा, आपको /etc/sudoersइसे अनुमति देने के लिए एक पंक्ति लगाने की आवश्यकता है। man sudoersसिंटैक्स के लिए, यह यहाँ लगाने के लिए बहुत अधिक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.