Run0 - เปิดตัวเครื่องมือบนพื้นฐาน systemd ที่มาแทน sudo
(mastodon.social)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 variableSUDO_xxxที่เข้ากันได้กับsudo
ความเห็นของ GN⁺
- น่าประทับใจที่มีการเสนอ
run0เป็นทางเลือกแทนsudoซึ่งถูกใช้งานกันอย่างแพร่หลาย ดูเหมือนว่าจะยังคงข้อดีของsudoไว้ได้ พร้อมหลีกเลี่ยงความเสี่ยงของ SUID - การแจ้งสถานะการยกระดับสิทธิ์อย่างชัดเจนในเชิงภาพน่าจะช่วยลดความเสียหายจากความผิดพลาดได้ แม้การเปลี่ยนสีพื้นหลังเทอร์มินัลอาจกวนใจบ้าง แต่ก็ปรับได้ด้วยตัวเลือก จึงไม่น่าเป็นปัญหาใหญ่
- การตั้งค่าสิทธิ์ผ่าน
polkitอาจยืดหยุ่นน้อยกว่าsudoแต่ในทางกลับกันก็อาจทำให้เรียบง่ายขึ้นและลดพื้นผิวการโจมตีลงได้ การมีตัวอย่างการตั้งค่าpolkitที่จัดทำเอกสารไว้อย่างดีจึงดูสำคัญ - สำหรับการย้ายระบบจากสคริปต์เดิม ๆ ที่พึ่งพา
sudoอยู่ ก็น่าจะยังต้องมีsudoให้ใช้งานควบคู่ไปอีกระยะหนึ่ง แต่ถ้าเป็นสภาพแวดล้อมใหม่ก็น่าเริ่มใช้run0ตั้งแต่ต้น - ในระยะยาว หวังว่าการนำ
run0มาใช้จะเป็นจุดเริ่มให้กล้าตัด SUID ออกไป และเปลี่ยนไปสู่อาร์กิเทกเจอร์ที่รวมการจัดการสิทธิ์ของระบบไว้ที่ system service อย่างเป็นศูนย์กลาง ซึ่งถือเป็นทิศทางที่เหมาะสมในแง่ความปลอดภัยและความทนทานของระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News