เหตุใด sudo จึงเปลี่ยนเส้นทาง


281

นี่คือPATHตัวแปรที่ไม่มี sudo:

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

นี่คือPATHตัวแปรที่มี sudo:

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

เท่าที่ผมสามารถบอกได้sudoว่าควรจะปล่อยให้PATHใครแตะต้อง เกิดอะไรขึ้น? ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไร (นี่คือ Ubuntu 8.04)

UPDATE: เท่าที่ฉันเห็นไม่มีสคริปต์ใดที่เริ่มต้นเมื่อมีการเปลี่ยนแปลงPATHในทางใดทางหนึ่ง

จากman sudo:

เพื่อป้องกันการปลอมแปลงคำสั่ง sudo จะทำการตรวจสอบ ``. '' และ `` '' (ทั้งเครื่องหมายไดเรกทอรีปัจจุบัน) สุดท้ายเมื่อค้นหาคำสั่งในเส้นทางของผู้ใช้ (ถ้าหนึ่งหรือทั้งสองอยู่ในเส้นทาง) อย่างไรก็ตามโปรดทราบว่าตัวแปรสภาพแวดล้อม PATH ที่แท้จริงไม่ได้ถูกแก้ไขและถูกส่งผ่านไม่เปลี่ยนแปลงไปยังโปรแกรมที่ sudo ดำเนินการ


รูทมีอะไรที่ตั้งค่า PATH ใน. bashrc หรือไม่? นี่คือการสันนิษฐานว่าเนื่องจากคุณอยู่บน Linux sh จะทุบตีจริงๆ
เกร็กฮิวกิลล์

คำตอบ:


241

นี่คือ ฟังก์ชั่นที่น่ารำคาญ คุณลักษณะของ sudo ในการแจกแจงจำนวนมาก

เพื่อหลีกเลี่ยง "ปัญหา" นี้ใน Ubuntu ฉันทำต่อไปนี้ใน ~ / .bashrc

alias sudo='sudo env PATH=$PATH'

หมายเหตุข้างต้นจะทำงานสำหรับคำสั่งที่ไม่ได้รีเซ็ต $ PATH ด้วยตนเอง อย่างไรก็ตาม `su 'จะรีเซ็ตเป็น $ PATH ดังนั้นคุณต้องใช้ -p เพื่อบอกว่าไม่ได้ IE:

sudo su -p

46
"ฟังก์ชั่นที่น่ารำคาญ" นี้ป้องกันคุณจากการถูกโทรจัน ฉันบอกว่าการบังคับให้ $ PATH เฉพาะเป็นคุณสมบัติไม่ใช่ข้อผิดพลาดมันทำให้คุณเขียนเส้นทางแบบเต็มไปยังโปรแกรมที่อยู่นอกเส้นทางของ $ PATH
Chris Jester-Young

29
ใช่ แต่มันใช้งานได้ง่ายโดยสิ้นเชิง มันอาจจะโง่คนดีกว่าคนเลว
Brian Armstrong

31
ไม่เพียง แต่ใช้งานง่าย แต่ยังบันทึกไว้อย่างไม่ถูกต้องด้วย การอ่าน man man สำหรับ sudo และเปรียบเทียบการตั้งค่ากับกล่อง Fedora ฉันคิดว่าเส้นทางควรได้รับการเก็บรักษาไว้ แน่นอน "sudo -V" ยังพูดว่า "ตัวแปรสภาพแวดล้อมเพื่อรักษา: PATH"
Jason R. Coombs

6
มันน่ารำคาญ. ระยะเวลา ถ้ามันสามารถ 'รับคุณ trojaned' โดย sudo มันสามารถรับคุณ trojaned เดียวกันโดยไม่ได้ ได้รับยากขึ้น แต่ถ้าคุณกำลังเรียกใช้รหัสจากสถานที่ที่ไม่ถูกต้องแม้กับผู้ใช้ปกติของคุณสิ่งต่าง ๆ ก็ไม่ดีพอ
gcb

7
อย่านามแฝง sudo; ดูคำตอบจาก @Jacob เกี่ยวกับค่าเริ่มต้น env_reset
greg_1_anderson

121

ในกรณีที่มีคนอื่นใช้งานได้และต้องการปิดใช้งานการเปลี่ยนแปลงตัวแปรพา ธ ทั้งหมดสำหรับผู้ใช้ทั้งหมด
เข้าถึงไฟล์ sudoers ของคุณโดยใช้คำสั่ง: visudo. คุณควรเห็นบรรทัดต่อไปนี้บางแห่ง:

ค่าเริ่มต้น env_reset

ซึ่งคุณควรเพิ่มสิ่งต่อไปนี้ในบรรทัดถัดไป

ค่าเริ่มต้น! secure_path

secure_path ถูกเปิดใช้งานโดยค่าเริ่มต้น ตัวเลือกนี้ระบุสิ่งที่จะทำให้ $ PATH เมื่อ sudoing เครื่องหมายอัศเจรีย์ปิดใช้งานคุณลักษณะ


6
วิธีอื่น:Defaults env_keep = "PATH"
gcb

1
ค่าเริ่มต้น! secure_path ทำงานได้ดีสำหรับฉันในระบบที่ทันสมัย บนกล่องอูบุนตู 8.04 เก่าค่าเริ่มต้น env_keep = "PATH" ได้ทำการหลอกลวง
greg_1_anderson

29
แทนที่จะปิดใช้งาน secure_path คุณสามารถเพิ่มเข้าไปได้ ตัวอย่างเช่นในกรณีของฉันฉันเพิ่มบรรทัด "Defaults secure_path = / sbin: / bin: / usr / sbin: / usr / bin: / some / custom / directory" โดยที่ "some / custom / directory" เป็นเส้นทางที่ฉันต้องการ เพื่อให้สามารถใช้ได้กับ sudo
Hector Correa

วิธีแก้ปัญหา @HectorCorrea เป็นวิธีที่ดีกว่า IMO
chakrit

32

PATH เป็นตัวแปรสภาพแวดล้อมและเป็นเช่นนี้โดยการรีเซ็ตเริ่มต้นโดย sudo

คุณต้องได้รับการอนุญาตพิเศษเพื่อให้ทำได้

จาก man sudo

       -E ตัวเลือก-E (รักษาสภาพแวดล้อม) จะแทนที่ env_reset
           ตัวเลือกใน sudoers (5)) มันจะใช้ได้เฉพาะเมื่อการแข่งขัน -
           คำสั่ง ing มีแท็ก SETENV หรือตั้งค่าตัวเลือก setenv ใน sudo-
           ERS (5)
       ตัวแปรสภาวะแวดล้อมที่จะตั้งค่าสำหรับคำสั่งอาจถูกส่งต่อไป
       บรรทัดคำสั่งในรูปแบบของVAR = value เช่น
        LD_LIBRARY_PATH = / usr / local / pkg / lib ตัวแปรส่งผ่านไปยังคำสั่ง
       บรรทัดอาจมีข้อ จำกัด เช่นเดียวกับตัวแปรสภาพแวดล้อมปกติ -
       ables ด้วยข้อยกเว้นที่สำคัญอย่างหนึ่ง หากตั้งค่าตัวเลือก setenv
       sudoers คำสั่งที่จะเรียกใช้มีชุดแท็ก SETENV หรือคำสั่ง
       จับคู่คือ ALL ผู้ใช้อาจตั้งค่าตัวแปรที่จะเป็นค่า -
       เชิญ ดู 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 sudoers: 

     env_reset หากตั้งค่า sudo จะรีเซ็ตสภาพแวดล้อมให้มีเพียง
                       LOGNAME, SHELL, USER, USERNAME และ SUDO_ * vari-
                       Ables ตัวแปรใด ๆ ในสภาพแวดล้อมของผู้โทรนั้น
                       จับคู่รายการ env_keep และ env_check แล้ว
                       เนื้อหาเริ่มต้นของ env_keep และ env_check
                       รายการจะปรากฏขึ้นเมื่อ sudo ถูกเรียกใช้โดยรูทด้วย
                       ตัวเลือก -V ถ้า sudo ถูกคอมไพล์ด้วย SECURE_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

ดูเหมือนว่าข้อผิดพลาดนี้ได้รับรอบในขณะที่! นี่คือบางส่วนการอ้างอิงข้อผิดพลาดที่คุณอาจพบว่ามีประโยชน์ (และอาจต้องการสมัคร / ลงคะแนน, คำแนะนำ, คำใบ้ ... ):


Debian bug # 85123 ("sudo: SECURE_PATH ยังไม่สามารถเขียนทับได้") (ตั้งแต่ปี 2544!)

ดูเหมือนว่า Bug # 20996 ยังคงปรากฏอยู่ใน sudo รุ่นนี้ changelog บอกว่ามันสามารถแทนที่ได้ตอนรันไทม์ แต่ฉันยังไม่พบวิธี

พวกเขาพูดถึงการใส่สิ่งนี้ในไฟล์ sudoers ของคุณ:

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

แต่เมื่อฉันทำอย่างนั้นใน Ubuntu 8.10 เป็นอย่างน้อยมันทำให้ฉันมีข้อผิดพลาดนี้:

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

ข้อผิดพลาดของ Ubuntu # 50797 ("sudo สร้างด้วย - ด้วยความปลอดภัย - เส้นทางเป็นปัญหา")

ยิ่งแย่ไปกว่านั้นเท่าที่ฉันสามารถบอกได้มันเป็นไปไม่ได้ที่จะรับรอง secure_path ในไฟล์ sudoers ตัวอย่างเช่นถ้าคุณต้องการให้ผู้ใช้ของคุณสามารถเข้าถึงบางสิ่งภายใต้ / opt คุณจะต้องคอมไพล์ sudo อีกครั้ง


ใช่. มีความต้องการที่จะเป็นวิธีการที่จะแทนที่นี้ "คุณสมบัติ" โดยไม่ต้องคอมไพล์ ไม่มีอะไรเลวร้ายยิ่งไปกว่าความปลอดภัยที่มีขนาดใหญ่บอกคุณว่าสิ่งที่ดีที่สุดสำหรับสภาพแวดล้อมของคุณแล้วไม่ให้วิธีการที่จะปิด


มันน่ารำคาญจริงๆ อาจเป็นการดีที่จะรักษาพฤติกรรมปัจจุบันโดยค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย แต่ควรมีวิธีการอื่นนอกเหนือจากการคอมไพล์ซ้ำจากซอร์สโค้ด! มีหลายคนที่ต้องการมรดกทาง ฉันสงสัยว่าทำไมไม่มีผู้ดูแลมองเข้าไปซึ่งดูเหมือนง่ายที่จะหาวิธีแก้ปัญหาที่ยอมรับ


ฉันทำงานแบบนี้:

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

จากนั้นสร้างไฟล์ / usr / bin / sudo ที่มีสิ่งต่อไปนี้:

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

จากนั้น sudo ปกติของคุณจะทำงานเหมือนกับ sudo ที่ไม่ใช่เส้นทางที่ปลอดภัย


ข้อผิดพลาดของ Ubuntu # 192651 ("เส้นทาง sudo ถูกรีเซ็ตเสมอ")

เนื่องจากข้อผิดพลาดที่ซ้ำกันของข้อผิดพลาดนี้ถูกจัดเก็บในเดือนกรกฎาคม 2549 ฉันไม่ชัดเจนว่า env_keep ใช้งานไม่ได้นานเท่าไหร่ ไม่ว่าข้อดีของการบังคับให้ผู้ใช้ใช้เทคนิคเช่นที่กล่าวข้างต้นแน่นอนว่า man man ของ sudo และ sudoers ควรสะท้อนถึงความจริงที่ว่าตัวเลือกในการปรับเปลี่ยน PATH นั้นซ้ำซ้อนได้อย่างมีประสิทธิภาพ

การแก้ไขเอกสารเพื่อสะท้อนถึงการปฏิบัติจริงนั้นไม่ทำให้เกิดความไม่เสถียรและมีประโยชน์มาก


ข้อผิดพลาดของ Ubuntu # 226595 ("เป็นไปไม่ได้ที่จะเก็บ / ระบุ PATH")

ฉันต้องสามารถเรียกใช้ sudo ด้วยโฟลเดอร์ไบนารีที่ไม่ใช่ std เพิ่มเติมใน PATH หลังจากเพิ่มข้อกำหนดของฉันไปที่ / etc / environment แล้วฉันรู้สึกประหลาดใจเมื่อพบข้อผิดพลาดเกี่ยวกับคำสั่งที่หายไปเมื่อใช้งานภายใต้ sudo .....

ฉันพยายามต่อไปนี้เพื่อแก้ไขปัญหานี้โดยไม่ประสบความสำเร็จ:

  1. ใช้sudo -Eตัวเลือก "" - ไม่ทำงาน PATH ปัจจุบันของฉันยังคงถูกรีเซ็ตโดย sudo

  2. การเปลี่ยน " Defaults env_reset" เป็น " Defaults !env_reset" ใน / etc / sudoers - ยังไม่ทำงาน (แม้เมื่อรวมกับ sudo -E)

  3. การไม่แสดงความคิดเห็นenv_reset(เช่น " #Defaults env_reset") ใน / etc / sudoers - ก็ใช้ไม่ได้เช่นกัน

  4. การเพิ่ม ' Defaults env_keep += "PATH"' ลงใน / etc / sudoers - ก็ใช้ไม่ได้เช่นกัน

ชัดเจน - แม้จะมีเอกสารประกอบคน - sudo นั้นฮาร์ดโค้ดอย่างสมบูรณ์เกี่ยวกับ PATH และไม่อนุญาตให้มีความยืดหยุ่นใด ๆ เกี่ยวกับการเก็บรักษา PATH ของผู้ใช้ น่ารำคาญมากเพราะฉันไม่สามารถเรียกใช้ซอฟต์แวร์ที่ไม่ใช่ค่าเริ่มต้นภายใต้การอนุญาตรากโดยใช้ sudo


13

ดูเหมือนว่าจะได้ผลสำหรับฉัน

sudo -i 

ซึ่งใช้กับ non-sudo PATH


'sudo -i' ไม่ช่วยบน Ubuntu (ฉันตรวจสอบ Ubuntu 14.04.3 LTS) $ PATH ยังคงได้รับการแก้ไขโดย sudo
Marcin Raczyński

11

ฉันคิดว่ามันเป็นความจริงที่ต้องการให้ sudo รีเซ็ต PATH: มิฉะนั้นผู้โจมตีที่บุกรุกบัญชีผู้ใช้ของคุณสามารถใส่เครื่องมือทุกชนิดบนแบ็คดอร์ของเครื่องมือต่าง ๆ บน PATH ผู้ใช้ของคุณและพวกเขาจะถูกประหารชีวิตเมื่อใช้ sudo

(แน่นอนว่าการ sudo รีเซ็ต PATH นั้นไม่ใช่วิธีการแก้ปัญหาที่สมบูรณ์สำหรับปัญหาเหล่านี้ แต่มันช่วยได้)

นี่คือสิ่งที่เกิดขึ้นเมื่อคุณใช้

Defaults env_reset

ใน / etc / sudoers โดยไม่ต้องใช้หรือexempt_groupenv_keep

สิ่งนี้ก็สะดวกเช่นกันเพราะคุณสามารถเพิ่มไดเรกทอรีที่มีประโยชน์สำหรับรูท (เช่น/sbinและ/usr/sbin) ไปยังพา ธ sudo โดยไม่ต้องเพิ่มลงในพา ธ ของผู้ใช้ของคุณ ในการระบุพา ธ ที่จะใช้โดย sudo:

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

ผู้โจมตีที่ได้รับเพิ่มไปยังบัญชี sudoer สามารถทำสิ่งที่เลวร้ายยิ่งกว่า
user508546

คำแนะนำที่ดี บนเซิร์ฟเวอร์ Ubuntu 12.04 การตั้งค่าที่คล้ายกันจะเป็นค่าเริ่มต้น
Tsutomu

7

ใช้งานได้ทันทีโดยใช้ sudo จากคลังเก็บของ karmic รายละเอียดจากการกำหนดค่าของฉัน:

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
บางทีคุณอาจพิจารณาเขียนใหม่นี้เพื่อระบุว่าบางคนที่มีการติดตั้ง Karmic ใหม่ทั้งหมดอาจอัปเดตการกำหนดค่าเพื่อแก้ไขปัญหาเฉพาะนี้
Jason R. Coombs

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

เพียงแสดงความคิดเห็น "Defaults env_reset" ใน / etc / 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"

เพียงเพิ่มผนวกท้ายที่สุดดังนั้นหลังจากการเปลี่ยนแปลงจะมีลักษณะเช่นนี้:

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"

ปิดเทอร์มินัลแล้วเปิดอีกครั้ง


รอ PATH ต้องการ 2 ** หรือไม่ ทำไม PATH ถึงต้องการ **
CMCDragonkai

@CMCDragonkai มันถูกจัดรูปแบบเป็นตัวหนา (ใน markdown) แต่บางคน (ล้นมากเกินไปจะไม่ยอมให้ฉันชี้นิ้ว) แก้ไขมันเพื่อทำเครื่องหมายเป็นรหัส
1j01

2

Secure_path เป็นเพื่อนของคุณ แต่ถ้าคุณต้องการยกเว้นตัวเองจาก secure_path

sudo visudo

และผนวก

ค่าเริ่มต้น exempt_group = your_goup

หากคุณต้องการยกเว้นกลุ่มผู้ใช้ที่สร้างกลุ่มให้เพิ่มผู้ใช้ทั้งหมดลงในกลุ่มและใช้กลุ่มนั้นเป็น exempt_group ของคุณ man 5 sudoers for more


1

โซลูชันที่แนะนำในความคิดเห็นใน OpenSUSE distro แนะนำให้เปลี่ยน:

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

แสดงความคิดเห็นทั้ง "Default env_reset" และ "Default secure_path ... " ในไฟล์ / etc / sudores ใช้ได้สำหรับฉัน


1

คุณยังสามารถย้ายไฟล์ของคุณในไดเรกทอรีที่ใช้ sudoers:

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

0

เอ้อมันไม่ใช่การทดสอบจริง ๆ ถ้าคุณไม่ได้เพิ่มอะไรเข้าไปในเส้นทางของคุณ:

bill @ bill-desktop: ~ $ ls -l / opt / pkg / bin
รวม 12
-rwxr-xr-x 1 รูทราก 28 2009-01-22 18:58 foo
bill @ bill-desktop: ~ $ foo
/ opt / pkg / bin / foo
bill @ bill-desktop: ~ $ sudo su
root @ bill-desktop: / home / bill # ซึ่ง foo
ราก @ เรียกเก็บเงินสก์ท็อป: / home / บิล # 


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$ 

นี่คือเหตุผล. ฉันคิดว่ามันชัดเจนสำหรับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.