run0: เครื่องมือมาแทน sudo ของ systemd
- เครื่องมือใหม่ที่รวมอยู่ใน v256 (จริง ๆ แล้วเป็น symlink ของ
systemd-run ที่มีอยู่เดิม)
- ทำงานคล้าย
sudo แต่ไม่ใช่ SUID
- ร้องขอให้ service manager เรียกคำสั่งหรือเชลล์ด้วย UID ของผู้ใช้เป้าหมาย
- เรียกคำสั่งเป้าหมายใน execution context แบบแยกออกจากกัน ซึ่งถูก fork ขึ้นใหม่จาก PID 1 โดยไม่สืบทอด context จากฝั่งไคลเอนต์
run0 ไม่ได้มีการสร้างภาษา configuration ของตัวเอง แต่ใช้ polkit สำหรับการอนุญาตสิทธิ์
- ระหว่างการยกระดับสิทธิ์ จะเปลี่ยนพื้นหลังของเทอร์มินัลเป็นโทนสีแดงเพื่อบอกว่ากำลังทำงานด้วยสิทธิ์พิเศษ และจะแสดงจุดสีแดงในชื่อหน้าต่างเพื่อระบุสถานะการยกระดับสิทธิ์ด้วย
- รองรับสวิตช์
--property= ของ systemd-run จึงสามารถกำหนด service setting ตามต้องการสำหรับคำสั่ง/เซสชันสิทธิ์พิเศษที่ถูกเรียกใช้งานได้
ปัญหาของ sudo
sudo เป็นไบนารี SUID ที่ค่อนข้างใหญ่ เป็นโค้ดสิทธิ์พิเศษที่ผู้ใช้ไม่มีสิทธิ์สามารถเรียกใช้ได้จาก context ของตนเอง
- มีพื้นผิวการโจมตีขนาดใหญ่จากภาษา configuration ที่ซับซ้อน, ปลั๊กอินที่โหลดได้ (เช่น LDAP), การจับคู่ชื่อโฮสต์ ฯลฯ
- ประเด็นที่ใหญ่ที่สุดคือการเป็นไบนารี SUID มันถูกเรียกโดยโค้ดที่ไม่มีสิทธิ์ และสืบทอด execution context ที่โค้ดไม่มีสิทธิ์ควบคุมอยู่ (เช่น environment variable, คุณสมบัติการจัดตารางโปรเซส, การจัดสรร cgroup, security context, file descriptor ที่ส่งต่อมา ฯลฯ) ไบนารี SUID จึงต้องคอยล้างสิ่งเหล่านี้อย่างระมัดระวังมาก แต่หลายครั้งก็ทำได้ไม่ดีพอ
อื่น ๆ
run0 สามารถใช้รันได้ไม่เฉพาะเชลล์ แต่รวมถึงคำสั่งอื่น ๆ ด้วยสิทธิ์ root ได้เช่นกัน และเมื่อโปรแกรมจบการทำงาน สีของเทอร์มินัลจะกลับเป็นเหมือนเดิม
- การเปลี่ยนสีพื้นหลังอัตโนมัติอาจทำให้ไม่สะดวก แต่สามารถเปลี่ยนหรือปิดได้ด้วยสวิตช์
--background=
- ดูเหมือนจะสามารถแทนที่
sudo ด้วย run0 ได้ทั้งหมด แต่แต่ละดิสทริบิวชันอาจมีแนวทางที่ชอบต่างกัน
- แนวทางปลั๊กอินของ
sudo เช่นการรองรับ LDAP มีปัญหาหลายอย่าง ส่วน polkit สามารถขยายได้ในแนวทางที่ systemd จัดการได้อย่างปลอดภัย
- การที่สคริปต์ bash จะตรวจสอบว่ารันผ่าน
run0 หรือไม่ สามารถดูได้จาก environment variable SUDO_xxx ที่เข้ากันได้กับ sudo
ความเห็นของ GN⁺
- น่าประทับใจที่มีการเสนอ
run0 เป็นทางเลือกแทน sudo ซึ่งถูกใช้งานกันอย่างแพร่หลาย ดูเหมือนว่าจะยังคงข้อดีของ sudo ไว้ได้ พร้อมหลีกเลี่ยงความเสี่ยงของ SUID
- การแจ้งสถานะการยกระดับสิทธิ์อย่างชัดเจนในเชิงภาพน่าจะช่วยลดความเสียหายจากความผิดพลาดได้ แม้การเปลี่ยนสีพื้นหลังเทอร์มินัลอาจกวนใจบ้าง แต่ก็ปรับได้ด้วยตัวเลือก จึงไม่น่าเป็นปัญหาใหญ่
- การตั้งค่าสิทธิ์ผ่าน
polkit อาจยืดหยุ่นน้อยกว่า sudo แต่ในทางกลับกันก็อาจทำให้เรียบง่ายขึ้นและลดพื้นผิวการโจมตีลงได้ การมีตัวอย่างการตั้งค่า polkit ที่จัดทำเอกสารไว้อย่างดีจึงดูสำคัญ
- สำหรับการย้ายระบบจากสคริปต์เดิม ๆ ที่พึ่งพา
sudo อยู่ ก็น่าจะยังต้องมี sudo ให้ใช้งานควบคู่ไปอีกระยะหนึ่ง แต่ถ้าเป็นสภาพแวดล้อมใหม่ก็น่าเริ่มใช้ run0 ตั้งแต่ต้น
- ในระยะยาว หวังว่าการนำ
run0 มาใช้จะเป็นจุดเริ่มให้กล้าตัด SUID ออกไป และเปลี่ยนไปสู่อาร์กิเทกเจอร์ที่รวมการจัดการสิทธิ์ของระบบไว้ที่ system service อย่างเป็นศูนย์กลาง ซึ่งถือเป็นทิศทางที่เหมาะสมในแง่ความปลอดภัยและความทนทานของระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News