จะไม่เป็นผู้ใช้รูทได้อย่างไร? ผู้ดูแลระบบรูทหรือไม่


42

ฉันติดตั้ง Ubuntu บนพีซีของฉัน ในการเข้าสู่ระบบฉันใช้ชื่อผู้ใช้และรหัสผ่านที่ฉันสร้างขึ้นระหว่างการติดตั้ง นี่หมายความว่าฉันเป็นผู้ใช้รูทหรือไม่? ถ้าใช่แล้วฉันจะกลายเป็นไม่ใช่รากได้อย่างไร ดูเหมือนว่าผู้ใช้ที่ไม่ใช่รูทนั้นปลอดภัยกว่าผู้ดูแลระบบ


9
คุณมีความสับสนรากกับผู้ดูแลระบบของสองสิ่งที่แตกต่างกัน
fitojb

ที่เกี่ยวข้อง: RootSudo (ในอูบุนตูวิกิ)
Eliah Kagan

Windows 7 ไม่ได้ทำให้ความแตกต่างนี้ชัดเจนซึ่งทำให้ฉันสับสนและสับสนจริงๆ เทียบเท่ากับการทำงานเป็นรูทใน Windows คือ "Run as Administrator" แต่แน่นอนถ้าคุณลงชื่อเข้าใช้ในฐานะผู้ดูแลระบบคุณกำลังเรียกใช้ทุกอย่างในฐานะผู้ดูแลตามคำจำกัดความแล้ว ทางเลือกศัพท์ที่แย่จริงๆ
Kris Harper

@KrisHarper ไม่ได้มีความหมาย (หรือเป็นจริง) ที่ผู้ใช้จะต้องเรียกใช้โปรแกรมด้วยตนเอง ใน Ubuntu ผู้ดูแลระบบ (ผู้ที่ไม่รูท) สามารถเรียกใช้โปรแกรมด้วยรูทsudoได้ โดยทั่วไปผู้ดูแลระบบ (หรือผู้มีอำนาจมิฉะนั้นผู้ใช้) X สามารถทำงานcommand...เป็น Y sudo -u Y command...กับ ใน Windows Vista และใหม่กว่าโดยเปิดUACผู้ใช้ที่มีอำนาจในการดูแลระบบจะรันโปรแกรมโดยไม่มีพวกเขายกเว้นเมื่อพวกเขาอนุญาตให้โปรแกรมนั้นสืบทอดความสามารถของตนอย่างชัดเจน เรียกใช้ในฐานะผู้ดูแลระบบจะปรากฏขึ้นเมื่อเปิด UAC (หรือสำหรับผู้ใช้ที่ จำกัด )
Eliah Kagan

@EliahKagan แน่นอนคุณถูกต้อง ภายใต้ฮูดผู้ใช้จะได้รับโทเค็นความปลอดภัยระดับต่ำและสามารถร้องขอระดับที่สูงกว่าเมื่อจำเป็น ฉันกำลังพูดความหมายจากมุมมองประสบการณ์ผู้ใช้ว่า ถ้าฉันบริหารคอมพิวเตอร์และใช้งานอยู่ฉันกำลังใช้งานโปรแกรมในฐานะผู้ดูแลระบบอย่างแท้จริง ประเด็นของฉันคือมันเป็นตัวเลือกคำศัพท์ที่ไม่ดีเพราะมันทำให้เกิดสิ่งที่เป็นนามธรรมระหว่างผู้ดูแลระบบทางกายภาพ (ตัวเอง) และตัวดิจิตอล (บัญชีผู้ใช้เฉพาะ) ฉันคิดว่ามันเป็น UX ที่ไม่ดีแม้ว่าผู้มีความเชี่ยวชาญทางเทคนิคจะเข้าใจสิ่งที่เกิดขึ้น
Kris Harper

คำตอบ:


79

คุณเป็นผู้ดูแล rootแต่ไม่ rootผู้ใช้สามารถทำอะไรได้ ผู้ดูแลระบบสามารถดำเนินการเป็นrootrootแต่ปกติสิ่งที่ผู้บริหารจะไม่ได้ทำโดย ด้วยวิธีนี้คุณสามารถควบคุมระบบของคุณเองได้อย่างสมบูรณ์ แต่เฉพาะเมื่อคุณเลือกที่จะใช้

Ubuntu ขอรหัสผ่านเมื่อคุณพยายามทำสิ่งต่าง ๆrootเพื่อให้แน่ใจว่าเป็นของคุณจริงๆ

บัญชีผู้ใช้: บุคคลและอื่น ๆ

ผู้ใช้ที่เป็นมนุษย์จริงมีบัญชีผู้ใช้ที่เป็นตัวแทนของพวกเขา คุณสร้างหนึ่งบัญชีดังกล่าวเมื่อคุณติดตั้ง Ubuntu แต่ไม่บัญชีผู้ใช้ทั้งหมดเป็นตัวแทนของผู้ใช้งานของมนุษย์ที่แท้จริง

ผู้ใช้ที่เป็นมนุษย์จริงได้รับความสามารถ (และถูกปฏิเสธ) ผ่านบัญชีผู้ใช้ของพวกเขา พวกเขาจะต้องใช้บัญชีผู้ใช้เพื่อใช้ระบบ ดังนั้นความสามารถและข้อ จำกัด ของบัญชีผู้ใช้จะมีผลกับพวกเขา

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

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

บัญชีผู้ใช้ที่ไม่ใช่มนุษย์ที่สำคัญที่สุด

superuserที่มีชื่อผู้ใช้rootเป็นบัญชีผู้ใช้ที่ไม่ใช่มนุษย์ที่มีการผสมผสานที่เฉพาะเจาะจงมากความสามารถและข้อ จำกัด : ความสามารถทั้งหมดและไม่มีข้อ จำกัด

root's ได้รับอนุญาตที่จะทำอะไร ยังมีสิ่งที่rootไม่สามารถทำได้เนื่องจากระบบไม่สามารถดำเนินการหรือทำให้เข้าใจได้ ดังนั้นrootไม่สามารถฆ่ากระบวนการที่มีอยู่ในการนอนหลับสำรองหรือทำให้ร็อคหนักเกินไปที่จะย้ายแล้วย้ายไป

กระบวนการของระบบที่สำคัญหลายอย่างเช่นinitทำงานเป็นrootและrootใช้สำหรับการดำเนินงานด้านการบริหาร

ฉันสามารถเข้าสู่ระบบเป็นroot?

เป็นไปได้ที่จะกำหนดค่าrootบัญชีเพื่อให้สามารถเข้าสู่ระบบด้วยรหัสผ่าน แต่ไม่ได้เปิดใช้งานตามค่าเริ่มต้นใน Ubuntu แต่คุณอาจจะคิดว่าrootเป็นเหมือนwww-data, lp, nobodyและบัญชีที่ไม่ใช่มนุษย์อื่น ๆ (เรียกใช้cat /etc/passwdหรือgetent passwdดูทั้งหมด)

ผู้ใช้ที่เป็นมนุษย์เข้าสู่ระบบด้วยบัญชีผู้ใช้ของตัวเองและจากนั้นหากงานบางอย่างจะต้องดำเนินการกับบัญชีผู้ใช้อื่นพวกเขาทำให้งานที่จะดำเนินการกับตัวตนนั้นโดยไม่ต้องเข้าสู่ระบบในฐานะผู้ใช้ที่จริง

เป็นไปได้ที่จะกำหนดค่าผู้ใช้ที่ไม่ใช่ผู้อื่นเช่นwww-dataเพื่อให้สามารถเข้าสู่ระบบในฐานะพวกเขาเช่นกัน นั่นคือค่อนข้างหายาก แต่ในขณะที่บาง Unix อื่น ๆ เช่นระบบปฏิบัติการเป็นปกติที่จะเข้าสู่ระบบเป็นในขั้วroot ความเสี่ยงจากการทำงานของอินเตอร์เฟซแบบกราฟิกทั้งหมดเป็นrootบวกกับจำนวนโปรแกรมกราฟิกไม่ได้ออกแบบมาให้ทำงานเป็นrootและอาจไม่ทำงานอย่างถูกต้องหมายถึงว่าคุณไม่ควรพยายามที่จะได้รับrootเป็นเจ้าของเซสชั่นสก์ท็อป

โปรดทราบว่าในขณะที่เข้าสู่ระบบในขณะที่rootถูกปิดใช้งานโดยเริ่มต้นในอูบุนตูมีวิธีการที่จะได้รับrootเปลือกโดยไม่ต้องตรวจสอบเป็นrootที่ผลิตผลที่คล้ายกัน: พบมากที่สุดคือsudo -sหรือ-i , โหมดการกู้คืนและเทคนิคที่คล้ายกัน (ไม่ต้องกังวลหากคุณไม่รู้ว่าสิ่งเหล่านั้นคืออะไร) นี่ไม่ใช่การเข้าสู่ระบบจริง: ในโหมดการกู้คืนคุณrootจะเข้าสู่ระบบก่อนที่จะมีการเข้าสู่ระบบใด ๆ ด้วยsudoเมธอด -based คุณเพียงแค่เรียกใช้เชลล์ในฐานะรูท

ผู้ดูแลระบบ

ใน Ubuntu ผู้บริหารเป็นผู้ใช้ที่สามารถทำสิ่งที่พวกเขาต้องการให้เป็นroot, เมื่อพวกเขาเลือกที่จะทำเช่นนั้น

การตั้งค่าระบบแสดงบัญชีผู้ใช้ที่เป็นมนุษย์รวมถึงบัญชีผู้ดูแลระบบ
การตั้งค่าระบบ> บัญชีผู้ใช้ "Eliah Kagan" เป็นผู้ดูแลระบบเพื่อให้เขาสามารถทำสิ่งที่เป็นrootแต่เขาไม่ได้root

ฉันเป็นผู้ดูแลระบบ Ubuntu ของฉัน เมื่อฉันเรียกใช้โปรแกรมโดยปกติพวกเขาจะทำงานเป็นek("Eliah Kagan" เป็นชื่อเต็มที่ตรงกับekชื่อผู้ใช้)

เมื่อฉันเรียก AbiWord หรือ LibreOffice ekก็ทำงานเป็น เมื่อผมใช้ Firefox, ekโครเมียมเอาใจใส่หรือพิดจิ้นก็ทำงานเป็น ekโปรแกรมที่ทำงานเพื่อให้การดำเนินการอินเตอร์เฟซที่เป็นสก์ท็อป

อย่างไรก็ตามฉันเป็นผู้ดูแลระบบดังนั้นหากฉันต้องการทำงานธุรการฉันสามารถทำได้

sudo

บนบรรทัดคำสั่งฉันมักจะใช้sudoเพื่อเรียกใช้คำสั่งเป็นroot:

sudo command...

นี่จะแจ้งให้ฉันใส่รหัสผ่าน (ไม่ใช่rootรหัสผ่านrootไม่มีรหัส)

  • rootเพราะผมเป็นผู้ดูแลระบบจะสามารถดำเนินการเป็น ในการกำหนดค่าเริ่มต้นฉันต้องป้อนรหัสผ่านเพื่อทำสิ่งนี้
  • ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบไม่สามารถดำเนินการrootได้แม้โดยใส่รหัสผ่าน sudoคำสั่งจะล้มเหลวหากผู้ใช้ที่รันพวกเขาไม่ใช่ผู้ดูแลระบบ

เพราะผู้บริหารเป็นผู้ใช้สามัญอย่างสมบูรณ์ยกเว้นสำหรับความสามารถในการดำเนินการในขณะที่rootทำงานคำสั่งที่ต้องมีrootสิทธิพิเศษจะยังคงล้มเหลวยกเว้นเมื่อคำสั่งจะถูกเรียกว่าเป็นroot

สกรีนช็อตที่แสดงถึงความต้องการ sudo: ผู้ดูแลระบบสามารถรันคำสั่งบางอย่างได้สำเร็จโดยทำเช่น <code> root </code> ซึ่งมักจะทำโดยการเตรียม sudo (และช่องว่าง) ให้กับคำสั่ง
สกรีนช็อตที่แสดงถึงความจำเป็นในการใช้sudoเพื่อดำเนินงานด้านการบริหาร (อ้างอิงจาก"Sandwich"โดยRandall Munroe )

sudo แบบกราฟิก

โปรแกรมกราฟิกสามารถเรียกใช้rootผ่านfrontends กราฟิกสำหรับsudoเช่นgksu/gksudokdesudoและ ตัวอย่างเช่นในการเรียกใช้ GParted เป็นฉันสามารถเรียกใช้root gksudo gpartedจากนั้นฉันจะได้รับแจ้งให้ใส่รหัสผ่านของฉันแบบกราฟิก

พรอมต์รหัสผ่านกราฟิก gksudo

เนื่องจากฉันได้รับแจ้งทางกราฟิกจึงไม่จำเป็นต้องเป็นเทอร์มินัล rootนี้เป็นหนึ่งในวิธีที่เครื่องมือในการดูแลจะดำเนินการเป็น

Polkit

Polkit (เคยรู้จัก PolicyKit) rootเป็นวิธีการที่ผู้บริหารที่จะทำสิ่งที่เป็นอื่น โปรแกรมเข้าถึงบริการที่ดำเนินการ บางครั้งการดำเนินการกำลังเรียกใช้โปรแกรมทั้งหมด บางครั้งการกระทำมี จำกัด มากขึ้น

วันนี้การบริหารระบบสาธารณูปโภคกราฟิกจำนวนมากมีการตั้งค่าการใช้ polkit sudoโดยค่าเริ่มต้นมากกว่าที่จะใช้

ตัวอย่างหนึ่งของยูทิลิตี้ดังกล่าวคือ Software Center ใช้ประโยชน์จาก polkit อย่างเต็มที่โดยกำหนดให้ผู้ใช้ใส่รหัสผ่านเฉพาะเมื่อต้องการทำสิ่งที่ต้องการrootสิทธิ์พิเศษ (สิ่งนี้เป็นไปได้ด้วยการsudoพิสูจน์ตัวจริงโดยใช้ แต่ก็ยากขึ้นและไม่น่าจะสำเร็จได้)

ใน Software Center ฉันสามารถค้นหาและอ่านเกี่ยวกับแอปพลิเคชัน ฉันจะขอรหัสผ่านเมื่อฉันต้องการติดตั้ง

ตรวจสอบสิทธิ์ผ่าน polkit เพื่อติดตั้งแอปพลิเคชันในศูนย์ซอฟต์แวร์ Ubuntu

polkit แตกต่างกันอย่างไร

โปรแกรมกราฟิกใด ๆ สามารถทำงานได้เช่นเดียวrootกับส่วนหน้าgksudoแบบกราฟิกอื่น ๆ sudo(โปรแกรมอาจทำงานได้ไม่ดีนักขึ้นอยู่กับว่ามันถูกออกแบบมาเพื่อใช้เป็นrootหรือไม่ แต่คำสั่งเพื่อเริ่มโปรแกรมจะถูกเรียกใช้งานเป็นroot)

ในขณะที่ polkit นั้นพบได้บ่อยกว่าsudoGUI frontends เนื่องจากแอปพลิเคชั่นบน Ubuntu ทำหน้าที่เหมือนrootฉากหลัง polki จะเรียกใช้แอปพลิเคชั่นแบบกราฟิกเท่านั้นroot หากมีไฟล์กำหนดค่าที่อนุญาตและระบุว่าจะทำงานอย่างไร

Polkit ไม่ใช่ภาพกราฟิก

pkexec เป็นคำสั่งที่ใช้รันโปรแกรมด้วย polkit

เช่นsudo, pkexecสามารถเรียกใช้คำสั่งกราฟิกที่ไม่ใช่ (และไม่จำเป็นต้องมีไฟล์กำหนดค่าที่กำหนดความสามารถของคำสั่ง - เพียงแค่เรียกใช้คำสั่งเป็นroot.)

pkexec command...

pkexecแจ้งให้ใส่รหัสผ่านแบบกราฟิกแม้ว่าจะถูกเรียกใช้จากเทอร์มินัล (นี่เป็นหนึ่งในวิธีการทำงานที่คล้ายคลึงกับgksudoการทำงานแบบตรงมากกว่าsudo)

(หากไม่มี GUI - ตัวอย่างเช่นหากคุณลงชื่อเข้าใช้จากคอนโซลเสมือนหรือเซสชัน SSHแบบข้อความอย่างเดียวหรือ GUI ทำงานไม่ถูกต้อง - จากนั้นpkexecจะลดระดับอย่างสุภาพและแจ้งรหัสผ่านของคุณในบรรทัดคำสั่ง .)

การรันคำสั่งในเทอร์มินัลด้วย pkexec

เมื่อทำการพิสูจน์ตัวตนสำเร็จแล้วคำสั่งจะรันในเทอร์มินัล

คำสั่งทำงานต่อเนื่องเป็น <code> root </code> หลังจากตรวจสอบ polkit สำเร็จแล้ว

เรียกใช้คำสั่งเป็นผู้ใช้อื่นนอกจาก root

rootมีความพิเศษเพราะมันสามารถทำทุกอย่างที่ทำได้ แต่มันเป็นเช่นบัญชีผู้ใช้บัญชีใด ๆ และวิธีการในการใช้คำสั่งเป็นrootกับsudo(โดยตรงหรือกับหน้ากราฟิก) หรือ polkit สามารถปรับเปลี่ยนเล็กน้อยเพื่อเรียกใช้คำสั่งในฐานะผู้ใช้อื่น ๆ :

sudo -u username command...
gksudo -u username command...
pkexec --user username command...

อะไร? คุณเพิ่งพิมพ์sudoก่อนหรือไม่ ความปลอดภัยนั้นเป็นอย่างไร!

ใช้คำสั่งกับsudoเป็นประเภทเช่นการเรียกinfalliblity ของสมเด็จพระสันตะปาปา

เมื่อคุณเรียกใช้คำสั่งกับsudo [วิงวอนสันตะปาปาถูกต้อง] , อูบุนตู [folks คาทอลิก] พยายามอย่างหนักเพื่อให้แน่ใจว่าคุณจริงๆคุณ [จริงๆสมเด็จพระสันตะปาปา]

ใช่ฉันรู้ถึงความผิดพลาดของสมเด็จพระสันตะปาปา ขนานไม่สมบูรณ์

การพยายามทำบางสิ่งเช่นเดียวrootกับsudo(หรือ polkit) เป็นเรื่องใหญ่ - Ubuntu ไม่เพียงแค่ปล่อยสไลด์ดังกล่าวเหมือนทุกครั้งที่คุณเรียกใช้โปรแกรม

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

นอกเหนือจากการเตือนให้คุณระวังสิ่งนี้จะป้องกันสองสถานการณ์:

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

suผมเคยได้ยิน นั่นอะไร? ฉันสามารถใช้มันได้หรือไม่

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

ยกตัวอย่างเช่นการทำงานเป็นชื่อผู้ใช้เช่นเดียวกับsu username -c 'command...'command...sudo -u username command...

แต่เมื่อคุณเรียกใช้คำสั่งเป็นusernameกับsudoคุณป้อนรหัสผ่านของคุณ เมื่อคุณเรียกใช้คำสั่งเช่นเดียวusernameกับsuคุณป้อนusernameรหัสผ่านของ

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

rootบัญชี (ชอบwww-dataและnobody) ถูกยกเลิกโดยปริยาย ไม่มีรหัสผ่านที่จะใช้ในการเข้าสู่ระบบrootได้ ดังนั้นคุณจึงไม่สามารถใช้ในการเรียกใช้คำสั่งเป็นsuroot

คุณสามารถใช้suเพื่อเรียกใช้คำสั่งในฐานะผู้ใช้อื่นที่สามารถเข้าสู่ระบบ (ซึ่งโดยทั่วไปจะรวมบัญชีผู้ใช้ทั้งหมดในระบบของคุณที่เป็นตัวแทนของมนุษย์)

เมื่อเข้าสู่ระบบในฐานะแขกคุณไม่สามารถใช้งานsuได้เลย

การรวมsuและsudo

คนที่ไม่ใช่ผู้ดูแลระบบสามารถใช้suเพื่อเรียกใช้sudoในฐานะผู้ดูแลระบบได้ (นี่คือแม้ว่าตกลงขณะที่พวกเขาต้องใช้รหัสผ่านของผู้ดูแลระบบเพื่อเรียกใช้คำสั่งเป็นผู้ดูแล.) นั่นคือผู้ใช้ที่ จำกัด สามารถใช้suในการเรียกใช้ในการเรียกใช้คำสั่งเป็นsudo rootสามารถมีลักษณะดังนี้:

su username -c 'sudo command...'

(การเรียกใช้โปรแกรมกราฟิกด้วยวิธีนี้ต้องใช้ความระมัดระวังเป็นพิเศษ )

จะไม่suเป็นวิธีที่ปลอดภัยกว่าในการใช้คำสั่งrootใช่หรือไม่

อาจจะไม่.

เกิดอะไรขึ้นถ้าผู้ใช้ไม่ควรได้รับอนุญาตให้ทำหน้าที่เป็นroot?

กำหนดให้เป็นผู้ใช้ที่ จำกัด แทนที่จะเป็นผู้ดูแลระบบ

เกิดอะไรขึ้นถ้าโปรแกรมทำงานในฐานะผู้ดูแลระบบพยายามที่sudoจะroot?

หากคุณไม่ได้กำหนดค่าใหม่sudoเพื่อให้สำเร็จโดยไม่มีรหัสผ่านก็จะล้มเหลว

ไม่สามารถโปรแกรมที่ไม่ควรเรียกใช้เป็นrootpiggyback ในsudoคำสั่งล่าสุดจึงไม่จำเป็นต้องใช้รหัสผ่านใช่หรือไม่

สิ่งนี้จะไม่ประสบความสำเร็จมากนัก ทุกวันนี้ระบบปฏิบัติการส่วนใหญ่ (รวมถึง Ubuntu) ได้sudoกำหนดค่าไว้ตามค่าเริ่มต้นเพื่อให้การประทับเวลาใช้เฉพาะในบริบทที่ระบุเท่านั้น

ตัวอย่างเช่นถ้าฉันรันsudo ...ในแท็บ Terminal หนึ่งและรับรองความถูกต้องสำเร็จsudoในแท็บอื่น (หรือเรียกใช้โดยโปรแกรม GUI ที่ไม่เกี่ยวข้องหรือว่าฉันเรียกใช้จากคอนโซลเสมือนหรือเซสชัน SSH) จะยังคงพร้อมท์ให้ใส่รหัสผ่าน แม้ว่ามันจะทำงานทันทีหลังจากนั้น

โปรแกรมที่ทำงานในฐานะผู้ใช้ X ไม่สามารถเข้าถึงรหัสผ่านของผู้ใช้ X ได้หรือไม่

เลขที่

หากโปรแกรมที่เป็นอันตรายสามารถเรียกใช้ในฐานะผู้ดูแลระบบไม่ได้ "ฟัง" สิ่งที่พิมพ์เมื่อผู้ดูแลระบบรับรองความถูกต้องด้วยsudoหรือ polkit?

อาจเป็นไปได้ แต่แล้วมันอาจจะ "ฟัง" suเพื่อพิมพ์รหัสผ่านใน

ถ้าฉันบอกรหัสผ่านให้ฉัน

อย่าบอกรหัสผ่านของคุณกับคนอื่น

จะเป็นอย่างไรถ้ามีคนรู้รหัสผ่านของฉันเพื่อทำอะไรบางอย่างในนามของฉัน แต่ฉันไม่ต้องการให้พวกเขาดูแลระบบ?

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

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

ดังนั้นจะเป็นสิ่งที่ปลอดภัยที่สุดที่จะไม่อนุญาตให้ทั้งสองsudoและsuและทำให้คนเข้าสู่ระบบเป็นrootด้วยตนเอง?

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

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

อะไรทำให้ผู้ใช้เป็นผู้ดูแลระบบ

สมาชิกกลุ่ม

ใน Ubuntu 12.04 และต่อมาsudoผู้บริหารเป็นสมาชิกของกลุ่มที่เรียกว่า

ใน Ubuntu 11.10 และก่อนหน้านี้adminผู้บริหารเป็นสมาชิกของกลุ่มที่เรียกว่า

เมื่อระบบ Ubuntu ก่อน 12.04 ได้รับการอัพเกรดเป็น 12.04 หรือใหม่กว่าadminกลุ่มจะถูกเก็บไว้เพื่อความเข้ากันได้แบบย้อนหลัง (และยังคงมอบอำนาจการดูแลระบบให้กับผู้ใช้ในนั้น) แต่sudoก็มีการใช้กลุ่มเช่นกัน

บัญชีผู้ใช้ที่ จำกัด

ฉันสามารถใช้บัญชีผู้ใช้แบบ จำกัด แทนบัญชีผู้ดูแลระบบได้หรือไม่

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

ฉันสามารถทำให้บัญชีผู้ดูแลระบบของฉันเป็นบัญชีผู้ใช้ที่ จำกัด ได้หรือไม่

ใช่เพียงลบออกจากsudoและadminกลุ่ม (ดูด้านบน)

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

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


2
@ EliahKagan- เป็นใบ้อีกคนหนึ่ง :) ฉันจะทำการเปรียบเทียบ - รูทเป็นเหมือนพ่อแม่และผู้ใช้คนใดก็เหมือนเด็ก เด็กผู้สูงอายุ (ผู้ดูแลระบบ) มีสิทธิ์มากกว่า child (user) ไม่สามารถเป็น THE Parent (Root) ได้ เด็กอายุ 12 ปีสามารถทำสิ่งที่ไม่เป็นอันตรายในบ้าน (OS / Ubuntu) เช่นใช้ตู้เย็นและสิ่งของ เขาไม่ได้รับอนุญาตให้สัมผัสเงินอย่างปลอดภัย แต่ผู้ดูแลระบบอายุ 18 ปีสามารถใช้ 'sudo' หรือการอนุญาตจากผู้ปกครองเพื่อเข้าถึงเงินนั้น แต่ทั้งคู่ไม่ได้รับอนุญาตให้สัมผัสปืนในตู้เซฟอื่น เฉพาะ root (parent) เท่านั้นที่สามารถทำได้ มีเหตุผล ?
FirstName นามสกุล

1
@FirstNameLastName บัญชีผู้ดูแลระบบแสดงถึงผู้ใช้ที่แท้จริงซึ่งในโลกแห่งความเป็นจริงนั้นมีพลังทั้งหมด ผู้ดูแลระบบสามารถ " rootทำอะไรก็ได้" ด้วยsudoและ PolicyKit ผู้ดูแลระบบยังสามารถเปิดใช้งานrootบัญชีและเข้าสู่ระบบ. ถ้าคุณมีบัญชีผู้ใช้ที่เป็นนามธรรมที่เป็นส่วนผสมของกลไกการกระทำและใส่ใจผู้ใช้คนทั้งสองและไม่ใช่มนุษย์ผู้ใช้รวมถึงrootการกระทำอย่างหมดจด mechanistically หากคุณเข้าใจว่ามันทำงานได้ดีอย่างไรถ้าการเปรียบเทียบของคุณเสริมว่าดีมาก! แต่ฉันไม่คิดว่ามันจะจับความสัมพันธ์ระหว่างผู้ดูแลระบบจริง ๆ
Eliah Kagan

7
@FirstNameLastName สำหรับฉันแล้วการเปรียบเทียบที่ดีกว่าคือผู้ดูแลระบบเหมือนกับ Bruce Wayne และrootเหมือนกับ Batman ความแตกต่างนั้นเป็นเรื่องของตัวตนที่ถูกสร้างขึ้น บรูซเวย์นสามารถเป็นแบทแมนเมื่อใดก็ตามที่เขาต้องการและทำอะไรเกือบทุกอย่าง แต่เขาจะเป็นบรูซเวย์นภายใต้หน้ากาก ถึงกระนั้นแบทแมนก็ยิ่งเป็นตัวตนของเขาจริงๆ - ตัวละครของบรูซเวย์นเป็นสิ่งประดิษฐ์ที่ปกป้องเขาจากผลของการเป็นแบทแมน โดยการนำเสนอเป็นเวย์นในชีวิตประจำวันเขาสามารถปกป้องตัวเองและคนที่เขารักจากความผิดพลาดของตัวเองข้อบกพร่องในระบบและมัลแวร์ของเมือง Gotham
Eliah Kagan

4

ไม่มีสิ่งเช่นคำถามโง่;)

ฉันหวังว่านี่จะอธิบายสิ่งต่าง ๆ เล็กน้อย:

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


หากผู้ดูแลระบบสามารถกลายเป็นรูตโดยเพียงแค่เรียกใช้คำสั่งคนอื่น / แฮ็กเกอร์สามารถเรียกใช้จากระยะไกลและกลายเป็นผู้ใช้รูทได้หรือไม่?
นามสกุล

@FirstNameLastName พวกเขาจำเป็นต้องเข้าสู่ระบบจากระยะไกลเป็นหนึ่งในผู้ใช้รายอื่นเพื่อให้สามารถทำงานได้sudo
Izkata

@FirstNameLastName ยัง sudo ถามชื่อบัญชีและรหัสผ่านก่อนที่จะให้สิทธิ์การเข้าถึงรูต
Destrictor

@Drictrictor - ใช่แล้ว อันที่จริงแล้วนั่นคือสิ่งที่ทำให้ฉันสับสน ฉันอยู่ในบัญชีผู้ดูแลระบบและใส่รหัสผ่านผู้ดูแลระบบเพื่อเข้าสู่ระบบไปยังราก เมื่อรหัสผ่านและชื่อผู้ใช้เหมือนกันสำหรับผู้ดูแลระบบและรูททำไมจึงมีสองบัญชี
นามสกุล

@FirstNameLastName เหตุผลหลักที่คุณต้องป้อนรหัสผ่านเมื่อใช้ sudo สำหรับการบันทึก นี่คือเหตุผลด้านความปลอดภัยเป็นหลัก (มีบางอย่างเกิดขึ้นและแผนกไอทีของคุณกำลังค้นหาว่าใคร / อะไร / ที่ไหน)
Destrictor

3

ในระบบ Linux ทั้งหมดเพื่อทำการเปลี่ยนแปลงใด ๆ กับระบบเราจำเป็นต้องได้รับการรับรองความถูกต้องในฐานะผู้ใช้รูทและเพื่อใช้การเปลี่ยนแปลงทั้งหมดที่เราจำเป็นต้องเป็นผู้ใช้รูท

ผู้ใช้ปกติไม่สามารถใช้การเปลี่ยนแปลงระบบได้อย่างกว้างขวางนี่เป็นข้อได้เปรียบกับ Linux เมื่อเปรียบเทียบกับหน้าต่าง

หากการโจมตีใด ๆ ที่เกิดขึ้นนั้นจะเกิดขึ้นเฉพาะในพื้นที่นั้นในระบบ Linux / Unix เพราะการโจมตีหรือการปรับเปลี่ยนพื้นที่ที่เหลืออยู่มันต้องได้รับอนุญาตรูท แต่ใน Windows หากสถานที่หนึ่งถูกโจมตีหมายความว่าระบบทั้งหมดจะได้รับผล

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

หากคุณต้องการเป็นผู้ใช้รูท sudo สามารถช่วยคุณได้

sudo -i 

หากคุณต้องการเปิดตัวแอปพลิเคชันในฐานะผู้ใช้รูทคุณสามารถ sudo ได้

sudo <app_name>

มันจะเป็นการดีกว่าถ้าเรียกใช้ระบบในฐานะผู้ใช้ที่ไม่ใช่รูท


3

บัญชีที่สร้างขึ้นระหว่างการติดตั้งเป็นบัญชีผู้ดูแลระบบ

ใน Ubuntu บัญชีรูทไม่มีรหัสผ่านดังนั้นคุณไม่สามารถลงชื่อเข้าrootใช้ในฐานะผู้ใช้ มีวิธีหลีกเลี่ยงสิ่งนี้ แต่นี่เป็นการตั้งค่าเริ่มต้น

บัญชีผู้ดูแลระบบในอูบุนตูหมายความว่าผู้ใช้ถูกเพิ่มในกลุ่มsudoซึ่งทำให้บัญชีมีสิทธิ์ที่จะได้รับสิทธิพิเศษจากการใช้sudoคำสั่งชั่วคราว PolicyKit สามารถร้องขอการเพิ่มสิทธิ์โดยการแจ้งรหัสผ่าน 'ผู้ดูแลระบบ' (คุณต้องเลือกผู้ใช้ผู้ดูแลระบบและให้รหัสผ่านของบัญชีนั้น)

เพื่อยืนยันว่าสิ่งเหล่านี้เป็นจริง:

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

  • เปิดบัญชีผู้ใช้จากการตั้งค่าระบบและพยายามที่จะเพิ่มผู้ใช้ใหม่ กลไกการป้องกันที่ใช้นั่นคือ PolicyKit ผู้ดูแลระบบจะได้รับอนุญาตให้ตรวจสอบสิทธิ์และเพิ่มระดับสิทธิ์ แต่ผู้ใช้มาตรฐานจะถูกบล็อก ต้องใช้รหัสผ่าน 'ผู้ดูแลระบบ' เพื่อดำเนินการต่อ

นี่คือวิธีที่คุณตรวจสอบว่าบัญชีของคุณเป็นผู้ดูแลระบบหรือไม่:

  • เปิดบัญชีผู้ใช้จากการตั้งค่าระบบ
  • เลือกบัญชีผู้ใช้ของคุณในคอลัมน์ด้านซ้าย
  • คุณควรเห็นAdministratorภายใต้ชื่อบัญชีในบานหน้าต่างทั้งสองสำหรับบัญชีผู้ดูแลระบบและStandardสำหรับผู้ใช้ปกติ

2

เลขที่

ผู้ใช้ที่คุณเข้าสู่ระบบด้วย Ubuntu ไม่ใช่ผู้ใช้ผู้ดูแลระบบ (ผู้ดูแลระบบในศัพท์ Linux เรียกว่ารูท)


6
สิ่งนี้ทำให้เข้าใจผิดได้ดีที่สุด ผู้ใช้ที่ไม่ใช่รูทที่สร้างขึ้นระหว่างการติดตั้งคือผู้ดูแลระบบ ไม่ราก แต่ผู้ดูแลระบบ (หมายถึงส่วนใหญ่ที่พวกเขาสามารถดำเนินการตามที่rootมีsudoและ PolicyKit)
Eliah Kagan

@EliahKagan - โอเคแล้วอะไรคือความแตกต่างระหว่างผู้ดูแลระบบและบัญชีผู้ใช้รูท ฉันใหม่สำหรับ linux และวิทยาการคอมพิวเตอร์ดังนั้นโปรดอดทนกับฉัน
FirstName นามสกุล

@EliahKagan ไม่จริงนั่นเป็นเพียงแค่พยายามใช้คำศัพท์ Windows กับ linux sudoการเข้าถึงสามารถถูก จำกัด ด้วยโปรแกรมที่คุณพยายามเรียกใช้ในฐานะรูทซึ่งทำให้มันยุ่งยากมาก
Izkata

@FirstNameLastName มีผู้ใช้ชื่อจริง ๆ แล้ว "root" (ปกติแล้วฉันได้ยินมาว่ามันสามารถเปลี่ยนแปลงได้ แต่ฉันไม่รู้วิธี) มันสามารถเข้าถึงทุกสิ่ง
Izkata

2
@Izkata ไม่ผู้ดูแลระบบมีความหมายเฉพาะใน Ubuntu เป็นเรื่องไม่ถูกต้องที่จะกล่าวว่าบัญชีผู้ใช้ที่สร้างขึ้นระหว่างการติดตั้งไม่ใช่ผู้ดูแลระบบ สำหรับการอนุญาตให้ใช้คำสั่งเฉพาะเช่นเดียวrootกับsudoที่ไม่เกี่ยวข้อง ผู้ดูแลระบบสามารถทำงานใด ๆคำสั่งเป็นกับroot sudoโดยค่าเริ่มต้นไม่มีคนอื่น ๆ สามารถเรียกใช้คำสั่งใด ๆ ที่เป็นroot(หรือผู้ใช้อื่น ๆ ) sudoด้วย นอกจากนี้ยังsudoเป็นเพียงกลไกหนึ่งในการดำเนินการตามรูท - สิ่งที่ผู้คนมักคิดว่าsudoจริง ๆ แล้วคือ PolicyKit จริง ๆ แล้วทุกวันนี้
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.