วันพฤหัสบดีที่ 10 มิถุนายน พ.ศ. 2553

sudo

การใช้คำสั่ง sudo

คำ สั่ง sudo เป็นอีกแนวทางหนึ่งที่ทำให้ผู้ใช้งานสามารถ Access เข้าสู่ระบบในลักษณะที่มีสิทธิ์จัดการกับระบบได้ เมื่อผู้ใช้งานใดก็ตามที่มีสิทธิ์ในการจัดการระบบดำเนินการใช้คำสั่ง sudo แล้ว จะได้รับการร้องขอและตรวจสอบรหัสผ่าน และเมื่อผ่านการตรวจสอบสิทธิ์แล้วก็สามารถจัดการกับระบบได้ราวกับว่าตนเป็น Root รูปแบบของการใช้คำสั่ง sudo มีดังนี้

Sudo <คำสั่ง>

ข้อควรระวัง

ผู้ ที่ใช้คำสั่ง sudo จะต้อง Logout ออกจากระบบก่อนที่จะเดินออกไปจากเครื่องที่กำลังใช้งาน เนื่องจาก sudo จะไม่ถามหารหัสผ่านหากมีการใช้คำสั่งก่อนห้วงหมดเวลา 5 นาที แต่ท่านก็สามารถตั้งค่าเปลี่ยนแปลงการทำงานนี้ได้ที่ /etc/sudoers

คำ สั่ง sudo เป็นคำสั่งที่มีความยืดหยุ่นในการใช้งานสูง ท่านสามารถกรอกชื่อผู้ใช้งานที่มีสิทธิ์ใช้งานคำสั่ง sudo ใน /etc/sudoers ซึ่งเป็น Configuration Files หลังจากที่เรียกใช้ sudo แล้ว ผู้ใช้งานสามารถเข้าสู่ Shell prompt ของตนเอง แต่ไม่ใช้ Root Shell ลักษณะนี้หมายความว่าท่านสามารถลบ Root Shell ออกไปได้ และใช้ sudo แทน

คำ สั่ง sudo ยังสามารถทำบันทึกการ login เข้ามาของผู้ใช้งานได้ โดยผู้ที่สามารถ login เข้ามาได้สำเร็จจะถูกเก็บบันทึกไว้ในไฟล์ /var/log/messages ส่วนคำสั่งที่เรียกใช้ รวมทั้งรายชื่อผู้ใช้งานที่ใช้คำสั่งนั้นจะถูกเก็บไว้ใน /var/log/secure

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

หาก ต้องการให้ผู้ใช้งานคนใดคนหนึ่งสามารถใช้สิทธิ์ในการบริหารจัดการได้เต็มที่ ก็สามารถแก้ไขไฟล์ sudo configuration ด้วยการเพิ่มข้อความต่อไปนี้ลงไปในไฟล์หลังจากใช้คำสั่ง visudo ดังนี้

Vichai ALL=(ALL) ALL

มี ความหมายว่าผู้ใช้งานที่ชื่อ vichai สามารถใช้ sudo จากคอมพิวเตอร์เครื่องใดก็ได้ รวมทั้งสามารถเรียกคำสั่งใด ๆ มาใช้งานก็ได้เช่นกัน

วิธีการติดตั้ง sudo

ท่าน สามารถดาวน์โหลด sudo ได้ทั้งในรูปแบบของ RPM และซอร์สโค้ด (Source Code) เพื่อความสะดวกให้เลือกใช้ RPM ดีกว่า เนื่องจากมีการปรับแต่งดัดแปลงน้อยมากในขณะหรือหลังการติดตั้ง ต่อไปนี้เป็นตัวอย่างคำสั่งการติดตั้ง

[ root ]# rpm -q sudo
sudo-1.5.9p4-1

หาก ปรากฏภาพหน้าจอดังกล่าว (บรรทัดที่ 2) ก็แสดงว่าท่านได้ติดตั้ง sudo ไว้ก่อนหน้านี้แล้ว แต่เป็นเวอร์ชันเก่า ดังนั้นท่านต้องลบทิ้งและติดตั้งเวอร์ชันใหม่ต่อไปดังนี้

[ root ] # rpm -e sudo
[ root ] # rpm -i ./sudo-1.6.3p5-1rh62.i386.rpm
[ root ] # rpm -q sudo

ซึ่งจะปรากฏข้อความบรรทัดดังนี้

Sudo-1.6.3p5-1

การใช้งาน sudo

รูปแบบการใช้งาน sudo มีดังต่อไปนี้

Sudo [command line options] [username] [command]

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

สมมติว่าท่านต้องการดูสิ่งที่อยู่ภายในของ Shadow Password Directory ใช้คำสั่งดังนี้

sudo cat /etc/shadow

อย่าง ไรก็ดีขอแนะนำให้ท่านใช้คำสั่ง sudo อย่างเคร่งครัด โดยการจัดให้มีการบันทึกการเข้ามาใช้งานระบบโดยใช้อำนาจของ root จากการใช้ sudo ของผู้ใช้งานที่เราไว้วางใจ

รู้จักกับ sudo.log

โดย ปริยาย sudo จะมีการทำบันทึกกิจกรรมการทำงานทั้งหมดที่เกิดขึ้นไว้ในไฟล์ /var/log/sudo.log โดยมีรูปแบบของข้อมูลใน log files ดังนี้

Date:user:Host=hostname:TTY=terminal:PWD=dir:USER=user:Command=cmd

ในแต่ละฟิลด์ที่กล่าวมานี้มีความหมายต่อไปนี้

  • date : บันทึกเวลาที่ใช้งาน

  • user : ชื่อของผู้ใช้งานที่รันโปรแกรม sudo

  • hostname : เป็นแอดเดรส (Address) ของคอมพิวเตอร์ที่เข้ามาใช้งาน sudo

  • terminal : เทอร์มินัลที่ sudo ถูกใช้เพื่อควบคุมหรือจัดการ

  • dir : ไดเรกทอรีปัจจุบันที่ใช้คำสั่งของ sudo

  • user : ชื่อของผู้ใช้งานที่รันคำสั่ง

  • command : คำสั่งที่มีการเรียกใช้งานผ่าน sudo

ต่อไปนี้เป็นตัวอย่างหน้าจอ sudo.log

Sep 23 14:41:37 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/more /etc/shadow
Sep 23 14:43:42 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/usr/sbin/pwconv
Sep 23 14:43:51 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/more /etc/shadow
Sep 23 14:55:30 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/cat /etc/securetty
Sep 23 15:12:27 : ramon : HOST=redhat : TTY=pts/1 ;
(PWD=/home/ramon USER=root ; COMMAND=/bin/linuxconf
Sep 23 15:23:37 : ramon : HOST=redhat : TTY=pts/0 ;
(PWD=/home/ramon USER=root ; COMMAND=/usr/sbin/pwunconv

การบริหารจัดการความปลอดภัย

เมื่อ ใดที่ท่านต้องการบริหารจัดการกับเครื่องหรือระบบ ท่านมักจะใช้ root usr หรือการใช้สิทธิ์พิเศษที่กำหนดขึ้นโดยโปรแกรมประเภท setuid เช่น sudo หรือ su เป็นต้น

ใน แง่ของการบริหารจัดการระบบภายในองค์กร ท่านที่เป็นผู้บริหารระบบจะต้องทราบดีว่ามีใครบ้างในองค์กรที่สามารถมี สิทธิ์พิเศษในการบริหารจัดการระบบภายในเครื่องที่เขาใช้งานอยู่ได้ โดยการใช้ PAM Modules ที่เรียกว่า pam_console.so กิจกรรมบางอย่างที่เคยถูกสงวนไว้สำหรับ root user เท่านั้น เช่น การ reboot และติดตั้งอุปกรณ์ฮาร์ดแวร์จะอนุญาตให้บุคคลแรกที่ Login เข้ามาในระบบ อย่างไรก็ตามงานอื่น ๆ ที่สำคัญ เช่น การจัดตั้ง Configuration สำหรับเครือข่าย หรือการจัด Configure Mouse ตัวใหม่ รวมทั้งการติดตั้งอุปกรณ์เครือข่ายจะถูกสงวนไว้ให้สำหรับการ Access จากผู้มีสิทธิ์บริหารจัดการเท่านั้น

การอนุญาตให้สามารถใช้ Root Access

สำหรับ องค์กรใดที่มีผู้ใช้งานเป็นที่น่าไว้วางใจก็ไม่ควรรีรอที่จะให้สิทธิ์ในการ ใช้ root access การทำเช่นนี้จะช่วยลดงานของผู้บริหารจัดการเครือข่าย เนื่องจากการที่ผู้ใช้งานแต่ละคนสามารถมีสิทธิ์ใน root access จะช่วยให้แต่ละคนสามารถแก้ไขปัญหาของตนเองได้ เช่น การติดตั้งอุปกรณ์เพิ่มเติมบางรายการ หรือจัด Configure Interface ให้กับการ์ด LAN จะได้ไม่ต้องรอคอยใช้บริการจากผู้ดูแลเครือข่าย อย่างไรก็ดีการทำเช่นนี้ก็มีข้อเสียดังนี้ (บางส่วนที่เป็นข้อเสีย)

  • การจัด Configuration ให้กับเครื่องที่ผิดพลาดทำให้ต้องคอยตามแก้ไข และอาจเปิดช่องโหว่ที่เกี่ยวกับความปลอดภัยโดยไม่ตั้งใจอีกด้วย

  • ผู้ ใช้งานอาจใช้เซอร์วิสที่ไม่ปลอดภัยโดยที่ตนเองก็ไม่รู้ตัว เช่น การใช้ Telnet ที่ใช้รหัสผ่านแบบ Plain Text หรืออักษรล้วน ๆ ที่อาจมีผู้ดักจับรหัสผ่านก็ได้

  • ผู้ใช้งานอาจจับส่งเมลในฐานะ root แม้เรื่องนี้จะเกิดขึ้นได้ยาก แต่ไวรัสก็สามารถติดบนเมลบน LINUX ได้

การ Disable Root Access

หาก ผู้บริหารจัดการเครือข่ายรู้สึกไม่สบายใจในเรื่องนี้ ดังนั้นรหัสผ่านของ root ควรเก็บไว้เป็นความลับ รวมทั้งให้สามารถ access เข้าไปในระดับหนึ่งได้ หรือกำหนดให้สามารถเข้าสู่โหมดที่เรียกว่า Single User Mode โดยผ่านการกรอกใส่ชื่อรหัสผ่านที่ Boot Loader ในตารางที่ 2 แสดงแนวทางที่ผู้บริหารจัดการเครือข่ายอาจต้อง Disable Root Access

การ Disable Root Shell

เพื่อ ป้องกันผู่ใช้งานมิให้สามารถ login เข้ามาโดยตรงด้วย root ผู้บริหารจัดการระบบสามารถจัดตั้ง shell ของ root account ให้เป็น /sbin/nologin ในไฟล์ /etc/passwd การกระทำเช่นนี้จะช่วยป้องกันการ access ไปที่ root account ผ่านคำสั่งที่ต้องการ shell เช่น su และ ssh

การ Disable Root Login

เพื่อ เป็นการจำกัดการ access เข้ามาที่ root account ผู้บริหารจัดการเครือข่ายสามารถ Disable Root Login ที่คอนโซล โดยการแก้ไข /etc/securetty ซึ่งภายในไฟล์นี้จะมีการแสดงรายการอุปกรณ์ทั้งหมดที่ root user สามารถ login เข้าไปใช้งานได้ ถ้าไฟล์นี้ไม่มีอะไร root user สามารถ login ผ่านอุปกรณ์สื่อสารหรืออุปกรณ์เครือข่ายเท่านั้น ซึ่งเป็นเรื่องอันตรายเนื่องจากว่าผู้ใช้งานสามารถใช้ Telnet เข้ามาที่เครื่องของเขาด้วย root และส่งรหัสผ่านที่เป็นอักษรเปล่าเข้าไปที่เครือข่าย แต่โดยดีฟอลต์ (Default) แล้ว /etc/securetty ของ LINUX จะยอมให้ root user สามารถ log เข้าไปที่คอนโซลทางกายภาพหรือโดยตรงที่หน้าจอ เพื่อป้องกันมิให้มีการ login เข้ามาที่ root ให้นำเนื้อหาที่อยู่ภายในไฟล์นี้ออกไปด้วยคำสั่งดังนี้

Echo > /etc/securetty

คำเตือน

การลบข้อความทั้งหมดออกจาก /etc/securetty ไม่ได้ป้องกัน root user ทำการ login จากการใช้ชุดโปรแกรม OpenSSH

การ Disable Root SSH Login

เพื่อ ป้องกันการ login ที่ root ด้วยโปรโตคอล SSH ท่านสามารถแก้ไขไฟล์ที่เป็น Daemon ของ SSH ต่อไปนี้ /etc/ssh/sshd_config จากนั้นให้เปลี่ยนข้อความในบรรทัดเป็น

# PermitRootLogin yes < ----------- ใส่เครื่องหมาย # ไว้ข้างหน้าเพื่อไม่ใช้ชั่วคราว

และแทนที่ด้วยข้อความดังนี้

permitRootLogin no

การสร้างข้อจำกัดการ Access ให้กับ root

แทน ที่จะตอบปฏิเสธการ login เข้ามาใช้งานของผู้ที่ทราบรหัสผ่านของ root ท่านอาจยังอนุญาตให้สามารถทำเช่นนั้นได้อยู่ แต่จำกัดการ access ด้วยการใช้ชุดโปรแกรมที่เกี่ยวข้องกับ setuid เช่น su และ sudo

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

เนื่อง จากคำสั่งนี้มีประสิทธิภาพมาก ดังนั้นผู้บริหารจัดการเครือข่ายภายในองค์กรอาจต้องการจำกัดผู้ที่จะเข้ามา access คำสั่งได้ วิธีการทำที่ง่ายที่สุดได้แก่การเพิ่มผู้ใช้งานเข้าไปในกลุ่มที่สามารถควบ คุมหรือจัดการได้ เรียกว่า wheel โดยวิธีการพิมพ์คำสั่งดังต่อไปนี้

usermod -G wheel

ขั้นตอนต่อไปได้แก่การเปิดไฟล์ PAM Configuration สำหรับ su/etc/pam.d/su ด้วย text editor จากนั้นให้นำเครื่องหมาย # (commend) ออกจากบรรทัดดังต่อไปนี้

Auth required /lib/security/pam_wheel.so use_uid

การ กระทำเช่นนี้จะช่วยให้เกิดการอนุญาตสมาชิกของ Administrative group (กลุ่มคณะบุคคลที่สามารถจัดการระบบได้) ที่อยู่ใน wheel สามารถใช้ su ได้

หมายเหตุ

root user ปกติเป็นส่วนหนึ่งของ wheel group โดยดีฟอลต์

References: http://micro.se-ed.com/Content/mc221/MC221_114.asp