CentOS 7 รันคำสั่ง root ด้วย sudo

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

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

ที่จริงคุณสมบัติ sudo นี้มีใน CentOS มานานแล้ว แต่เพิ่งจะมีออปชันให้เลือกตอนติดตั้ง CentOS 7 ในขั้นตอนสร้างผู้ใช้งาน (CREATE USER)

ตัวอย่างหน้าจอ CREATE USER ตอนติดตั้ง CentOS 7

s01-centos-7-installation-create-user

ในหน้าจอ CREATE USER หากต้องการให้ User name ที่สร้างนี้ สามารถใช้ sudo เพื่อมีสิทธิ์เทียบเท่า root ได้ ก็ให้คลิกเลือก

[x] Make this user administrator

ถ้าลองคลิกปุ่ม Advanced ด้านล่าง จะมีหน้าจอแสดงรายละเอียดว่าผู้ใช้หรือ user ที่สร้างนี้ จะถูกกำหนดให้เป็นสมาชิกกลุ่ม wheel ซึ่งเป็นชื่อกลุ่มที่สมาชิกสามารถใช้ sudo เพื่อรันคำสั่งเทียบเท่า root ได้

s02-centos-7-installation-create-user-advanced-user-configuration

หลังติดตั้ง CentOS 7 เสร็จเรียบร้อย ล็อกอินด้วย user ที่สร้างไว้ ในตัวอย่างนี้คือ alice

ทดลองรันคำสั่ง id เพื่อดูข้อมูลผู้ใช้งาน

[alice@cent7 ~]$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

วิธีใช้ sudo

วิธีการใช้ sudo คือพิมพ์ sudo แล้วตามด้วยคำสั่งที่จะรัน

เช่นรัน sudo ตามด้วยคำสั่ง id

[alice@cent7 ~]$ sudo id
[sudo] password for alice:
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

การใช้ sudo ครั้งแรก หรือไม่ได้ใช้มาเกินระยะเวลาหนึ่ง (ดีฟอลต์ 5 นาที) ต้องใส่รหัสผ่าน (password) แต่รหัสผ่านในที่นี้คือรหัสผ่านของผู้ใช้งานเอง ไม่ใช่ของ root

ถ้าใส่รหัสผ่านถูกต้อง sudo จะรันคำสั่งที่ระบุด้วยสิทธิ์ root

ผลลัพธ์จากคำสั่ง id สังเกตค่า uid จะเป็น 0 หรือสิทธิ์เทียบเท่า root นั่นเอง

หากไม่ได้พิมพ์ sudo นำหน้าคำสั่ง ก็จะเป็นการรันคำสั่งด้วยสิทธิ์ผู้ใช้งานตามปกติ

ตัวอย่างการรันคำสั่ง ที่ไม่ได้พิมพ์ sudo นำหน้า

[alice@cent7 ~]$ cat /etc/sudoers
cat: /etc/sudoers: Permission denied

ตัวอย่างการรันคำสั่ง ที่มี sudo นำหน้า

[alice@cent7 ~]$ sudo cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
...

หากพิมพ์คำสั่ง sudo ซ้ำอีกครั้งภายในเวลาไม่เกิน 5 นาที ไม่ต้องระบุรหัสผ่านอีกครั้ง ระบบจะจำไว้

หรือถ้ายังคุ้นเคยกับการ su เพื่อเป็น root ก็สามารถทำได้โดยใช้ sudo su – (ไม่แนะนำ)

[alice@cent7 ~]$ sudo su -
Last login: Fri Jun 19 09:59:43 ICT 2015 from 192.168.5.1 on pts/0
[root@cent7 ~]#

การเพิ่มสิทธิ์ sudo ให้กับผู้ใช้อื่นๆ

ผู้ใช้อื่นๆ ที่ไม่มีสิทธิ์ ถ้ารัน sudo จะไม่สามารถรันได้

[bob@cent7 ~]$ sudo id
bob is not in the sudoers file. This incident will be reported.

หากต้องการให้ผู้ใช้ (user) อื่นๆ ให้สามารถใช้ sudo เพื่อมีสิทธิ์ root ได้ด้วย ก็สามารถทำได้โดยกำหนดให้ผู้ใช้ที่ต้องการ ให้เป็นสมาชิกของกลุ่ม wheel

โดยอาจแก้ไขไฟล์ /etc/group โดยตรง หรือใช้คำสั่ง gpasswd ระบุออปชัน -a ตามด้วยชื่อผู้ใช้ที่ต้องการ ตามด้วยชื่อกลุ่ม wheel

แน่นอนการแก้ไขไฟล์ /etc/group หรือรันคำสั่ง gpasswd ก็ต้องใช้สิทธิ์ root ในการดำเนินการ

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

[alice@cent7 ~]$ id bob
uid=1001(bob) gid=100(users) groups=100(users)
[alice@cent7 ~]$ sudo gpasswd -a bob wheel
[sudo] password for alice:
Adding user bob to group wheel
[alice@cent7 ~]$ id bob
uid=1001(bob) gid=100(users) groups=100(users),10(wheel)

ทดลองล็อกอินด้วยผู้ใช้ แล้วรัน sudo

[bob@cent7 ~]$ sudo id
[sudo] password for bob:
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

สรุปเพิ่มเติมเกี่ยวกับการใช้ sudo

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

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

ตัวอย่างประวัติการใช้ sudo ซึ่งถูกเก็บไว้ในไฟล์ /var/log/secure

[bob@cent7 ~]$ sudo tail /var/log/secure
Jun 21 11:39:33 cent7 sudo: alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/bin/gpasswd -a bob wheel
Jun 21 11:43:29 cent7 sudo: bob : TTY=pts/0 ; PWD=/home/bob ; USER=root ; COMMAND=/bin/id
Jun 21 11:47:10 cent7 sudo: bob : TTY=pts/0 ; PWD=/home/bob ; USER=root ; COMMAND=/bin/tail /var/log/secure

ที่จริงแล้ว sudo ยังสามารถคอนฟิกกำหนดรายละเอียดได้มาก เช่นกำหนดรายชื่อเฉพาะบางคำสั่งที่สามารถใช้ ให้กับผู้ใช้รายคนได้ หากสนใจแนะนำให้อ่าน man sudoers หรือใช้คำสั่ง visudo แล้วอ่านคำแนะนำในไฟล์ ซึ่งจะมีคำอธิบายพร้อมตัวอย่าง

$ man sudoers
$ sudo visudo

หมายเหตุ ในเว็บไซต์ SpaLinux.com จะใช้คำว่าล็อกอินด้วย root และแสดงพรอมต์ # เพื่อแยกแยะคำสั่งที่จำเป็นต้องใช้ root ในการรัน อย่างชัดเจน

 

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.