ฉันไม่เข้าใจว่าทำไมจึงsu -
เป็นที่ต้องการมากกว่าsu
เพื่อเข้าสู่ระบบในฐานะ root
ฉันไม่เข้าใจว่าทำไมจึงsu -
เป็นที่ต้องการมากกว่าsu
เพื่อเข้าสู่ระบบในฐานะ root
คำตอบ:
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 -
แทน
umask
000 มิเช่นนั้นจะไม่ทำงาน
su
ไฟล์ใน PATH ได้เช่นกัน su
มันไม่ได้เป็นเรื่องยากมากที่จะเลียนแบบพฤติกรรมของจริง ผู้ใช้ระดับสูงได้รับความประมาทแล้ว :-)
su --
ไม่เหมือนกับsu -
: --
บอกตัวจัดการตัวเลือก getopt (หรือคล้ายกัน) เพื่อหยุดการประมวลผลบรรทัดคำสั่งสำหรับตัวเลือกเพิ่มเติม (มีประโยชน์เช่นถ้าส่วนที่เหลือมีชื่อไฟล์ซึ่งอาจขึ้นต้นด้วย '-') นั่นคือใน "rm -i - -f": -f นั้นจะถือว่าเป็นอาร์กิวเมนต์ปกติดังนั้นที่นี่เป็นชื่อของไฟล์ที่จะrm -i
และไม่เป็น-f
ตัวเลือกเพิ่มเติมจากrm
คำสั่ง ดังนั้นsu --
เป็นเพียงsu
และไม่su -
! ดังนั้นsu --
จะไม่ปลอดภัยกับ givan ตัวอย่าง (ตลกและให้คำแนะนำ) โดย wag su -
ใช้
su -
บันทึกคุณในฐานะ root อย่างสมบูรณ์ในขณะที่su
ทำเพื่อให้คุณแกล้งทำเป็นราก
ตัวอย่างที่ชัดเจนที่สุดคือนี่คือ~
โฮมไดเร็กตอรี่ของรูทถ้าคุณใช้su -
, แต่โฮมไดเร็กตอรี่ของคุณเองถ้าคุณใช้su
.
มันอาจหมายถึงความแตกต่างในไฟล์พรอมต์PATH
หรือไฟล์ประวัติทั้งนี้ขึ้นอยู่กับระบบของคุณ
ดังนั้นหากคุณเป็นส่วนหนึ่งของทีมที่ดูแลระบบและเพื่อนร่วมงานของคุณสั่งให้คุณทำงานคุณจะรู้ว่ามันจะทำงานเหมือนกันถ้าคุณใช้ทั้งคู่su -
แต่ถ้าคุณทั้งคู่กำลังใช้su
งานอยู่อาจมีความแตกต่างเนื่องจากคุณมี การกำหนดค่าเชลล์ที่แตกต่างกัน
ในทางกลับกันถ้าคุณต้องการรันคำสั่งในฐานะรูท แต่ใช้การกำหนดค่าของคุณเองอาจsu
จะดีกว่าสำหรับคุณ
นอกจากนี้อย่าลืมsudo
ว่ามี-s
ตัวเลือกในการเริ่มเชลล์ที่รันในฐานะรูท แน่นอนว่าสิ่งนี้มีกฎที่แตกต่างกันเช่นกันและจะเปลี่ยนแปลงตามการกระจายที่คุณใช้
.bashrc
หรือ/etc/bashrc
หรือสคริปต์มีการตั้งค่า/etc/profile.d
PATH
มองหาif [ $UID -eq 0 ]
หรืออะไรทำนองนั้น
$USER
เช่นไม่มีการเปลี่ยนแปลง
sudo su
อะไร
ฉันใช้ su - เมื่อฉันอยู่ในไดเรกทอรีในฐานะผู้ใช้ปกติ แต่ต้องการเปลี่ยนเป็นรูทและยังคงอยู่ในไดเรกทอรีเดิมหลังจากเปลี่ยน เมื่อคุณใช้ su - มันจะสลับผู้ใช้ไปที่รูทและยังนำคุณไปยัง / รูทซึ่งเป็นไดเรกทอรีโฮมรูท
/
อะไรก็ตามที่ถูกกำหนดให้เป็นโฮมได
ความแตกต่างที่สำคัญคือ:
su - username
ตั้งค่าสภาพแวดล้อมของเชลล์ราวกับว่ามันเป็นการเข้าสู่ระบบที่สะอาดเป็นผู้ใช้ที่ระบุมันเข้าถึงและใช้ตัวแปรสภาพแวดล้อมของผู้ใช้ที่ระบุ
su username
เพียงแค่เริ่มต้นเชลล์ด้วยการตั้งค่าสภาพแวดล้อมปัจจุบันสำหรับผู้ใช้ที่ระบุ
หากไม่ได้ระบุชื่อผู้ใช้ด้วยsu
และsu -
บัญชีรูทจะถือว่าเป็นค่าเริ่มต้น
su --
su
เป็นเช่นเดียวกับ