Command Line พื้นฐานที่ Developer ควรรู้ EP 2

จากตอนก่อน เราคุยกันเรื่องพื้นฐานของ Command Line และ คำสั่งเบื้องต้นในการใช้งานกันไปแล้ว ถ้ายังไม่ได้อ่านกลับไปอ่านได้ ที่นี่ ในตอนนี้เราจะมาลองอะไรที่มัน Advance มากกว่านั้นหน่อย คือเรื่องของ User และ Permission

การจัดการ User

จริง ๆ แล้วการจัดการ User บน OS ไหน ๆ ไม่ว่าจะเป็น macOS หรือ Linux ก็จะมีการจัดการที่คล้าย ๆ กันอยู่พอสมควรเลย แต่ในวันนี้เราจะเน้นไปที่ฝั่งของ Linux ละกัน เพราะบน macOS เราก็ทำผ่าน GUI ไปเถอะนะ

sudo adduser arnondora

เริ่มจากคำสั่งแรกก่อนเลย คือการสร้าง User ขึ้นมา เราจะใช้คำสั่งที่ชื่อว่า adduser โดยเวลาเรารันคำสั่งนี้ เราจะต้องเป็น Super User เท่านั้น ไม่งั้น เราจะไม่สามารถสร้าง User ได้เลย ทำให้เวลาเรารันต้องเป็นแบบด้านบน ก็จะเป็นคำสั่งสำหรับการสร้าง User ที่ชื่อ arnondora ขึ้นมา หลังจากเรากดไปแล้ว มันจะถามพวกชื่อ กับรายละเอียดต่าง ๆ ของ User ให้เรากรอกเข้าไป และสุดท้าย มันก็จะให้เรากรอก Password ของ User ที่เราสร้างขึ้นมา

# Locking Account
sudo passwd -l arnondora

# Unlocking Account
sudo passwd -u arnondora

นอกจากนั้น เรายังสามารถ ยกเลิก การใช้งาน User ชั่วคราวให้กับ User คนนั้น ๆ ได้ด้วยผ่านคำสั่งด้านบน เผื่อว่า เราอาจจะต้องการไม่ให้ User ที่เราต้องการ ไม่สามารถเข้าใช้งานระบบได้ชั่วคราว กลับกัน ถ้าเราต้องการปลดล๊อคกลับมา เราก็สามารถใช้ Argument -u หรือ Unlock แทนที่จะเป็น -l ที่แปลว่า Lock นั่นเอง

# Changing Password
sudo passwd arnondora

อีกหนึ่งสิ่งที่ passwd ทำคือการเปลี่ยน Password เอาจริง ๆ คืองานหลักของมันเลยก็ว่าได้ ใช้งานโดยที่เราไม่ต้องใส่ Option อะไรลงไปเลย แล้วเดี๋ยวมันจะถาม Password ใหม่ แล้วก็ใช้ได้เลย อันนี้ Admin หรือผู้ดูแลระบบสามารถทำได้เลย เพราะเวลาเปลี่ยน มันจะไม่ได้ถาม Password เก่าเลย

sudo userdel -r arnondora

สุดท้าย เราก็สามารถลบ User ออกจากระบบไปได้เลย ผ่านคำสั่ง userdel หรือก็คือ User Delete ได้ตรง ๆ เลย

เราลืมบอกไปว่าในพวก Linux และ Unix จริง ๆ แล้วมันจะมี User ที่เรียกได้ว่า เป็น พ่อทุกสถาบัน อยู่นั่นคือ root เป็น User ที่ทำได้ทุกอย่างในเครื่องจริง ๆ แบบทุกอย่าง มีสิทธิ์ในทุก ๆ เรื่อง ดังนั้น เป็น User ที่เราไม่ควรเอามาใช้เป็นประจำ เพราะถ้ามันหลุดออกไปคือ คนที่รู้สามารถทำอะไรกับเครื่องเราก็ได้ทั้งหมดเลย 100% เรียกว่าเป็น ขั้นสุด ของการเข้าถึงเลย

User Detail

หลังจากเราสามารถจัดการ User ในเครื่องของเราได้เลย เรายังสามารถที่จะ ขอดู User ในเครื่องได้ด้วย ว่าในเครื่องของเรามี User อะไรบ้าง

> finger
Login    Name                 TTY  Idle  Login  Time   Office  Phone
arnonpuitrakul Arnon Puitrakul     *con   11d  Feb 26 09:37
arnonpuitrakul Arnon Puitrakul      s00        Wed    15:04

เราสามารถใช้คำสั่งชื่อว่า finger ตรง ๆ ได้เลย แล้วมันจะแสดงออกมาเลยว่า ในเครื่องของเรา มันมี User อะไรบ้าง แล้ว เข้าใช้งานล่าสุดเมื่อไหร่

> finger arnonpuitrakul
Login: arnonpuitrakul 			Name: Arnon Puitrakul
Directory: /Users/arnonpuitrakul    	Shell: /bin/zsh
On since Sat Feb 26 09:37 (+07) on console, idle 11 days 5:27 (messages off)
On since Wed Mar  9 15:04 (+07) on ttys000
On since Mon Mar  7 21:02 (+07) on ttys001 (messages off)
No Mail.
No Plan.

หรือ ถ้าเราต้องการรายละเอียดของ User นั้น ๆ เลย เราก็สามารถใส่ชื่อ Username ตามหลังไป มันก็จะบอกมาเลยว่า ชื่อ Login ชื่ออะไร ใครเป็นเจ้าของ User แบบละเอียดมากขึ้นไปเลย

Linux User Group

ตัว Linux เอง มันก็จะมีระบบสำหรับการจัดการเมื่อเรามี User เยอะ ๆ ได้ด้วย โดยการแบ่งกลุ่มมันซะเลย เช่น เราอาจจะบอกว่า กลุ่มนี้ ทำอันนี้ได้ อันนี้ไม่ได้อะไรแบบนั้น แทนที่เราจะต้องมานั่งกำหนดในทุก ๆ User เราก็แค่เอา User ใส่เข้าไปใน Group แล้วให้สิทธิ์กับ Group ไปเลย มันก็จะไป Apply เข้ากับ User ใน Group นั้น ๆ เองเลยอย่างง่าย ๆ

groupadd sysadmin

คำสั่งแรกเป็นการสร้าง Group ใหม่เลย ซึ่งชื่อคำสั่งมันก็ตรงตัวเลยคือ groupadd ที่มาจาก Group Add นั่นเอง แล้วตามด้วยชื่อของ Group ที่เราต้องการได้เลยตรง ๆ

groupmod -a -G sudo arnondora

คำสั่งถัดไปคือ การเพิ่ม User เข้าไปใน Group ต่าง ๆ ตัวอย่างด้านบน เป็นการเพิ่ม User ที่ชื่อว่า arnondora เข้าไปใน User Group ที่ชื่อว่า sudo อันนี้เป็นสูตรเลย คือ เป็นคำสั่งสำหรับให้สิทธิ์ User นั้น ๆ สามารถใช้งานคำสั่งที่ต้องการ Super User ได้นั่นเอง ถ้าเราใช้ User ปกติมา เราจะรันอะไรที่ต้องการ Super User ไม่ได้เลย เราจะต้องให้ Admin เพิ่ม User ของเราเข้าไปใน Group sudo ก่อนนั่นเอง

sudo deluser arnondora sudo

กลับกัน ถ้าเราอยากจะเอา User ออกจาก Group นั้น ๆ เราก็สามารถใช้คำสั่ง deluser ได้เลย แต่ ๆ ระวังดี ๆ นะ จำได้มั้ยว่า อีกหนึ่งหน้าที่ของคำสั่งนี้คืออะไร มันคือการลบ User ออกนั่นเอง ดังนั้น ถ้าเราจะเอา User ออกจาก Group อย่าลืมใส่ชื่อ Group ต่อท้าย ไม่งั้นมันลบออกหมดแน่นอน (แต่จริง ๆ ถ้าไม่ใส่ -r มันก็ไม่ลบหรอก แต่ระวังไว้หน่อยก็ดี)

Permission

หลังจากเรามี User และ Group แล้ว เราจะทำอะไรกับมันได้ละ เราจะต้องมากำหนดว่า เราจะให้ Group นี้ทำอะไรได้บ้าง หรือ User นี้ทำอะไรได้บ้าง เราก็จะต้องมากำหนดสิ่งที่เรียกว่า Permission กัน แต่ก่อนอื่นเรามาทำความเข้าใจกับระบบ Permission กันก่อน

ในระบบ Permission เราจะแบ่งคนออกเป็น 3 กลุ่มด้วยกันคือ Owner, Group และ Everyone เพื่อให้เราสามารถแยกการกำหนด Permission ให้กับคนแต่ละส่วน ก็คือ การกำหนดส่วนในการเข้าถึงของเรา, Group และ ใครก็ได้ในเครื่องนั่นเอง

และในแต่ละกลุ่ม เราก็สามารถบอกได้เลยว่า ให้ อ่านได้ เขียนได้ หรือ เรียกมันขึ้นมาทำงานได้ ผ่าน 3 ค่าคือ r, w และ x หรือก็คือ Read, Write และ Execute ตามลำดับนั่นเอง ทำให้เวลาเราเขียน เช่น เราบอกว่า เราอยากจะให้ User เรา ทำอะไรกับไฟล์นี้ก็ได้หมดเลย แต่คนอื่น ๆ ในเครื่อง ไม่ให้ทำอะไรเลยนอกจากอ่าน เราก็สามารถเขียน Permission เป็น rwxr--r-- ดูจำนวนขีดด้วยนะ เราจะเห็น ว่า มันมีอักษรทั้งหมด 9 ตัวรวมขีด ก็คือ Read, Write และ Execute ของ Owner, Group และ Everyone ตามลำดับนั่นเอง

แต่ ๆ การเขียนแบบนี้ แหม่ ยากนะ ต้องมานั่งคิดว่า เขียนขีดอะไรเยอะ ๆ ยากไป เดี๋ยวเขียนไป อ้าวขีดไม่ครบอีกบางทีมึนแบบนั้น ทำให้เขาเลยเอาใหม่ งั้นแทนที่เราจะเขียนเป็นขีด เราแทนมันด้วยตัวเลขฐาน 2 เลยละกัน แบ่งเป็น ส่วนละ 3 Bits เลย เช่น 001 คือ Execute ได้อย่างเดียว หรือ 100 ก็คืออ่านได้อย่างเดียว ถ้าเราแปลงเป็นเลขฐาน 10 ก็จะเป็น 1 และ 4 ตามลำดับ

เช่นเราบอว่าเราต้องการให้ อ่าน และ เขียนได้แต่ Execute ไม่ได้ ก็จะเป็น 110 บนฐาน 2 หรือก็คือ 6 บนเลขฐาน 10 หรืออันที่ใช้กันรัว ๆ คือ 7 บนฐาน 10 หรือก็คือ 111 บนฐาน 2 หมายความว่า ให้ทำอะไรก็ได้เลย

จากนั้น เราก็จะเอาเลขฐาน 10 ทั้ง 3 ตัวมาต่อรวมกัน เช่น 777 ก็คือ ทำให้ทุกคน ๆ จริง ๆ สามารถ อ่าน เขียน และ Execute ไฟล์นั้น ๆ ได้เลย อันนี้อย่าทำเด้อ ไม่ปลอดภัยเลย

> ls -l
-rw-r--r--   1 arnonpuitrakul  staff  208 Feb 22 16:25 loop_practice.py
-rw-r--r--   1 arnonpuitrakul  staff  473 Feb  7 16:51 practice1.py

ทีนี้ ถ้าเราอยากรู้ว่า ใน Folder ที่เราอยู่ตอนนี้ไฟล์ มันมี Permission เป็นอย่างไร และ ใครเป็นเจ้าของ เราก็สามารถใช้คำสั่ง ls เหมือนที่เราคุยกันในตอนที่แล้วได้เลย แต่เราใส่ Argument -l เพิ่มเข้าไป ทำให้มันแสดงรายละเอียดออกมา

ใน Column แรก เราจะเห็น Permission ของไฟล์ใน Folder นี้ก็คือ Owner สามารถ อ่าน และ เขียนได้ แต่ Execute ไม่ได้ และ Group กับ Anyone อ่านได้อย่างเดียว ถามว่า User ไหนเป็น Owner ละ ก็ให้ดู Column ที่ 3 ก็จะเป็นชื่อ User เราเอง และ Group ไหน ก็จะดู Column ที่ 4 ดังนั้น การกำหนดสิทธิ์ที่เห็นคือ ทำให้ User arnonpuitrakul สามารถอ่านและเขียนไฟล์ได้ และ User Group ที่ชื่อ staff กับคนอื่น ๆ สามารถอ่านได้อย่างเดียว

> chmod 744 loop_practice.py
> ls -l
-rwxr--r--   1 arnonpuitrakul  staff  208 Feb 22 16:25 loop_practice.py
-rw-r--r--   1 arnonpuitrakul  staff  473 Feb  7 16:51 practice1.py

คำสั่งในการที่เราจะเปลี่ยน Permission ก็คือ chmod หรือ Change Mode นั่นเอง โดยเราจะใส่ Permission Code ลงไป แล้วตามด้วยชื่อไฟล์ หรือ Folder (ถ้าเป็น Folder เราสามารถใส่ -r เพื่อให้มัน Apply กับไฟล์ทั้งหมดที่อยู่ใน Folder นั้นด้วย)

จากในตัวอย่างเราบอกว่า 744 ก็คือ Owner ทำได้ทุกอย่าง คนอื่น ๆ ทำได้แค่อ่าน เมื่อเรา ls ออกมาดู เราจะเห็นว่า Permission มันก็จะกลายเป็น rwxr--r-- ไปเลย และจริง ๆ แล้วเราสามารถที่จะใส่เป็นแค่ u+x อะไรแบบนั้นก็ได้ ลองไปหาอ่านเพิ่มเอา แต่เป็นอันที่เราไม่ค่อยได้ใช้เท่าไหร่ เราคิดเลขตรง ๆ มันชินแล้ว เลยคิดเร็ว ๆ ได้เลย

chown arnondora:staff test_file.txt

นอกจากนั้น เรายังสามารถเปลี่ยนเจ้าของไฟล์ได้ด้วย ถ้าเราทำด้วย User ที่ Permission สูงกว่าเจ้าของนะ เช่นเอา root มาเปลี่ยนผ่านการเรียก Sudo โดยใช้คำสั่งชื่อว่า chown หรือก็คือ Change Owner นั่นเอง แล้วตามด้วยชื่อ Username ถ้าเราต้องการจะเปลี่ยน Group ด้วย เราก็ใส่ Colon แล้วตามด้วยชื่อ Group สุดท้าย ก็ตามด้วยชื่อ File หรือ Folder ที่ต้องการเปลี่ยนก็เป็นอันเรียบร้อย

chgrp staff test_file.txt

หรือถ้าเราบอกว่า เราต้องการจะเปลี่ยนแค่ Group อย่างเดียว เราก็สามารถใช้คำสั่งชื่อ chgrp หรือ Change Group ตามด้วยชื่อ Group และสุดท้ายตามด้วยชื่อไฟล์ หรือ Folder ก็จะทำให้เราเปลี่ยน Group ของ File ได้แล้ว

สรุป

คำสั่งที่เอามาเล่าในบทความนี้ เราจะเน้นเรื่องของการจัดการ User และ Permission ล้วน ๆ เลย เพราะมันเป็นสิ่งสำคัญมาก ๆ โดยเฉพาะกับพวก System Administrator ในการขึ้นระบบ และดูแลระบบ อย่างปลอดภัย มันทำให้เราสามารถป้องกันบุคคลที่ไม่ได้รับอนุญาติเข้ามาใช้งาน และ เข้าถึงระบบของเราได้นั่นเอง

BONUS: จำทั้งหมดนี่ได้ไง ?

เราจะบอกว่า ทั้งหมดนี่ เราก็พอจะจำได้หมดเลยนะ เพราะเอาเข้าจริงคือ ชื่อคำสั่งมันสื่อความหมายในตัวหมดเลย เช่น chmod ก็คือ Change Mode เหมือนที่เราบอก ประกอบกับเราใช้มันมานานมาก ๆ แล้ว ทำให้เราจำได้ ถ้าอยากคล่อง ๆ แนะนำให้ลองใช้บ่อย ๆ อาจจะลองเปิด VM แล้วมาลองเล่น ๆ ดูก็ได้ พังก็ลบทิ้ง สร้างใหม่แค่นั้นเอง