क्यों सूद पेट को बदलता है?


281

यह PATHसुडो के बिना परिवर्तनशील है:

$ echo 'echo $PATH' | sh 
/opt/local/ruby/bin:/usr/bin:/bin

यह PATHसुडो के साथ चर है:

$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

जहां तक ​​मैं बता सकता हूं, अछूता sudoछोड़ने वाला है PATH। क्या चल रहा है? मैं इसे कैसे बदलूं? (यह उबंटू 8.04 पर है)।

अद्यतन: जहां तक ​​मैं देख सकता हूं, PATHकिसी भी तरह से स्क्रिप्ट को रूट परिवर्तन के रूप में शुरू नहीं किया गया है।

से man sudo:

कमांड स्पूफिंग को रोकने के लिए, उपयोगकर्ता के पैट (यदि एक या दोनों PATH में हैं) में कमांड की खोज करते समय, सूडो `` 'और ``' (दोनों वर्तमान निर्देशिका को दर्शाता है) दोनों चेक करता है। हालाँकि, ध्यान दें कि वास्तविक PATH पर्यावरण चर को संशोधित नहीं किया गया है और यह उस कार्यक्रम के लिए अपरिवर्तित है जिसे sudo निष्पादित करता है।


क्या रूट के पास कुछ भी है जो PATH को .bashrc में सेट करता है? यह मान लिया गया है कि चूंकि आप लिनक्स पर हैं, इसलिए शा वास्तव में बैश है।
ग्रेग हेवगिल

जवाबों:


241

ये है एक कष्टप्रद कार्य कई वितरणों पर sudo की एक विशेषता

Ubuntu पर इस "समस्या" के आसपास काम करने के लिए मैं अपने ~ / .bashrc में निम्न कार्य करता हूं

alias sudo='sudo env PATH=$PATH'

नोट ऊपर दिए गए आदेशों के लिए काम करेंगे जो $ PATH को स्वयं रीसेट नहीं करते हैं। हालांकि 'सु' रीसेट करता है यह $ PATH है, इसलिए आपको इसे नहीं बताने के लिए -p का उपयोग करना चाहिए। अर्थात:

sudo su -p

46
यह "कष्टप्रद कार्य" आपको ट्रोजन से बचाता है। मैं कहता हूं कि एक विशिष्ट $ PATH एक विशेषता है, बग नहीं। --- यह आपको $ PATH के बाहर एक प्रोग्राम के लिए पूर्ण पथ लिखने की अनुमति देता है।
क्रिस जस्टर-यंग

29
हाँ, लेकिन यह पूरी तरह से नकली है। यह शायद बुरे लोगों की तुलना में अच्छे लोगों को अधिक बेवकूफ बनाता है।
ब्रायन आर्मस्ट्रांग

31
न केवल यह प्रतिवाद है, यह गलत तरीके से प्रलेखित है। सुडो के लिए मैन पेज पढ़ना, और फेडोरा बॉक्स के खिलाफ कॉन्फ़िगरेशन की तुलना करना, मैंने सोचा कि पथ को संरक्षित किया जाना चाहिए। वास्तव में, "सुडो-वी" यहां तक ​​कि "पर्यावरण चर को संरक्षित करने के लिए कहता है: पथ"।
जेसन आर। कोम्ब्स

6
यह खीझ दिलाने वाला है। अवधि। अगर यह sudo द्वारा आपको 'ट्रोजन' करवा सकता है, तो यह आपको बिना इसके समान ट्रोजन करवा सकता है। दी गई, कठिन है, लेकिन यदि आप अपने नियमित उपयोगकर्ता के साथ भी गलत स्थान से कोड चला रहे हैं, तो चीजें पहले से ही काफी खराब हैं।
जीसीबी

7
उर्फ सुडो मत; Defaults env_reset के बारे में @ जेकॉब से उत्तर देखें।
greg_1_anderson

121

यदि कोई अन्य व्यक्ति इस पर चलता है और सभी उपयोगकर्ताओं के लिए सभी पथ चर को अक्षम करना चाहता है।
आदेश का उपयोग करके अपनी sudoers फ़ाइल तक पहुँचें visudo:। आपको निम्नलिखित पंक्ति कहीं दिखनी चाहिए:

चूक env_reset

जिसे आपको अगली पंक्ति में जोड़ना चाहिए

चूक!! Safe_path

Secure_path डिफ़ॉल्ट रूप से सक्षम है। यह विकल्प निर्दिष्ट करता है कि सुडोल होने पर $ PATH क्या बनाया जाए। विस्मयादिबोधक चिह्न सुविधा को निष्क्रिय करता है।


6
दूसरा तरीका:Defaults env_keep = "PATH"
gcb

1
Defaults! Secure_path ने आधुनिक प्रणालियों पर मेरे लिए बहुत काम किया; एक पुराने ubuntu 8.04 बॉक्स पर, Defaults env_keep = "PATH" ने चाल चली।
greg_1_anderson

29
सुरक्षित_पथ को अक्षम करने के बजाय आप इसमें जोड़ सकते हैं। उदाहरण के लिए मैंने अपने केस में "Defaults Secure_path = / sbin: / bin: / usr / sbin: / usr / bin: / some / custom / निर्देशिका" जोड़ दिया जहां "कुछ / कस्टम / निर्देशिका" वह पथ है जिसकी मुझे ज़रूरत थी सूडो को उपलब्ध कराने के लिए।
हेक्टर कॉरी

@ हेक्टर समाधान बेहतर तरीका है आईएमओ।
चक्रित

32

PATH एक पर्यावरण चर है, और इस तरह sudo द्वारा डिफ़ॉल्ट रीसेट द्वारा है।

ऐसा करने के लिए आपको विशेष अनुमति की आवश्यकता होती है।

से man sudo

       -E -ई (संरक्षित पर्यावरण) विकल्प env_reset को ओवरराइड करेगा
           sudoers में विकल्प (5))। यह केवल तभी उपलब्ध होता है जब मैच
           आईएनजी कमांड में SETENV टैग है या सेटनो विकल्प sudo- में सेट है
           ईआरएस (5)।
       कमांड के लिए सेट किए जाने वाले पर्यावरण चर भी पास किए जा सकते हैंVAR = मान 
       के रूप में कमांड लाइन , उदाहरण के लिए
        LD_LIBRARY_PATH = / usr / local / pkg / lib। चर आदेश पर पारित कर दिया
       लाइन सामान्य पर्यावरण चर के समान प्रतिबंधों के अधीन हैं-
       एक महत्वपूर्ण अपवाद के साथ ables। यदि setenv विकल्प में सेट किया गया है
       sudoers, चलने वाली कमांड में SETENV टैग सेट या कमांड है
       मिलान किया गया है सभी, उपयोगकर्ता चर सेट कर सकते हैं जो ओवरवेट होंगे-
       bidden। अधिक जानकारी के लिए sudoers (5) देखें।

उपयोग का एक उदाहरण:

cat >> test.sh
env | grep "MYEXAMPLE" ;
^D
sh test.sh 
MYEXAMPLE=1 sh test.sh
# MYEXAMPLE=1
MYEXAMPLE=1 sudo sh test.sh 
MYEXAMPLE=1 sudo MYEXAMPLE=2 sh test.sh 
# MYEXAMPLE=2

अपडेट करें

आदमी 5 सूदखोर: 

     env_reset यदि सेट किया जाता है, तो sudo केवल समाहित करने के लिए वातावरण रीसेट करेगा
                       LOGNAME, SHELL, USER, USERNAME और SUDO_ * वैर-
                       ables। कॉलर के वातावरण में कोई भी चर जो
                       इसके बाद env_keep और env_check सूचियों का मिलान करें।
                       Env_keep और env_check की डिफ़ॉल्ट सामग्री
                       सूचियाँ प्रदर्शित की जाती हैं जब sudo को रूट के साथ चलाया जाता है
                       -वी विकल्प। यदि sudo को SECURE_PATH के साथ संकलित किया गया था
                       विकल्प, इसका मूल्य PATH पर्यावरण के लिए उपयोग किया जाएगा
                       चर। यह ध्वज डिफ़ॉल्ट रूप से चालू है।

तो यह जाँचने की आवश्यकता हो सकती है कि यह / में संकलित नहीं है।

यह Gentoo में डिफ़ॉल्ट रूप से है

# ( From the build Script )
....
ROOTPATH=$(cleanpath /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin${ROOTPATH:+:${ROOTPATH}})
....
econf --with-secure-path="${ROOTPATH}" 

17

ऐसा लगता है कि यह बग काफी समय से आसपास है! यहां कुछ बग संदर्भ दिए गए हैं जो आपको मददगार लग सकते हैं (और सदस्यता लेना / वोट करना, संकेत, संकेत ...):


डेबियन बग # 85123 ("सुडो: SECURE_PATH अभी भी ओवरराइड नहीं किया जा सकता") (2001 से!)

ऐसा लगता है कि बग # 20996 अभी भी सूडो के इस संस्करण में मौजूद है। चेंगलॉग का कहना है कि इसे रनटाइम के दौरान ओवरराइड किया जा सकता है लेकिन मैंने अभी तक इसका पता नहीं लगाया है कि कैसे।

वे आपके sudoers फ़ाइल में कुछ इस तरह का उल्लेख करते हैं:

Defaults secure_path="/bin:/usr/bin:/usr/local/bin"

लेकिन जब मैं Ubuntu 8.10 में कम से कम ऐसा करता हूं, तो यह मुझे यह त्रुटि देता है:

visudo: unknown defaults entry `secure_path' referenced near line 10

उबंटू बग # 50797 ("सुडोल-सुरक्षित-पथ समस्याग्रस्त है" के साथ बनाया गया)

इससे भी बदतर, जहाँ तक मैं बता सकता हूँ, sudoers फ़ाइल में safe_path का सम्मान करना असंभव है। इसलिए, यदि, उदाहरण के लिए, आप अपने उपयोगकर्ताओं को किसी चीज़ के तहत आसान विकल्प प्रदान करना चाहते हैं, तो आपको sudo को फिर से शुरू करना होगा।


हाँ। वहाँ की जरूरत है recompile बिना इस "सुविधा" ओवरराइड करने के लिए एक तरह से किया जाना है। कुछ भी बुरा नहीं है, तो सुरक्षा के बड़े-बड़े आपको बता रहे हैं कि आपके पर्यावरण के लिए सबसे अच्छा क्या है और फिर आपको इसे बंद करने का कोई तरीका नहीं दे रहा है।


यह वास्तव में कष्टप्रद है। सुरक्षा कारणों के लिए वर्तमान व्यवहार को डिफ़ॉल्ट रूप से रखना बुद्धिमानी हो सकता है, लेकिन स्रोत कोड के लिए पुन: जमा करने के अलावा इसे ओवरराइड करने का एक तरीका होना चाहिए! कई लोगों को पैठ विरासत की जरूरत होती है। मुझे आश्चर्य है कि कोई अनुरक्षक इसमें क्यों नहीं दिखता है, जो स्वीकार्य समाधान के साथ आना आसान लगता है।


मैंने इसके चारों ओर इस तरह काम किया:

mv /usr/bin/sudo /usr/bin/sudo.orig

फिर एक फ़ाइल / usr / bin / sudo बनाएँ जिसमें निम्नलिखित शामिल हैं:

#!/bin/bash
/usr/bin/sudo.orig env PATH=$PATH "$@"

तब आपका नियमित रूप से सूडो गैर-सुरक्षित पथ के सूडो की तरह काम करता है


उबंटू बग # 192651 ("सुडोल रास्ता हमेशा रीसेट होता है")

यह देखते हुए कि इस बग की एक डुप्लिकेट मूल रूप से जुलाई 2006 में दायर की गई थी, मुझे स्पष्ट नहीं है कि ऑपरेशन में एक अप्रभावी env_keep कब तक रहा है। उपर्युक्त सूचीबद्ध ट्रिक्स जैसे उपयोगकर्ताओं को काम करने के लिए मजबूर करने के लिए जो भी हो, निश्चित रूप से सूडो और सूडर्स के लिए पुरुष पृष्ठों को इस तथ्य को प्रतिबिंबित करना चाहिए कि पैट को संशोधित करने के विकल्प प्रभावी रूप से बेमानी हैं।

वास्तविक निष्पादन को प्रतिबिंबित करने के लिए दस्तावेज़ीकरण को संशोधित करना गैर अस्थिर और बहुत उपयोगी है।


Ubuntu बग # 226595 ("पथ को बनाए रखने / निर्दिष्ट करने के लिए असंभव")

मुझे PATH में अतिरिक्त गैर-एसटीडी बाइनरी फ़ोल्डर के साथ sudo चलाने में सक्षम होने की आवश्यकता है। पहले से ही मेरी आवश्यकताओं को / etc / पर्यावरण में शामिल करने के बाद मुझे आश्चर्य हुआ जब मुझे sudo के तहत चलने के दौरान लापता कमांड के बारे में त्रुटियां मिलीं .....

मैंने इसे सक्सेज के बिना ठीक करने की कोशिश की:

  1. " sudo -E" विकल्प का उपयोग करना - काम नहीं किया। मेरा मौजूदा पेट अब भी सुडो द्वारा रीसेट किया गया था

  2. / आदि / sudoers में " Defaults env_reset" से " Defaults !env_reset" बदलना - भी काम नहीं किया (भले ही sudo -E के साथ संयुक्त हो)

  3. Uncommenting env_reset(जैसे " #Defaults env_reset") में / etc / sudoers - भी काम नहीं किया।

  4. ' Defaults env_keep += "PATH"' को / etc / sudoers में जोड़ना - भी काम नहीं किया।

स्पष्ट रूप से - मैन डॉक्यूमेंटेशन के बावजूद - sudo पूरी तरह से PATH के संबंध में हार्डकोडेड है और उपयोगकर्ताओं को PATH को बनाए रखने के संबंध में किसी भी लचीलेपन की अनुमति नहीं देता है। बहुत ही कष्टप्रद है क्योंकि मैं sudo का उपयोग करके रूट अनुमति के तहत गैर-डिफ़ॉल्ट सॉफ़्टवेयर नहीं चला सकता।


13

यह मेरे लिए काम करने लगा

sudo -i 

जो गैर-सूद पर लेता है PATH


'sudo -i' उबंटू पर मदद नहीं करता है (मैंने Ubuntu 14.04.3 LTS की जाँच की)। $ PATH को अभी भी sudo द्वारा संशोधित किया गया है।
मार्सिन रेज़्स्की

11

मुझे लगता है कि वास्तव में यह आवश्यक है कि सूडो को पाथ रीसेट कर दिया जाए: अन्यथा आपके उपयोगकर्ता खाते से छेड़छाड़ करने वाला एक हमलावर आपके उपयोगकर्ताओं के पाथ पर सभी प्रकार के औजारों के पिछले संस्करण डाल सकता है, और उन्हें सूडो का उपयोग करते समय निष्पादित किया जाएगा।

(बेशक सूडो को पीएटीएच रीसेट करना इन प्रकार की समस्याओं का पूर्ण समाधान नहीं है, लेकिन यह मदद करता है)

यह वास्तव में होता है जब आप उपयोग करते हैं

Defaults env_reset

में / etc / का उपयोग किए बिना sudoers exempt_groupया env_keep

यह सुविधाजनक भी है क्योंकि आप उन निर्देशिकाओं को जोड़ सकते हैं जो केवल रूट (जैसे कि ) /sbinऔर /usr/sbinसुडो पथ के लिए आपके उपयोगकर्ताओं के पथों में जोड़े बिना उपयोगी हैं। सूडो द्वारा उपयोग किए जाने वाले पथ को निर्दिष्ट करने के लिए:

Defaults secure_path="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin"

एक हमलावर जो एक सूद खाते के लिए अतिरिक्त लाभ प्राप्त करता है, और भी बदतर काम कर सकता है।
user508546

एक सभ्य सलाह। Ubuntu 12.04 सर्वर पर, एक समान सेटिंग डिफ़ॉल्ट है।
त्सुतोमु जुएल

7

अब कार्मिक भंडार से sudo का उपयोग कर काम करता है। मेरे विन्यास से विवरण:

root@sphinx:~# cat /etc/sudoers | grep -v -e '^$' -e '^#'
Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/grub-1.96/sbin:/opt/grub-1.96/bin"
root    ALL=(ALL) ALL
%admin ALL=(ALL) ALL
root@sphinx:~# cat /etc/apt/sources.list
deb http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe

deb http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe

deb http://security.ubuntu.com/ubuntu jaunty-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu jaunty-security main restricted universe

deb http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe

deb http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe

deb http://security.ubuntu.com/ubuntu karmic-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu karmic-security main restricted universe
root@sphinx:~# 

root@sphinx:~# cat /etc/apt/preferences 
Package: sudo
Pin: release a=karmic-security
Pin-Priority: 990

Package: sudo
Pin: release a=karmic-updates
Pin-Priority: 960

Package: sudo
Pin: release a=karmic
Pin-Priority: 930

Package: *
Pin: release a=jaunty-security
Pin-Priority: 900

Package: *
Pin: release a=jaunty-updates
Pin-Priority: 700

Package: *
Pin: release a=jaunty
Pin-Priority: 500

Package: *
Pin: release a=karmic-security
Pin-Priority: 450

Package: *
Pin: release a=karmic-updates
Pin-Priority: 250

Package: *
Pin: release a=karmic
Pin-Priority: 50
root@sphinx:~# apt-cache policy sudo
sudo:
  Installed: 1.7.0-1ubuntu2
  Candidate: 1.7.0-1ubuntu2
  Package pin: 1.7.0-1ubuntu2
  Version table:
 *** 1.7.0-1ubuntu2 930
         50 http://au.archive.ubuntu.com karmic/main Packages
        100 /var/lib/dpkg/status
     1.6.9p17-1ubuntu3 930
        500 http://au.archive.ubuntu.com jaunty/main Packages
root@sphinx:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin
root@sphinx:~# exit
exit
abolte@sphinx:~$ echo $PATH
/home/abolte/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/chromium-17593:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/xpra-0.0.6/bin
abolte@sphinx:~$ 

यह अंत में एक हैक का उपयोग किए बिना इसे हल करने के लिए अद्भुत है।


4
शायद आप इस पर फिर से विचार करने के लिए विचार करेंगे कि कैसे एक स्वच्छ कर्मिक स्थापित किसी व्यक्ति ने इस विशेष समस्या को हल करने के लिए अपने कॉन्फ़िगरेशन को अपडेट किया।
जेसन आर। कोम्ब्स

4
# cat .bash_profile | grep PATH
PATH=$HOME/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
export PATH

# cat /etc/sudoers | grep Defaults
Defaults    requiretty
Defaults    env_reset
Defaults    env_keep = "SOME_PARAM1 SOME_PARAM2 ... PATH"

3

बस "आदि में चूक" env_reset "/ / sudoers टिप्पणी करें


3

बस संपादित env_keepमें/etc/sudoers

यह कुछ इस तरह दिखता है:

Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"

PATH को अंत में संलग्न करें, इसलिए परिवर्तन के बाद यह इस तरह दिखाई देगा:

Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"

टर्मिनल बंद करें और फिर खोलें।


प्रतीक्षा पेट 2 की जरूरत है **? पेटीएम की आवश्यकता क्यों है **?
CMCDragonkai

@CMCDragonkai इसे बोल्ड (मार्कडाउन में) के रूप में स्वरूपित किया गया था, लेकिन किसी ने (स्टैक ओवरफ्लो मुझे उंगलियों को इंगित नहीं करने देगा) इसे कोड के रूप में चिह्नित करने के लिए संपादित किया।
1j01

2

Secure_path आपका मित्र है, लेकिन यदि आप स्वयं को safe_path से छूट देना चाहते हैं तो बस करें

सुडो विडो

और अपेंड करें

डिफॉल्ट्स से छूट_गोप = आपका_गौप

यदि आप उपयोगकर्ताओं के एक समूह को छूट देना चाहते हैं तो एक समूह बनाएं, सभी उपयोगकर्ताओं को इसमें जोड़ें, और इसे अपने छूट_ग्रुप के रूप में उपयोग करें। अधिक के लिए आदमी 5 sudoers।


1

OpenSUSE डिस्ट्रो पर टिप्पणियों में अनुशंसित समाधान बदलने का सुझाव देता है:

Defaults env_reset

सेवा:

Defaults !env_reset

और फिर संभवतः निम्नलिखित पंक्ति के बारे में बताने के लिए, जिसकी आवश्यकता नहीं है:

Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE    MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L    ANGUAGE LINGUAS XDG_SESSION_COOKIE"

1

दोनों "डिफ़ॉल्ट env_reset" और "Default Secure_path ..." में / etc / sudores फ़ाइल के लिए टिप्पणी करें


1

तुम भी एक sudoers इस्तेमाल किया निर्देशिका में अपनी फ़ाइल को स्थानांतरित कर सकते हैं:

    sudo mv $HOME/bash/script.sh /usr/sbin/ 

0

एर, यह वास्तव में एक परीक्षा नहीं है यदि आप अपने रास्ते में कुछ नहीं जोड़ते हैं:

बिल @ बिल-डेस्कटॉप: ~ $ ls -l / opt / pkg / bin
कुल 12
-rxxr-xr-x 1 रूट रूट 28 2009-01-22 18:58 फू
बिल @ बिल-डेस्कटॉप: ~ $ जो फू
/ Opt / pkg / bin / foo
बिल @ बिल-डेस्कटॉप: ~ $ sudo su
रूट @ बिल-डेस्कटॉप: / होम / बिल # जो फू
जड़ @ बिल डेस्कटॉप: / घर / बिल # 

0

ENV_SUPATH की परिभाषा द्वारा su या sudo का उपयोग करते समय PATH को रीसेट कर दिया जाएगा, और ENV_PATH को /etc/login.defs में परिभाषित किया जाएगा


0

$ PATH एक पर्यावरण चर है और इसका अर्थ है कि $ PATH का मूल्य अन्य उपयोगकर्ताओं के लिए भिन्न हो सकता है।

जब आप अपने सिस्टम में लॉगिन कर रहे होते हैं तब आपकी प्रोफाइल सेटिंग $ PATH का मूल्य तय करती है ।

अब, एक नज़र डालते हैं: -

User       |        Value of $PATH
--------------------------
root                /var/www
user1               /var/www/user1
user2               /var/www/html/private

मान लीजिए कि ये अलग-अलग उपयोगकर्ता के लिए $ PATH के मूल्य हैं। अब जब आप sudo के साथ किसी कमांड को निष्पादित कर रहे हैं तो वास्तविक अर्थ में रूट यूजर उस कमांड को निष्पादित करता है।

आप इन आदेशों को टर्मिनल पर निष्पादित करके पुष्टि कर सकते हैं: -

user@localhost$ whoami
username
user@localhost$ sudo whoami
root
user@localhost$ 

यही कारण है। मुझे लगता है कि यह आपके लिए स्पष्ट है।

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