Doas เป็นโปรแกรมขยายสิทธิ์ (privilege escalation) คล้าย sudo ออกแบบมาให้เบาและเรียบง่ายที่สุด เป็นโปรแกรมขยายสิทธิ์เริ่มต้นของ OpenBSD แต่มีสำหรับ UNIX-like อื่นๆ ผ่านโปรแกรม OpenDoas
ปัญหาของ sudo
หลายปี sudo กลายเป็นโปรแกรมขยายสิทธิ์มาตรฐานในโลก UNIX แต่หมายความว่า sudo ต้องรองรับทุก use-case ของทุกคนที่ใช้ UNIX-like machine แนวทางพัฒนานี้ทำให้ sudo กลายเป็นโปรแกรมอ schwerfällig (unwieldy) ยากต่อการเข้าใจและใช้งาน
ตัวอย่าง เพื่อแก้ไขพฤติกรรม sudo ต้องรันคำสั่ง visudo โปรแกรมโหลดพิเศษที่เปิดไฟล์ "/etc/sudoers" ใน "safe mode"
Visudo ทำ 2 อย่าง: เช็ค syntax error ใน "/etc/sudoers" ตามปกติ และ lock "/etc/sudoers" ให้ никтоนอกจาก user ปัจจุบันแก้ไขไฟล์ไม่ได้ สิ่งเหล่านี้อาจดูมีประโยชน์ แต่ visudo เป็นอาการของความซับซ้อนที่เพิ่มขึ้นของ sudo
หมายความว่า syntax ของ sudoers file ซับซ้อนจนต้องเช็ค syntax error อีกอย่าง sudo ต้องรองรับทั้ง single-user และ multi-user environments จึงต้อง lock sudoers file ให้ user ปัจจุบัน
Sudo เป็นโปรแกรมดี syntax config ที่ซับซ้อนสร้างระบบสิทธิ์ซับซ้อนได้ ซึ่งอาจมีประโยชน์สำหรับ system admin ที่มีประสบการณ์
แต่สำหรับผู้ใช้ส่วนใหญ่ เราใช้ sudo แค่รัน root shell ติดตั้งโปรแกรมและเล่นกับระบบ ความซับซ้อนของ sudo จึงดูเป็นอุปสรรชมากกว่าฟีเจอร์
ทำไมต้องใช้ doas?
เจตนาของ Doas คือแก้ความซับซ้อนของ sudo พัฒนาสำหรับ OpenBSD และ port ไป Linux ทุกระบบ เร็ว ใช้ง่าย แต่ง่ายต่อการดูแลและปลอดภัย
Syntax ของ doas ต่างจาก sudo การตั้งค่าเขียนคล/plain English ใน sudo syntax ให้ user ใน group wheel รันเป็น root ไม่ต้องรหัสผ่าน:
%wheel ALL=(ALL) NOPASSWD: ALL
ใน doas syntax เข้าใจง่ายกว่ามาก:
permit nopass :wheel as root
เพิ่มเติม doas ไม่ต้องโปรแกรมโหลดพิเศษอย่าง visudo แก้ config file ด้วย text editor ใดก็ได้ ถ้าผู้ใช้มีสิทธิ์พอ จะแก้ config ได้
ทำให้ doas เข้าใจง่ายและทำความเข้าใจได้ แนวทางเรียบง่ายและตรงไปตรงมาในการสร้าง privileged users/groups ทำให้กระบวนการโปร่งใสและไร้ข้อผิดพลาด
วิธีตั้งค่า doas กับ sudo
ถ้าใช้ Linux system โอกาสมากที่ใช้ sudo เป็นโปรแกรมขยายสิทธิ์อยู่แล้ว ทำให้ติดตั้ง doas ง่าย
Debian/Ubuntu ติดตั้ง doas ด้วย apt:
sudo apt install doas
Arch Linux ใช้ pacman:
sudo pacman -Syu opendoas
Fedora ใช้ dnf:
sudo dnf install opendoas
Void Linux ใช้ xbps:
sudo xbps-install opendoas
ในกรณีของผม ติดตั้ง doas บน Void Linux ใช้ XBPS
ไฟล์ Config ของ doas
ติดตั้ง doas แล้ว แก้ไขไฟล์ "/etc/doas.conf" โดย switch ไป root user ด้วย su:
su --command="nano /etc/doas.conf"
Su จะขอ root password แล้วเปิดหรือสร้าง config file ด้วย nano
เสร็จแล้ว อาจสังเกตว่า "doas.conf" ว่างเปล่า ต่างจาก visudo มาก แต่เหมือนที่กล่าว config doas ง่ายมาก
Syntax การตั้งค่า
Syntax สำหรับ doas.conf:
permit|deny [options] identity [as target] [cmd command [args ...]]
- Permit และ Deny ตั้งว่า doas จะอนุญาตหรือปฏิเสธ rule
- Options config เพิ่มเติม สำหรับ user ทั่วไป options ที่มีประโยชน์คือ persist และ nopass
- Identity คือ user หรือ group ที่รัน doas
- as target คือ user ที่ "Identity" รันเป็นได้หรือไม่ได้
- cmd คือคำสั่งที่ "Identity" รันได้หรือไม่ได้ "as target" ค่าเริ่มต้นคือทุกโปรแกรม แต่ระบุโปรแกรมเฉพาะได้
- args คือ arguments สำหรับคำสั่งที่ระบุ
ตัวอย่าง เขียนต่อไปนี้จะให้ user ใน group wheel รันคำสั่งเป็น root ได้ Root shell จะคงอยู่จนปิดหน้าต่าง
permit persist :wheel as root
สร้าง rule สำหรับ user เฉพาะและคำสั่งเฉพาะได้ เช่น rule นี้ให้ user "bob" รันโปรแกรม "apt" เป็น root โดยไม่ถามรหัสผ่าน
permit nopass bob as root cmd apt
ในกรณีของผม ต้องการ group "wheel" รันเป็น root ไม่ต้องรหัสผ่าน แต่ไม่ต้องการ user aga ที่อยู่ใน wheel รันคำสั่งเป็น root ได้ เขียนใน "/etc/doas.conf" ดังนี้:
permit nopass :wheel as root deny aga as root
หลังตั้งค่า
รันคำสั่งเพื่อให้แน่ใจว่า doas ทำงานตามที่ตั้งใจ:
- ตั้ง owner ของ doas.conf เป็น root:
sudo chown -c root:root /etc/doas.conf
- ตั้ง file permissions ของ config file เป็น 0644 ให้ไฟล์เข้าถึงได้เฉพาะ root:
sudo chmod -c 0644 /etc/doas.conf
- เช็ค doas เองหา syntax error ใน config:
sudo doas -C /etc/doas.conf && echo "OK" || echo "ERROR"
ยินดีด้วย! ติดตั้งและตั้งค่า doas สำเร็จ ใช้ doas แทน sudo หรือปรับ doas.conf ตามใจชอบ สำหรับข้อมูล system administration ใน Linux อ่านบทความนี้ต่อ
คำถามที่พบบ่อย
1. Config ไม่ทำงาน เพิ่ม rule สำหรับ user เฉพาะและ rule ทั่วไป แต่ rule สำหรับ user ไม่ทำงาน
doas config file ทำงานจาก rule ทั่วไปไป rule เฉพาะ สำหรับ config ให้ทำงาน ต้องระบุ rule ที่ apply ทุก user ก่อน แล้วค่อยระบุ rule เป้าหมาย user เดี่ยวด้านล่าง
2. เก็บ sudo และ doas ร่วมในระบบเดียวกันได้ไหม?
ได้! Doas และ sudo โปรแกรมต่างกัน ไม่ขัดแย้งกัน ทิ้ง sudo ไว้ในระบบและใช้ doas ได้
3. ได้ root shell ด้วย doas ได้ไหม?
ได้ ถ้าตั้งค่า config file ถูกต้อง เริ่ม root shell ด้วย doas -s