ถ้าฉันสร้างบัญชีผู้ใช้ในอูบุนตูชื่อroot
มันจะมีการอนุญาตรูทโดยอัตโนมัติหรือไม่? ทำลายระบบหรือไม่ ทำให้เกิดความผิดพลาดในเมทริกซ์หรือไม่ อะไรจะเกิดขึ้น?
ถ้าฉันสร้างบัญชีผู้ใช้ในอูบุนตูชื่อroot
มันจะมีการอนุญาตรูทโดยอัตโนมัติหรือไม่? ทำลายระบบหรือไม่ ทำให้เกิดความผิดพลาดในเมทริกซ์หรือไม่ อะไรจะเกิดขึ้น?
คำตอบ:
ชื่อผู้ใช้จะต้องไม่ซ้ำกันดังนั้นตามคำตอบของ Owen Hinesคุณจะไม่สามารถสร้างผู้ใช้นี้ อย่างไรก็ตามประเด็นสำคัญที่นี่คือ superuser มอบอำนาจ (สิทธิ์ที่เป็นไปได้ทั้งหมด) ไม่ได้รับจากชื่อผู้ใช้root
แต่โดย UID
ผู้ใช้ที่มี UID 0 เป็น superuser
ดังนั้นหากผู้ใช้ที่มี UID 0 มีชื่ออื่นและคุณสร้างผู้ใช้ชื่อroot
พวกเขาจะไม่มีสถานะพิเศษใด ๆ
ผมหมายถึงคุณไปยังรากวิกิพีเดียแท็ก!
root
ใช้ ไม่ใช่ความคิดที่ดี แต่เป็นไปได้ ตัวอย่างเช่นเราสามารถสร้างบัญชี superuser ที่เรียกgod
ด้วย uid 0
และผู้ใช้ปกติที่เรียกว่าroot
uid 1000
หรือหมายเลขอื่น ๆ
มันจะไม่ยอมให้คุณเพราะจะมีroot
ผู้ใช้อยู่แล้ว
แต่ดังที่Florian Dieschกล่าวในความคิดเห็น:
เครื่องมือบางอย่างจะบ่น แต่คุณสามารถแก้ไข
/etc/passwd
และตนเองเพื่อสร้างผู้ใช้สองชื่อetc/shadow
root
chown root file
?
ก่อนอื่นตามที่คนอื่นได้ระบุไว้คุณเปลี่ยนผู้ใช้ด้วย UID 0 เป็นอย่างอื่น จากนั้นคุณสามารถสร้างผู้ใช้ปกติที่มีชื่อรูทและ UID ที่สูงกว่า 1,000 ได้มันจะทำงานได้ "ดี" สิทธิ์และฟังก์ชันระบบหลักทั้งหมดใช้ UID ไม่ใช่ชื่อผู้ใช้ ความจริงแล้วนี่เป็นก้าวแรกที่ดีในการทำให้ระบบ Linux แข็งตัว (ดีกว่ามากหากปิดการใช้งานรูท แต่ก่อน sudo เราเคยทำเช่นนี้)
ตอนนี้สิ่งที่จะเกิดขึ้น
ส่วนใหญ่ไม่มีอะไรเลย การเรียกระบบทั้งหมดที่เกี่ยวข้องกับการอนุญาตหรือการพิสูจน์ตัวตนใช้ UID (ที่ฉันรู้) และมันก็เป็นเช่นนั้นมาระยะหนึ่งแล้ว ระบบของคุณจะทำงานต่อไปตามปกติ เครื่องมือระบบจะแสดงชื่อผู้ใช้ใหม่ แต่ทำงานได้ตามปกติ ในคำอื่น ๆ "ราก" ในการประชุมและไม่ได้ตั้งอยู่ในหิน
ที่กล่าวว่าฉันแน่ใจว่ามีเครื่องมือและโปรแกรมบางอย่างที่เขียนได้ไม่ดี โปรแกรมที่ตรวจสอบตัวแปรสภาพแวดล้อม $ USER อาจทำงานผิดพลาด โดยปกติแล้วสิ่งเหล่านี้เป็นสคริปต์และโครงการขนาดเล็ก แต่คุณสามารถใช้เวลาติดตามสิ่งที่กระทำผิดเมื่อ 6 ปีที่แล้วใน fdisk ที่ทำให้คุณปวดหัว
นี่คือสิ่งที่ฉันเคยทำตลอดเวลา มันเป็นขั้นตอนที่ง่ายและอยู่ภายใต้กฎของ "ชื่อผู้ใช้ที่ไม่สามารถคาดเดาได้" มีวิธีที่ดีกว่ามากในการบรรลุเป้าหมายเดียวกันในวันนี้ว่า
ตามที่คนอื่นได้อธิบายไว้มันคือ UID = 0 ให้ผู้ใช้ "พลังพิเศษ" ไม่ใช่ชื่อผู้ใช้ที่เป็น "รูท" ดังนั้นหากคุณจัดการผู้ใช้อื่นที่เรียกว่า "root" (หลังจากเปลี่ยนชื่อ / ลบผู้ใช้เดิม) - สถานะพิเศษของผู้ใช้จะขึ้นอยู่กับ UID ที่คุณให้ไว้
ซึ่งนำไปสู่ความคิดที่น่าสนใจอื่น: เป็นไปได้โดยสิ้นเชิงที่จะมีผู้ใช้หลายคนที่มี UID เดียวกัน (ซึ่งทำให้พวกเขาเป็นผู้ใช้เดียวกันจากจุดอนุญาตระบบไฟล์ แต่อนุญาตให้มีไดเรกทอรีพูดเชลล์และโฮมที่แตกต่างกัน) ในความเป็นจริงระบบคล้าย UNIX บางระบบมีบัญชี superuser อื่นที่เรียกว่าtoor (root backward) ซึ่งอนุญาตให้มีบัญชีผู้ใช้ขั้นสูงสองบัญชีที่มีการตั้งค่าที่แตกต่างกัน
ใช่ในทางทฤษฎีต้องไม่มีผู้ใช้สองคนที่มีชื่อผู้ใช้เดียวกันหรือรหัสเดียวกัน และยูทิลิตี้มาตรฐานนั้นจะเข้าใจผิดได้และจะไม่ทำให้ผู้ใช้เช่นคุณ แต่คุณสามารถแก้ไข / etc / passwd ได้ด้วยตนเอง
ตัวอย่างเช่นฉัน:
$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'.
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)
อย่างที่คุณเห็นเราเป็นรากฐานในขณะนี้! ใช่นั่นไม่ใช่รูทจริง (ไม่ใช่ uid = 0) แต่มันก็เหมือนกันสี่ตัวอักษร น่าประทับใจและไร้ประโยชน์
นอกจากนี้คุณสามารถทำการปรับเปลี่ยนอื่น ๆ ออกจากชื่อผู้ใช้ตามที่เป็นอยู่ (yourname หรือ root2) แต่เปลี่ยน uid
$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash
(ดูฟิลด์ UID และ GID เป็นศูนย์) ตอนนี้คุณมีผู้ใช้งานปกติ (ไม่ใช่รูท) ด้วยชื่อผู้ใช้ที่เกือบจะไม่น่าสงสัย
$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda
Command (m for help):
อย่างที่คุณเห็นผู้ใช้ทั่วไปไม่สามารถใช้ fdisk บน / dev / sda ได้ แต่ root2 สามารถทำอะไรได้!
เคล็ดลับง่ายๆนี้บางครั้งใช้หลังจากระบบถูกแฮ็กเพื่อให้แบ็คดอร์ แม้ว่ารูทจริงจะเปลี่ยนคีย์ / รหัสผ่านแฮ็กเกอร์ยังคงสามารถควบคุมระบบผ่านผู้ใช้รายอื่นด้วย uid = 0
ที่จริงแล้วชื่อผู้ใช้ไม่ได้เป็น 'รูท' หรือ uid = 0 นั้นไม่ได้เป็นของวิเศษ นี่เป็นเพียงเรื่องของการประชุม และมันก็ไม่จริงเสมอไป (ดูคำถามนี้: บัญชีรูทมี UID / GID 0 เสมอหรือไม่ ) รหัสเคอร์เนลนั้นน่าอัศจรรย์ ที่จริงแล้วรหัสผู้ใช้เอง - ไม่สามารถทำสิ่งใด ๆ ที่รูทสามารถทำได้ แม้ว่าจะทำงานเป็นราก! พลังงานรากอยู่ในเคอร์เนล เช่นถ้าคุณทำ "cat / etc / shadow" (โดยปกติแล้วรูทสามารถทำได้), / bin / cat เรียกโปรแกรม libc open () ฟังก์ชั่นซึ่งยังคงเป็นรหัสผู้ใช้และฟังก์ชั่น open () นี้จะทำการเรียกเคอร์เนลระบบ จากนั้นเคอร์เนลเองตัดสินใจว่าจะทำอย่างไร ตัวอย่างเช่นเคอร์เนลอาจอนุญาตการดำเนินการบางอย่างหากผู้ใช้ที่มีประสิทธิภาพมี id == 0
ในทางทฤษฎีหากคุณจะเปลี่ยนรหัสบางส่วนในเคอร์เนลและจัดการผู้ใช้ 'www-data' ที่แตกต่างกัน - การดำเนินการบางอย่างอาจได้รับอนุญาตสำหรับผู้ใช้ 'www-data' เท่านั้น (และไม่ได้รับอนุญาตแม้แต่กับรูท)
เครื่องมือ 'เป็นมิตรกับผู้ใช้' ส่วนใหญ่จะตรวจสอบสิ่งนี้และจะไม่อนุญาตให้คุณสร้างบัญชีด้วยชื่อผู้ใช้ที่ได้ดำเนินการไปแล้ว
หากคุณหลีกเลี่ยงสิ่งนี้และเพิ่มบัญชีผู้ใช้รูทที่สองลงใน / etc / passwd และ / etc / shadow ของคุณด้วยตนเองจะใช้อันไหนฉันเดาว่าจะขึ้นอยู่กับว่าคุณใส่ก่อนหรือหลังบัญชีเดิม เช่นเดียวกับบัญชีผู้ใช้ทั้งหมดในระบบ unix จะมีการเข้าถึง superuser เฉพาะในกรณีที่ UID เป็นศูนย์โดยไม่คำนึงถึงชื่อ