ความแตกต่างที่เหมือนกันระหว่าง sudo และ su

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

Sudo vs su

การใช้งาน sudo และ su นั้นทำให้ได้สิทธิ์การทำงานของ root user ทั้งสิ้น ซึ่ง root user นั้นเปรียบเสมือนกับ Administrator user ของ Windows โดย root user จะมีสิทธิ๋สูงสุดของระบบ สามารถทำหลายๆสิ่งที่เหนือจาก user ทั่วไปเช่น การลงโปรแกรม, การแก้ไขไฟล์ configure ของ system เป็นต้น ดังนั้นสิทธิ์ของ root จึงเป็นสิ่งที่สำคัญมากในการเปลี่ยนแปลง แก้ไขไฟล์หรือระบบสำคัญต่างๆ

การใช้งาน su จริงๆแล้วเป็นคำสั่งที่เราจะสลับไป login เป็น user อื่นๆ เช่น su apache2 หมายถึงการ login ด้วย password ของ apache2 user ไปเป็น apache2 user เป็นต้น แต่เมื่อใช้คำสั่งเป็น “su” หรือ “su ” หรือ “su root”  จะเป็นการสลับไป login เป็น root user  ซึ่งจะใช้ password ของ root user  แทนนั่นเอง เมื่อเรา su เรียบร้อยแล้ว หากเราต้องการสลับกลับไปใช้งาน user ก่อนหน้า ให้ใช้คำสั่งเป็น “exit” เพื่อออกจาก user ที่เราใช้งานอยู่ในปัจจุบัน ไปยัง user ที่ใช้คำสั่ง su เข้ามา

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

screen-shot-2559-11-14-at-14-42-44

Sudo จะแตกต่างจาก su ตรงที่ โดยปกติ sudo จะใช้กับแค่ command เดียว เช่น หากใช้คำสั่งเป็น sudo ls หมายถึงการใช้สิทธิ์ของ root ในการใช้คำสั่ง ls เป็นต้น โดยการใช้งานคำสั่งดังกล่าว จะใช้ password ของ user ที่ใช้ sudo นั้นๆ ซึ่งการจะใช้งาน sudo ได้นั้น user ดังกล่าวจำเป็นต้องมีรายชื่ออยู่ใน configure file /etc/sudoers ด้วย

screen-shot-2559-11-14-at-14-45-18

จากภาพจะเห็นว่า root จะสามารถใช้คำสั่งทุกอย่างได้แบบไม่มีกำหนด ทีนี้ถ้าเราต้องการจะเพิ่ม user webadmin ซึ่งเป็น admin ที่ใช้ในการควบคุม web server เท่านั้น เราสามารถที่จะกำหนดกำหนดที่ใช้เป็น

webadmin    ALL=(ALL)NOPASSWD:/etc/init.d/apache2

  • – webadmin คือการกำหนด user ชื่อ webadmin ที่จะให้สามารถใช้คำสั่งต่างๆได
  • – ALL คือการที่รันได้จากทุกที่ ไม่ว่าจะรันจาก host,ip ใด
  • – (ALL) คือการสามารถใช้คำสั่งเป็น user ใดๆก็ได้
  • – NOPASSWD คือไม่จำเป็นต้องใส่ password เมื่อใช้คำสั่ง sudo
  • – /etc/init.d/apache2 คือกำหนดให้คำสั่งที่ใช้เป็นคนอื่นได้มีเพียง /etc/init.d/apache2 และหากต้องการให้ user สามารถใช้คำสั่งอื่นได้ให้ใส่ “:” คั่นคำสั่งไว้ เช่น /etc/init.d/apache2:/usr/local/sbin เป็นต้น

*** สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ http://ubuntuforums.org/showthread.php?t=1132821

จะเห็นว่าเราสามารกำหนดสิทธิ์ของ user ได้มากมายว่า user ใดสามารถใช้ sudo ได้บ้าง แล้ว sudo ที่ว่าใช้ command  อะไรได้บ้าง ไม่จำเป็นว่าเมื่อ user นั้นใช้ sudo แล้วจะสามารถทำได้ทุกอย่างเทียบเท่ากับ root ลองคิดสภาพว่าหาก Hacker สามารถเจาะเข้าสู่ระบบแล้วได้สิทธิ์ของ webadmin เท่านั้น Hacker ก็จะไม่สามารถทำอะไรได้มากนัก แต่หากเราสร้าง policy ภายใน /etc/sudoers ได้ไม่ดีพอ ก็จะทำให้ Hacker สามารถกระทำการใดๆได้เทียบเท่ากับ root เลยทีเดียว

sudo กับการใช้งานรูปแบบต่างๆ

  • sudo su

เราสามารถใช้คำสั่ง “sudo su” ได้ ซึ่งการกระทำดังกล่าวจะเปรียบเสมือนการรัน su ซึ่งการรันดังกล่าวไม่ใช่เป็นการ login ไปเป็น user อื่น แต่หมายถึงการพยายามใช้คำสั่ง su โดยใช้สิทธิ์ root นั่นเอง ซึ่งถ้าถามว่าทำไม เพราะบางครั้งจะมีการ limit การใช้งานคำสั่ง su ไว้ ทำให้เราจำเป็นต้องใช้สิทธิ์ของ root ในการใช้คำสั่ง su แทนนั่นเอง

ซึ่งหาก user ดังกล่าวสามารถใช้งานคำสั่ง sudo ได้ตามที่กำหนดไว้ใน file /etc/sudoers ก็จะสามารถใช้คำสั่ง su ได้ หลังจาก su สำเร็จ ก็จะรันคำสั่งตามที่กำหนดไว้ใน “.profile,” “.bashrc” และ “/etc/profile” อีกทีหนึ่ง

  • sudo -i

sudo -i จะผลเหมือนกับการรัน sudo su ก็คือการที่ user เข้า login เป็น root โดยใช้สิทธิ์ root ผ่านคำสั่ง sudo อีกที

  • sudo -s

เป็นการใช้งานสิทธิ์ของ root ใน shell ใดๆ แต่ยังคงอ้างอิงกับ environment เดิมของ user ซึ่งคำสั่งนี้จะเปรียบเสมือนกับเรารันคำสั่ง sudo /bin/bash นั่นเอง

บทสรุป

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

Reference::

  • http://utcc.utoronto.ca/~cks/space/blog/unix/SudoSecurityModel
  • http://www.howtogeek.com/111479/htg-explains-whats-the-difference-between-sudo-su/
  • http://ubuntuforums.org/showthread.php?t=1132821dv
  • https://www.maketecheasier.com/differences-between-su-sudo-su-sudo-s-sudo-i/