Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

จาก sudo สู่ doas: ลดความซับซ้อนสิทธิ์ Linux เพื่อความปลอดภัยที่ดีกว่า

เผยแพร่เมื่อ 4 เมษายน 2569 เวลา 10:00 น. EDT

Yadullah Abidi 畢業於印度德里大學計算機科學 並在印度金奈亞洲新聞學院獲得新聞學研究生學位 擁有超過十年的 Windows 和 Linux 系統、編程、PC 硬件、網絡安全、惡意軟件分析和遊戲經驗 他將深厚的技術知識與強烈的編輯直覺相結合

Yadullah 目前為 MakeUseOf 撰寫文章 擔任 Staff Writer 涵蓋網絡安全、遊戲和消費科技 他曾任 Candid.Technology 的 Associate Editor 和 The Mac Observer 的 News Editor 報告從猖獗的網絡攻擊到最新的 Apple 技術

除了新聞工作 Yadullah 還是全棧開發者 有 JavaScript/TypeScript, Next.js, MERN stack, Python, C/C++ 和 AI/ML 經驗 無論是分析惡意軟件、評測硬體、還是在 GitHub 上構建工具 他都帶著開發者的實踐視角從事科技新聞工作

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

เช่นเดียวกับการเปลี่ยน "daily driver" OS สามารถปรับปรุง workflow ได้ทันที การเปลี่ยนจาก sudo เป็น doas บน Linux สามารถทำได้เหมือนกันสำหรับ terminal workflow ของคุณ ผมเปลี่ยน และกฎสิทธิ์ของผมสุดท้ายก็เข้าใจได้

sudo ทรงพลัง — แต่ยุ่งเหยิงเกินไป

กฎที่ซับซ้อนเกินไปที่ส่วนใหญ่เข้าใจไม่ลึก

sudo อยู่ทุกที่ มันส่งมอบกับ Ubuntu, Fedora, Arch และเกือบทุก major Linux distro ที่คุณเคยได้ยิน สำหรับผู้ใช้ Linux ส่วนใหญ่ มันคือ prefix ที่คุณใช้ก่อนคำสั่งเมื่อบัญชีผู้ใช้ของคุณไม่มีสิทธิ์รันมัน และแค่นั้นแหละ มันคือหนึ่งในคำสั่ง Linux terminal ที่แก้ปัญหาระบبส่วนใหญ่

อย่างไรก็ตาม ปัญหาคือความซับซ้อนของ sudo โค้ดต้นฉบับของ sudo ประมาณ 160,000 บรรทัดของ C ถ้ารวมไฟล์การตั้งค่าและไฟล์สนับสนุน จำนวนนั้นจะเกิน 223,000 สำหรับเครื่องมือที่หน้าที่หลักคือรันคำสั่งที่กำหนดเป็น root นั่นคือปริมาณโค้ดมหาศาลที่รันกระบวนการ privileged

Codebase ใหญ่กว่าให้ threat actors พื้นที่โจมตี (attack surface) ใหญ่ขึ้น และถ้าคุณไม่รู้ sudo เคยมี close calls มาก่อน ตัวอย่างเช่น CVE-2021-3156 ช่องโหว่ heap-based buffer overflow ใน sudo อนุญาตให้ขยายสิทธิ์เต็มรูปแบบไปเป็น root และมันซ่อนอยู่ใน codebase เกือบทศวรรษ

ถ้าดูข้างเคียงความปลอดภัย การตั้งค่ากับ sudo ก็ไม่ได้ดีนัก ถ้าคุณเคยพยายามเขียน custom /etc/sudoers rule ตั้งแต่ศูนย์ ไวยากรณ์อาจทำให้คุณขยับหัวในบางจุด มันไม่ได้ human-readable อีกด้วย คำสั่งง่ายๆ เช่น อนุญาตให้ผู้ใช้รันคำสั่งใดๆ เป็น root จะเขียนเป็น:

username ALL=(ALL:ALL) ALL

สำหรับผู้ที่จัดการ syntax นี้ครั้งแรก อาจจะซับซ้อน למדי นั่นคือบรรทัดจากรูปแบบการตั้งค่าที่มีทศวรรษของการตัดสินใจฟีเจอร์ที่ไม่ได้มองความเรียบง่าย

doas: รักษาความเรียบง่ายอย่างโหดร้าย

หน้าที่เดียว ไวยากรณ์น้อยที่สุด ไม่มีการยืดเยื้อทางความคิด

doas ถูกเขียนสำหรับ OpenBSD หลังจากโปรเจกต์ OpenBSD ตัดสินใจว่า sudo ใหญ่เกินไปที่จะส่งใน system base มันถูกสร้างจากพื้นขึ้นมาเพื่อทำงานเดียวกันพื้นฐาน โดยไม่พก bloat ของ sudo ไปด้วย

ผลลัพธ์คือโปรแกรมที่มี source code ประมาณ 500 บรรทัดของ C และเมื่อติดตั้งแล้ว ใช้พื้นที่ดิสก์เพียงไม่กี่ kilobytes โค้ดน้อยกว่า หมายถึง attack surface น้อยกว่า บั๊กที่อาจเกิดขึ้นน้อยกว่า และ binary ที่มนุษย์สามารถ audit ได้ในเวลาที่สมเหตุสมผล

ไวยากรณ์การตั้งค่าก็ปฏิบัติตามปรัชญา minimalist เดียวกัน แทนที่จะบังคับให้คุณต่อสู้กับไวยากรณ์ sudoers doas ใช้ภาษาอังกฤษธรรมดา คุณอ่าน doas configuration ส่วนใหญ่ออกลั่นได้และเข้าใจทันทว่ามันหมายถึงอะไร ตัวอย่างเช่น doas equivalent ของ sudoers configuration ที่กล่าวมาคือ:

permit username as root

แค่นั้นแหละ ไม่ต้องทำงานกับสัญลักษณ์สุ่มและตัวอักษรพิเศษในคำสั่งที่ควรอ่านและเข้าใจง่าย

การเปลี่ยนมาใช้ใช้เวลานาที ไม่ใช่ชั่วโมง

การตั้งค่าเร็วที่แทนที่ sudo โดยไม่มีปวดหัว

ตอนนี้ doas เป็นเครื่องมือ native ของ OpenBSD แต่คุณสามารถใช้ OpenDoas port เพื่อใช้บน Linux บน Debian และ Ubuntu คุณสามารถติดตั้งได้ด้วย package manager เริ่มต้น:

apt install doas

วิธีนี้ใช้ได้กับ distro อื่นๆ ด้วย คุณสามารถใช้ pacman บน Arch และ dnf บน Fedora และติดตั้ง doas ด้วยคำสั่งเดียว คุณต้องสร้างไฟล์ตั้งค่าที่ /etc/doas.conf เนื่องจากมันไม่ถูกสร้างอัตโนมัติตอนติดตั้ง (ไม่เหมือน sudo) เหื่อเชื่อหรือไม่ มันไม่ใช่ bug มันคือ feature ที่บังคับให้คุณตั้งใจมากขึ้นเกี่ยวกับว่าคุณ permit อะไรอย่างแน่นอน การตั้งค่าเองเป็นบรรทัดง่ายๆ:

permit persist yourusername as root

นี่คือ config ขั้นต่ำสำหรับระบบ single-user คุณอาจต้องการเปลี่ยนตามจำนวนผู้ใช้และ use cases เฉพาะ

เมื่อสร้างไฟล์ตั้งค่าเสร็จ ให้ล็อก permission ให้เหมาะสม การตั้ง ownership เป็น root:root และ permissions เป็น 0400 ทำให้ไฟล์อ่านได้เฉพาะ root ซึ่ง doas ต้องการแม้ก่อนรัน Validate ไฟล์ตั้งค่าด้วยการรัน doas -C /etc/doas.conf และคุณพร้อมแล้ว

เพราะ doas ออกแบบมาสำหรับ OpenBSD มันไม่ preserve Linux-specific environment variables เช่น XAUTHORITY หรือ LC_ALL อัตโนมัติ ถ้าคุณต้องการรันโปรแกรม GUI ภายใต้ X หรือรักษาการตั้งค่า locale นี่อาจทำให้ล้มเหลว โชคดีที่แก้ได้ด้วยบรรทัดเดียวเพิ่มในไฟล์ตั้งค่า:

setenv { DISPLAY XAUTHORITY LANG LC_ALL }

โปรดทราบว่า doas ไม่ได้ทำลาย GUI หรือ locale settings ของคุณ มันแค่ปฏิเสธที่จะสมมติว่าอะไรควรถูกไว้วางใจ มันคือข้อผิดพลาดที่แม้ผู้ใช้ Linux มืออาชีพก็อาจทำได้ เพราะ root จะไม่เห็น X sessions ของคุณ และคำสั่งอาจเปลี่ยนภาษา เรียงข้อความต่างออกไป หรือทำงานไม่สอดคล้อง

Workflow ของผมรู้สึกเบาลง

Friction น้อยลง ความประหลาดน้อยลง การควบคุมเท่าเดิม

ในการใช้งานประจำวัน การใช้ doas รู้สึกตั้งใจขึ้น ไฟล์ตั้งค่าอ่านได้ตอนนี้ หมายความว่าผมจริงๆ กลับมาปรับแต่งมันต่อ และ fine-tune การควบคุมคอมพิวเตอร์ของผมแบบที่ผมชอบ — สิ่งที่ไม่เคยเกิดกับ sudoers

ทุกกฎเป็นการตัดสินใจอย่างสำนึกเขียนในภาษาธรรมดา หมายความว่าคุณน้อยกว่าจะให้สิทธิ์โดยไม่ได้ตั้งใจ สำหรับใครที่รัน single-user desktop environment doas ให้คุณทุกอย่างที่ sudo ให้ มาโดยไม่มีความซับซ้อนที่ไม่ได้หมายถึงคุณตั้งแต่แรก

การเปลี่ยนมาไม่ใช่สำหรับทุกคน สภาพแวดล้อมเซิร์ฟเวอร์ multi-user ขนาดใหญ่ หรือเซ็ตอัปที่พึ่งพา finer controls ของ sudo ที่ยอมรับ จะคงอยู่กับ sudo แต่สำหรับเครื่อง Linux ส่วนตัว ไม่ว่าคุณจะอยู่บน Arch, Mint, Ubuntu หรืออะไรก็ตาม doas ให้วิธีที่ดีกว่า เรียบง่ายกว่า และสะอาดกว่าในการจัดการสิทธิ์จาก sudo ทุกประการ