รู้จักกับ sudo

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

sudo เป็นเครื่องมือที่อนุญาตให้ผู้ใช้บางคน หรือบางกลุ่ม สามารถมีสิทธิ์ในการเข้าถึงทรัพยากรบางสิ่งบางอย่าง ได้เหมือนผู้ใช้ root หรือในบางทีสามารถกำหนดให้มีสิทธิ์เท่าเทียมกับ root ก็ได้ ซึ่งขึ้นอยู่กับการปรับแต่งค่าต่างๆ ในไฟล์ /etc/sudoers

 

การปรับตั้งค่าต่างๆ ของ sudo
ในการปรับตั้งค่าต่างๆ ของ sudo นั้น จะทำการแก้ไขในไฟล์ /etc/sudoers โดยมีรูปแบบของการปรับแต่งค่าต่างๆ ดังนี้

ชื่อผู้ใช้/กลุ่ม ชื่อเครื่องเซิร์ฟเวอร์ = ( รันคำสั่งด้วยผู้ใช้ใด ) คำสั่ง  

ตัวอย่างการใช้งาน

แบบที่ 1. กำหนดแบบระบุผู้ใช้งาน
จากก่อนหน้านี้ ( การจัดการกับบัญชีผู้ใช้ ) เราได้ทำการเพิ่มผู้ใช้งานที่ชื่อว่า chujai กับ somsak อยู่ในกลุ่มของ admin ซึ่งสามารถกำหนดให้ chujai กับ somsak ทำหน้าที่ได้เหมือน root ทุกประการ โดยสามารถใช้คำสั่งใดก็ได้ และใช้กับโฮสต์ใดก็ได้ ดังนี้

chujai , somsak ALL=(ALL) ALL

แบบที่ 2 ระบุแบบกลุ่ม
ในการปรับแต่ง สามารถกำหนดให้กลุ่ม admin สามารถทำหน้าที่เหมือนผู้ใช้ root ได้ทุกประการ โดยไม่จำเป็นต้องระบุเป็นชื่อผู้ใช้ก็ได้ ดังนี้

%admin ALL=(ALL) ALL

แบบที่ 3 กำหนดแบบระบุคำสั่งหรือการเข้าถึงไฟล์/ไดเรคเทอรี
ในบางครั้งผู้ดูแลระบบต้องการให้ผู้ใช้งานบางคน สามารถใช้งานบางคำสั่งที่เป็นของ root เท่านั้น หรือตรวจสอบไฟล์บางไฟล์ ก็สามารถกำหนดได้เช่นกัน เช่นต้องการให้ผู้ใช้ sawasdee สามารถรีสตาร์ทเครื่องและสามารถอ่านข้อมูลทางด้านความปลอดภัยของระบบ ก็สามารถทำได้ดังนี้

sawasdee ALL=(ALL) /usr/bin/reboot , /bin/cat /var/log/secure

หลังจากที่ทำการปรับแต่งเสร็จเรียบร้อยแล้ว ลองตรวจสอบการเข้าถึงข้อมูล หรือคำสั่งต่างๆ ตัวอย่างเช่น ตรวจสอบด้วยผู้ใช้ sawasdee ว่าสามารถอ่านข้อมูลในไฟล์ /var/log/secure ได้หรือไม่ ดังนี้

ขั้นตอนที่ 1
ล็อกอินด้วยผู้ใช้ sawasdee แล้วลองตรวจสอบว่าสามารถอ่านไฟล์ /var/log/secure แบบไม่ใช้คำสั่ง sudo ได้หรือไม่ ดังนี้

[sawasdee@netserv ~]$ cat /var/log/secure  cat: /var/log/secure: Permission denied

จะเห็นว่า ไม่สามารถอ่านข้อมูลได้ ต้องมีสิทธ์ของผู้ดูแลระบบ หรือ ต้องมีสิทธิ์ในการอ่านไฟล์นี้ เท่านั้น

ขั้นตอนที่ 2
ทำการทดสอบแบบใช้คำสั่ง sudo ซึ่งจะมีรหัสผ่านขึ้นมา ให้เราใส่รหัสผ่านของผู้ใช้คนที่กำลังรันคำสั่งอยู่ เช่น ขณะนี้เราทำการล็อกอินด้วยผู้ใช้ sawasdee ดังนั้นในการรันคำสั่ง sudo แล้วมีรหัสผ่านขึ้นมา ให้เราใส่รหัสผ่านของ sawasdee ดังนี้

[sawasdee@netserv ~]$ sudo cat /var/log/secure
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password: ใส่รหัสผ่านของผู้ใช้ ( ไม่ใช่รหัสผ่านของ root )
...
May 15 00:42:42 netserv groupadd[3265]: new group: name=webmaster, GID=501
May 15 00:42:46 netserv groupadd[3269]: new group: name=admin, GID=502
May 15 00:42:49 netserv groupadd[3273]: new group: name=developer, GID=503
...