เราควรปิดการใช้งานผู้ใช้รูท?


21

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

ข้อความแสดงแทน

คำตอบ:


16

เซิร์ฟเวอร์ของฉันทั้งหมดปิดใช้งานบัญชีรูท ( sp_pwdpตั้งค่าเป็น*) นี่เป็นสิ่งจำเป็นsudoสำหรับการเข้าถึงรูททั้งหมด [1] วัตถุประสงค์ของการทำเช่นนี้คือการตรวจสอบกิจกรรม superuser ทั้งหมดเพื่อให้ผู้คนสามารถเห็นสิ่งที่ทำกับระบบ

สำหรับตัวเลือกที่ไม่ยอมใครง่ายๆคุณสามารถsudoเขียนลงในไฟล์บันทึก (ตรงข้ามกับsyslog) และสร้างไฟล์ผนวกเท่านั้น (ใช้chattrบน Linux หรือchflagsบน BSD) วิธีนี้ไม่มีใครสามารถแก้ไขการตรวจสอบในภายหลัง

[1] ฉันมีนโยบายที่จะไม่ใช้รูทเชลล์หรือทำเชลล์เพื่อหนีจากกระบวนการรูท (มันก็โอเคที่จะใช้sudo sh -c '...'สำหรับการทำท่อหรือการเปลี่ยนเส้นทางแม้ว่า)


3
"ไม่มีกระสุนอยู่เลย!" อืมคุณรู้หรือไม่ว่ามีกี่โปรแกรมที่มีคำสั่ง "เลื่อนไปที่เชลล์" ในโปรแกรม? แม้กระทั่งก่อนที่คุณจะเริ่มมองหาการควบคุมงานเชลล์ ...
womble

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

เป็นไปได้หรือไม่ที่จะกำหนดค่า sudo เพื่อให้ไม่สามารถใช้ "sudo -s" ได้ ฉันใช้ sudoers เพื่อกำหนดค่าคำสั่งแต่ละคำเท่านั้น

@ Graham: คุณสามารถ อย่างไรก็ตามอย่างที่คุณเห็นจากความคิดเห็นข้างต้นนั่นไม่ได้หยุดอะไรเลยถ้าผู้ใช้ของคุณสามารถทำงานอะไรก็ได้ โซลูชัน watertight เพียงวิธีเดียวคือรายการที่อนุญาตซึ่งคุณแสดงรายการโปรแกรมเฉพาะที่ผู้ใช้สามารถเรียกใช้ได้และพวกเขาทั้งหมดจะต้องเชื่อมโยงแบบไดนามิก (เพื่อให้ตัวเลือก "noexec" สามารถทำสิ่งนั้นได้)
Chris Jester-Young

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

15

ฉันแนะนำอย่างเด่นชัดไม่ให้ปิดการใช้งานผู้ใช้รูท ปิดการใช้งานหรือ จำกัด การเข้าสู่ระบบราก (ผ่าน securetty และผ่าน sshd_config และผ่าน PAM และผ่านสิ่งที่มีคุณ) หากระบบของคุณอนุญาตให้มันสิทธิ์ root ขีด จำกัด หรือแยกบทบาทราก (คล้ายกับวิธีRSBACไม่ได้.) แต่โปรดกรุณาทำ ไม่ได้ปิดการใช้งานบัญชี root suloginโดยการลบรหัสผ่านมิฉะนั้นมันจะเป็นไปไม่ได้ในการเข้าสู่ระบบผ่านทาง suloginถูกใช้โดย initscripts ทั้งหมดที่ฉันรู้ในกรณีที่เกิดข้อผิดพลาดร้ายแรงที่รายงานโดย fsck - และนั่นหมายความว่าคุณจะถูกล็อคออกจากระบบหากระบบไฟล์รูทเสียหาย

ในการชี้แจง: โดย "ปิดการใช้งานบัญชีรูทโดยการลบรหัสผ่าน" ฉันหมายถึงกลไกต่าง ๆ ที่ลงท้ายด้วย! หรือ * ในฟิลด์รหัสผ่านของ / etc / shadow หรือที่คล้ายกัน ฉันไม่ได้หมายความว่า "เปลี่ยนกลไกการเข้าสู่ระบบรูทดังนั้นคุณจะไม่ได้รับพร้อมท์ให้ใส่รหัสผ่าน"


นี่เป็นปัญหาในระบบเช่น Ubuntu ที่ไม่เคยตั้งรหัสผ่านรูทหรือไม่ ฉันดูเหมือนจะสามารถดำเนินการ "sudo sulogin" แต่บางทีฉันไม่เข้าใจประเด็นที่สำคัญ
jldugger

น่าเสียดายที่ฉันไม่คุ้นเคยกับวิธีที่ Ubuntu จัดการกับรูท แต่ถ้าคุณสามารถทำ "sudo sulogin" และรับรูทเชลล์โดยไม่ได้รับพร้อมท์ให้ใส่รหัสผ่านรูทก็ไม่เป็นปัญหาเพราะจะใช้กลไกเดียวกันในการบูท คุณสามารถลองค้นหา grease สำหรับ sulogin ผ่าน initscripts เพื่อตรวจสอบว่ามันถูกเรียกใช้เมื่อใดและอย่างไร
Mihai Limbăşan

1
Ubuntu ไม่ใช้ sulogin หากคุณเข้าสู่โหมดผู้ใช้คนเดียวคุณจะได้รูทเชลล์ทันที อย่างไรก็ตามอ่านความคิดเห็นของฉัน (ในโพสต์ของฉัน) เพื่อดูว่าทำไมนี่ไม่ใช่ปัญหาในกรณีส่วนใหญ่
Chris Jester-Young

นอกจากนี้ยังมีการอ้างว่าการมีsuหรือมีsudoอยู่ในระบบของคุณให้กับผู้ใช้หมายถึงความเสี่ยงด้านความปลอดภัยที่คุณสามารถหลีกเลี่ยงได้หากคุณมีผู้ใช้รูทเฉพาะ นั่นคือตำแหน่งที่ได้รับการสนับสนุนจากผู้เขียนการกระจายความปลอดภัยของ Owl (และนักออกแบบพลังงานแสงอาทิตย์ในหมู่พวกเขา) - unix.stackexchange.com/questions/8581/…พยายามเสนอตำแหน่งของพวกเขาด้วยการอ้างอิง
imz - Ivan Zakharyaschev

ฉันเพิ่งมีปัญหานี้มาก: ฉันล็อกผู้ใช้รูทของฉันและ fsck ถูกบังคับเพราะการรีเซ็ตอย่างหนัก โชคดีที่ฉันสามารถบูท Linux ที่ผิดพลาดได้ด้วยfastbootตัวเลือกปลดล็อกบัญชีรูทและรีสตาร์ทเพื่อให้ทำงานfsckด้วยตนเองในที่สุด
tommyd

3

ฉันเปิดใช้งานบัญชีรูทบนเซิร์ฟเวอร์ทั้งหมดของฉันแล้ว ผู้ดูแลระบบทั้งหมดมีผู้ใช้ของตนเองและต้องเข้าสู่ระบบนั้น จากนั้นสลับเป็นรูท (ปิดใช้งาน ssh root)

ให้ผู้ดูแลนับต่ำ เฉพาะผู้ที่ต้องการเข้าถึงรูทบนเซิร์ฟเวอร์นั้นเท่านั้นที่มีรหัสผ่าน

ฉันไม่ใช่แฟนของ sudo มันง่ายเกินไปที่จะทำ 'sudo bash' สำหรับรูทเชลล์ ฉันรู้ว่านี่สามารถปิดการใช้งาน แต่ทำไมต้องรำคาญ? เพียง จำกัด ผู้ใช้ที่สามารถทำงานของผู้ดูแลระบบและพูดคุยกับแต่ละคนได้ เรามีนโยบายที่จะไม่ปล่อยให้รูทเทอร์มินัลเปิดโดยไม่ต้องใส่ข้อมูล ดังนั้นจึงเข้าสู่ระบบ su ทำงานออกจากระบบ

หมายเหตุ: ฉันทำงานใน บริษัท ขนาดเล็ก (พนักงาน 50 คน) และเราได้ทำงานกับผู้ดูแลระบบ 2 ครั้ง (1 windows / 1 linux) วิธีการทำสิ่งนี้อาจไม่ดีที่สุดเมื่อคุณมีผู้ใช้จำนวนมากขึ้น ฉันเองก็ยังคงไม่ใช้ sudo มีวิธีอื่นในการบันทึกกิจกรรมรูท


หากคุณต้องการรูทเชลล์จากคอนโซลคุณสามารถทำ 'sudo -i' แทนการเปิดจาก sudo bash โดยส่วนตัวแล้วฉันไม่ชอบความคิดในการเข้าสู่ระบบในฐานะผู้ใช้รูทโดยตรงเนื่องจากมีความเสี่ยงต่อการถูกแพะที่เป็นอันตราย
Spoike

คุณจะสูญเสียการบันทึก / การตรวจสอบกับสิ่งนั้น ทำให้ทุกคนใช้ sudo และห้ามไม่ให้ผู้คนทำ sudo bash หรือ sudo -i หรือ sudo -s ด้วยนโยบายขององค์กร สิ่งนี้จะช่วยให้คุณมีหลักฐานการตรวจสอบและหากคุณกำลังผลักดันบันทึกทั้งหมดของคุณไปที่โฮสต์กลางเพราะมันง่ายต่อการตรวจสอบว่าผู้คนกำลังติดตามนโยบาย
Christopher Cashell

นั่นเป็นวิธีการที่ได้ดำเนินการและสนับสนุนโดยผู้เขียนของ Distribuion ที่ปลอดภัยของ Owl (และผู้ออกแบบ Solar ในหมู่พวกเขา) - unix.stackexchange.com/questions/8581/
imz - Ivan Zakharyaschev

2

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

การปิดใช้งานการล็อกอินแบบรีโมตรูทอาจเกี่ยวข้อง แต่ถ้าคุณสามารถล็อกอินแบบโลคัล

และใช่ sudo ควรติดตั้งบนเซิร์ฟเวอร์ทุกเครื่องของคุณ มันมีประโยชน์และง่ายต่อการกำหนดค่า ทำไมคุณไม่ต้องการใช้


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

เป้าหมายของการปิดใช้งานบัญชีรูทคืออะไร? คุณจะทำอะไรถ้าเบรก sudo ไบนารี่หรือการตั้งค่าของคุณ (หรือเครื่องมืออะไรก็ตามที่คุณใช้)
เบอนัวต์

Disabling root remote login might be relevant but only if you are able to log on locally.นี่เป็นเพียงความเท็จอย่างโจ๋งครึ่ม คุณสามารถเข้าสู่ระบบจากระยะไกลด้วยบัญชีใด ๆ การปิดใช้งานการล็อกอินแบบรีโมตรูทไม่ได้ จำกัด เฉพาะคุณในการเข้าถึงแบบโลคัล
ด่าน

2

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

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


การเปลี่ยนพอร์ต SSH นั้นไม่มีจุดหมาย สแกนพอร์ตง่าย ๆ ให้มันหายไปอย่างง่ายดาย เมื่อฉันเทลเน็ตไปยังพอร์ต 22 บนเครื่องของฉันฉันได้รับ SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1.2
Matt Simmons

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

2

ฉันรู้ว่าหัวข้อนี้เก่ามาก แต่มีข้อบกพร่องที่สำคัญในตรรกะบทความเชื่อมโยงและฉันรู้สึก "rant'ie" - sudo ช่วยให้ทั้งรายการที่อนุญาตและขึ้นบัญชีดำ ไม่ใช่แค่ผิวดำตามที่ระบุในบทความที่เชื่อมโยง - สิ่งนี้ข้ามความคิดเรื่อง AAA (การรับรองความถูกต้องการอนุญาตและการตรวจสอบ) - su & sudo อนุญาตสำหรับการรับรองความถูกต้องและความรับผิดชอบ

สถานการณ์ที่ 1 ผู้ดูแลระบบแนะนำรหัสโกงบางส่วนให้กับระบบโดยเข้าสู่ระบบในขณะที่ root รหัสมีการเข้าถึงที่สมบูรณ์และผู้ดูแลระบบอาจไม่เคยรู้ว่าเกิดอะไรขึ้น อย่างน้อยด้วยการล็อกอินอย่างช้า ๆ (เช่น su / sudo) ผู้ดูแลระบบจะได้รับแจ้งให้ตรวจสอบหากรหัส rogue พยายามใช้สิทธิ์ที่ยกระดับ ...

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

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

1

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

หากคุณปิดการใช้งานการเข้าสู่ระบบบัญชีผู้ใช้โดยตรงคุณจะไม่สามารถแก้ไขระบบเมื่อมีปัญหาร้ายแรง

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


1

ผู้เขียนของ Distribuion ที่ปลอดภัยของ Owl (และผู้ออกแบบพลังงานแสงอาทิตย์) มีมุมมองที่ตรงข้ามอย่างเป็นธรรม ดูเช่นคำตอบ/unix/8581/which-is-the-safest-way-to-get-root-privileges-sudo-su-or-login/8660#8660สำหรับ การนำเสนอของการเรียกร้องของพวกเขา ปัญหาของการตรวจสอบการกระทำ superuser (คนที่ทำอะไร) จะได้รับการแก้ไขในมุมมองของพวกเขา (โดยพื้นฐานแล้วการแก้ปัญหาคือมีผู้ใช้รูทหลายคนที่มีชื่อต่างกัน)

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