Clear
Lead Graphic Papers

การบริหารจัดการผู้ใช้บนระบบ UNIX

ผู้เขียน: เจษฎา ช้างสีสังข์
วันที่เผยแพร่: 12 พ.ย. 2554
ปรับปรุงล่าสุด: 12 พ.ย. 2554

Share on Facebook Share on Twitter Share on Google+

UNIX เป็นระบบปฏิบัติการที่ถูกออกแบบมาให้สามารถใช้งานได้หลายคนในเวลาเดียวกัน (Multi-user) และสามารถทำงานได้หลายๆ อย่างพร้อมกัน (Multitasking) [1] ด้วยความสามารถเหล่านี้ UNIX จึงนิยมนำมาใช้เป็นระบบปฏิบัติการในเครื่องเซิร์ฟเวอร์ ดังนั้นเพื่อให้สามารถใช้งานระบบ UNIX ได้อย่างมีประสิทธิภาพ ผู้ดูแลระบบจึงควรมีความเข้าใจในการบริหารจัดการผู้ใช้และการกำหนดสิทธิ ต่างๆ ซึ่งในบทความนี้ จะ แนะนำคำสั่งในการใช้งานเบื้องต้น พร้อมทั้งแสดงไฟล์หลักๆ ที่เกี่ยวข้อง ซึ่งคำสั่งต่างๆ ในบทความนี้สามารถใช้งานได้กับระบบปฏิบัติการ UNIX ทุกระบบ

ประเภทของผู้ใช้

สำหรับระบบฏิบัติการตระกูล UNIX นั้น มีการออกแบบให้สามารถกำหนดสิทธิในการเข้าถึงข้อมูลได้หลายระดับ เพื่อจำกัดขอบเขตการใช้งานทรัพยากรต่างๆของระบบตามระดับของผู้ใช้ เช่น กำหนดสิทธิไม่ให้แก้ไขไฟล์สำคัญ ซึ่งในระบบ UNIX สามารถจำแนกผู้ใช้ออกได้เป็น 2 ประเภทด้วยกัน คือ

User

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

Superuser

คือผู้ใช้ที่มีสิทธิในการบริหารจัดการระบบทุกอย่าง ไม่ว่าจะเป็นการ สร้างหรือกำหนดสิทธิใช้งานให้กับผู้ใช้ [2] หรือการปิดการทำงานของ Process ที่สำคัญเช่น Web Server การแก้ไขไฟล์ของระบบ เป็นต้น ซึ่งในระบบปฏิบัติการ UNIX นั้น จะมีชื่อเรียกของ Superuser ว่า root

ไฟล์ที่ใช้กำหนดค่าให้กับผู้ใช้

ในการกำหนดความสามารถและรายละเอียดของผู้ใช้ ไฟล์ข้อความที่ใช้งานร่วมกัน 3 ไฟล์ คือ passwd, shadow และ group โดยแต่ละไฟล์จะมีการกำหนดสิทธิในการเข้าถึงไม่เหมือนกัน เนื่องจากมีบางไฟล์ที่ใช้เก็บข้อมูลที่เป็นความลับซึ่งไม่ต้องการให้ผู้ ใช้งานอื่นเห็น เช่น รหัสผ่าน ผู้อ่านสามารถศึกษาการตั้งค่าสิทธิการเข้าถึงไฟล์ได้จากบทความ การจัดการไดเรกทอรีและไฟล์ในระบบยูนิกซ์ [3]

การเข้าถึงระบบนั้น ผู้ใช้จะมีชื่อที่ใช้เข้าถึงระบบเรียกว่า Username และมี รหัสผ่านของแต่ละ Username ด้วย หรือบางครั้งผู้ดูแลระบบอาจมีการกำหนด Username ที่ไม่จำเป็นต้องใส่รหัสผ่าน เพื่อใช้งานชั่วคราวโดยมีการกำหนดสิทธิในการเข้าถึงที่จำกัด เช่น มหาวิทยาลัยแห่งหนึ่งมีการสร้าง Username ให้กับนักศึกษาเข้ามาใช้งานโดยยอมให้ใช้งานโปรแกรมประยุกต์ได้บางโปรแกรม หรือให้สิทธิในการเขียนไฟล์ได้บางส่วนเท่านั้น สำหรับการระบุตัวตนของผู้ใช้นั้น ระบบจะดูหมายเลขที่ใช้อ้างอิงกับผู้ใช้ เรียกว่า User Identifier หรือ UID ซึ่งหากมีการกำหนด Username โดยมี UID เดียวกัน ระบบจะเข้าใจว่าผู้ใช้ นั้นมีสิทธิเท่าเทียมกัน และระบบยังสามารถ จัดการ ผู้ใช้ให้เป็นกลุ่มได้โดยสามารถกำหนดชื่อ และ อ้างอิงจากหมายเลขที่เรียกว่า Group Identifier หรือ GID ซึ่งในแต่ละไฟล์นั้น มีการกำหนดรูปแบบการเก็บค่าแตกต่างกัน มีรายละเอียดดังนี้

/etc/passwd

เป็นไฟล์ข้อความที่ใช้เก็บข้อมูลรายละเอียดของผู้ใช้ในระบบ เช่น UID, GID และไดเรกทอรีหลักของผู้ใช้ (Home directory) เป็นต้น โดยระบบจะกำหนดให้ผู้ใช้มีสิทธิในการอ่านไฟล์นี้ และกำหนดสิทธิในการแก้ไขให้กับ root เท่านั้น ซึ่งในแต่ละบรรทัดของไฟล์ จะใช้แทนรายละเอียดต่อหนึ่ง Username และจะประกอบไปด้วยรายละเอียดของผู้ใช้ในส่วนต่างๆโดยแต่ละส่วนจะคั่นด้วย เครื่องหมาย “:” ดังที่แสดงในภาพด้านล่าง

etcpassword.png

ภาพแสดงตัวอย่างรายละเอียดผู้ใช้ชื่อ Oracle [4]

  1. Username: เป็นส่วนที่ใช้เก็บค่าของ Username ที่ใช้เข้าสู่ระบบ มีความยาวไม่เกิน 32 ตัวอักษร
  2. Password: เป็นส่วนที่ใช้บอกว่ามีการเข้าถึงระบบโดยใช้รหัสผ่านหรือไม่ ซึ่งหากเป็นค่า “x” แสดงว่าผู้ใช้มีการใช้รหัสผ่าน ซึ่งรหัสผ่านนี้จะถูกเข้ารหัสลับและเก็บไว้ที่ไฟล์ /etc/shadow หากเป็นค่า “*” หรือ “!” จะเป็นการบ่งบอกว่า ให้ปิดการเข้าถึงระบบด้วยการใส่รหัสผ่าน มักใช้กับ Username ที่ติดตั้งมากับโปรแกรม
  3. User ID (UID): เป็นส่วนที่ใช้ระบุหมายเลขให้กับผู้ใช้ โดยหมายเลข 0 จะถูกจองให้กับ Superuser หรือ root เท่านั้น หมายเลข 1-99 จะถูกจองให้กับโปรแกรมของระบบ และ หมายเลข 100-999 จะถูกจองให้กับโปรแกรมต่างๆ ที่ติดตั้งโดย ผู้ดูแลระบบหรือใช้ในการกำหนดกลุ่ม ของระบบ ดังนั้น สำหรับการกำหนดหมายเลขให้กับผู้ใช้ทั่วไปจึงควรกำหนดค่าตั้งแต่ 1000 ขึ้นไป
  4. Group ID (GID): เป็นส่วนที่ระบุหมายเลขของกลุ่มที่ผู้ใช้นั้นอยู่ ซึ่งรายละเอียดแต่ละกลุ่ม จะถูกเก็บไว้ที่ /etc/group
  5. User ID Info: เป็นส่วนที่ใช้แสดงรายละเอียดเพิ่มเติมเกี่ยวกับผู้ใช้ เช่น ระบุชื่อ-นามสกุลของผู้ใช้ หมายเลขโทรศัพท์ เป็นต้น
  6. Home directory: เป็นส่วนที่ระบุตำแหน่งไดเรกทอรีที่จะปรากฏเมื่อผู้ใช้ เข้าสู่ระบบ โดยการกำหนดนั้นจะต้องระบุเป็น Absolute path ซึ่งอ้างอิงจากตำแหน่งของ root คือ / หากเว้นว่าง ไว้หรือไดเรกทอรีที่กำหนดไม่มีอยู่จริง ระบบจะกำหนดให้เป็น /
  7. Command/shell: เป็นส่วนที่ เก็บตำแหน่งของโปรแกรม shell หรือโปรแกรมที่ทำหน้าที่รับคำสั่งจากผู้ใช้ไปประมวลผลบนระบบ [5] โดยการกำหนดนั้นจะต้องระบุเป็น Absolute path

/etc/shadow

เป็นไฟล์ข้อความที่เก็บรหัสผ่านจริงของผู้ใช้โดยจะอยู่ในรูปของการเข้ารหัสลับ และ เก็บค่าที่ใช้กำหนดคุณสมบัติของการใช้รหัสผ่าน เช่น วันหมดอายุ โดยจะใช้หนึ่งบรรทัดต่อหนึ่ง Username ไฟล์นี้กำหนดสิทธิในการอ่านเขียนให้กับ root เท่านั้น เพื่อป้องกันไม่ให้ผู้ใช้เห็นรหัสผ่านของผู้ใช้คนอื่น
และประกอบไปด้วยรายละเอียดของผู้ใช้ในส่วนต่างๆโดยแต่ละส่วนจะคั่นด้วยเครื่องหมาย “:” ดังรูปที่แสดงด้านล่าง

etcshadow.png

ภาพแสดงตัวอย่างข้อมูลรายละเอียดในไฟล์ /etc/shadow [6]

  1. Username: เป็นส่วนที่ใช้เก็บค่าชื่อของผู้ใช้ที่ใช้เข้าสู่ระบบ มีความยาวตัวอักษรไม่เกิน 32 ตัวอักษร
  2. Encrypted password: เป็นส่วนที่แสดง รหัสผ่านของผู้ใช้ที่ถูกเข้ารหัสลับไว้ โดยรูปแบบการเข้ารหัสลับ จะอ้างอิงจากฟังก์ชันของระบบที่ชื่อว่า crypt(3) เช่นจากตัวอย่างจะมี ส่วนที่ใช้อธิบายคั่นด้วยเครื่องหมาย $ โดยค่าแรกจะเป็นหมายเลขกำหนดชนิดวิธีการ Hash หรือขั้นตอนในการเข้ารหัสลับข้อมูล ซึ่งค่า 1 เป็นการกำหนด Hash แบบหนึ่งที่เรียกว่า MD5 ค่าถัดมาเรียกว่า Salt คือค่าที่สร้างขึ้นมาเพื่อนำไปรวมกับ รหัสผ่านจริงก่อนทำการ Hash เพื่อป้องกันโอกาสการเกิดผลลัพธ์ของการ Hash (Message Digest) ซ้ำกัน
  3. Date of last password change: เป็นส่วนที่แสดงวันที่ล่าสุดที่มีการเปลี่ยนแปลงรหัสผ่าน เป็นตัวเลขในรูปของ UNIX timestamp (จำนวนวินาทีที่ถูกนับจากวันที่ 1 มกราคม ค.ศ. 1970 อ้างอิงตามเวลาสากลเชิงพิกัด หรือ UTC ) [7] จากตัวอย่างเมื่อนำมาแปลงจะได้ วันที่ 1 มกราคม ค.ศ. 1970 เวลา 03:37:44 น.
  4. Minimum password age: เป็นส่วนที่ระบุจำนวนวันที่น้อยที่สุด ที่อนุญาตให้ผู้ใช้ทำการเปลี่ยนรหัสผ่านได้ สำหรับการกำหนดค่า 0 หรือเว้นว่างไว้ จะเป็นการกำหนดว่าไม่มีค่า Minimum
  5. Maximum password age: เป็นส่วนที่ระบุจำนวนวันสูงสุดที่อนุญาตให้ผู้ใช้สามารถเปลี่ยนรหัสผ่านของ ตนเองได้ สำหรับการกำหนดค่า 99999 หรือไม่ใส่อะไร จะเป็นการกำหนดว่า สามารถเปลี่ยนรหัสผ่านได้ทุกเมื่อ
*หมายเหตุ
หากไม่ต้องการให้ผู้ใช้เปลี่ยนรหัสผ่านของตนเองได้ ผู้ดูแลระบบสามารถทำได้โดยการ กำหนดค่าในส่วนของ Maximun ให้มีค่าน้อยกว่า Minimum
  1. Password warning period: เป็นส่วนที่กำหนดจำนวนวัน ให้ระบบเริ่มแจ้งเตือน ก่อนที่รหัสผ่านจะหมดอายุการใช้งาน เมื่อถึงวันที่ต้องแจ้งเตือน ระบบจะแสดงข้อความ ให้ทำการเปลี่ยนรหัสผ่าน และบอกจำนวนวันที่เหลือก่อนหมดอายุการใช้งาน [8]
  2. Password Inactivity Period: เป็นส่วนที่แสดงจำนวนวัน หากไม่มีการเปลี่ยน รหัสผ่านภายในวันที่กำหนดจะทำให้ผู้ใช้นั้นถูกปิดการใช้งาน
  3. Account expiration date: เป็นส่วนที่ใช้กำหนดวันหมดอายุของผู้ใช้ โดยมีรูปแบบเป็น UNIX timestamp ซึ่งเมื่อครบกำหนด ระบบจะทำการปิดการทำงานของผู้ใช้ นั้นโดยทันที

/etc/group

เป็นไฟล์ข้อความที่ใช้กำหนดคุณสมบัติและสมาชิกของแต่ละกลุ่ม ไฟล์นี้จะถูกกำหนดสิทธิให้ผู้ใช้งานสามารถอ่านได้เท่านั้น โดยผู้ที่มีสิทธิในการแก้ไขไฟล์มีเพียง root เท่านั้น โดยทั่วไปแล้วในระบบใหญ่ๆ ควรมีการสร้างกลุ่ม ขึ้นมาเพื่อให้เกิดความสะดวกในการบริหารจัดการสิทธิในการเข้าถึงระบบ ให้กับกลุ่มผู้ใช้ต่างๆ เช่น กำหนดให้กลุ่ม A สามารถแก้ไขไฟล์ได้เฉพาะ ไดเรกทอรี /var/opt เท่านั้น, หรือการกำหนดให้ผู้ใช้มีสิทธิเท่าเทียมกับ โปรแกรมของระบบเช่น Web Server เป็นต้น

etcgroup.jpg

ภาพแสดงตัวอย่างข้อมูลรายละเอียดในไฟล์ /etc/group [9]

  1. Group Name:เป็นส่วนที่ระบุชื่อของ group
  2. Password: เป็นส่วนที่ระบุว่า จะให้มีการกำหนดรหัสผ่านเมื่อผู้ใช้ต้องการเข้าไปยัง Group นั้นหรือไม่ ซึ่งหากเป็นค่า “x” แสดงว่ามีการใช้รหัสผ่าน ซึ่งรหัสผ่านนี้จะถูกเข้ารหัสลับและเก็บไว้ที่ไฟล์ /etc/shadow หากไม่ต้องการกำหนด สามารถทำได้โดยการเว้นว่างไว้
  3. Group ID (GID): เป็นส่วนที่แสดงหมายเลข Group ID
  4. User List: เป็นส่วนที่แสดงรายชื่อ User ที่เป็นสมาชิกของ Group สามารถเพิ่มสมาชิก โดยใส่เครื่องหมาย “,” คั่น
จากความสัมพันธ์ของไฟล์ทั้งสามข้างต้นนั้น เมื่อมีความเข้าใจแล้ว ผู้ดูแลระบบสามารถทำการจัดการบริหารผู้ใช้ได้โดยการแก้ไขไฟล์โดยตรง หรืออาจมีการประยุกต์โดยการเขียนสคริปท์ เพื่อสร้างผู้ใช้ให้กับระบบ หลายๆคนพร้อมกัน นอกจากนี้ระบบปฏิบัติการ UNIX ยังมีคำสั่งที่สร้างความสะดวกในการบริหารจัดการผู้ใช้ และเพื่อ ไม่ให้ผู้ดูแลระบบเสียเวลาแก้ไขไฟล์เองซึ่งมีโอกาสผิดพลาดได้ โดยมีคำสั่งมาตรฐานที่ติดตั้งมากับระบบ UNIX ที่แนะนำดังนี้

คำสั่งพื้นฐานที่ใช้บริหารจัดการผู้ใช้บนระบบ

การเพิ่มผู้ใช้ให้กับระบบ

ผู้ดูแลระบบสามารถเพิ่มผู้ใช้ โดยการใช้คำสั่ง useradd ซึ่งมี option ทั่วไปดังนี้
useradd [-u UID] [-g GID] [-d HOME_DIR] [-s SHELL] [-m] [-c COMMENT] USER_NAME

[-u UID] กำหนดหมายเลข UID ให้กับผู้ใช้
[-g GID] กำหนดหมายเลข GID หรือชื่อกลุ่มให้กับผู้ใช้
[-d HOME_DIR] กำหนดไดเรกทอรีแรกให้กับผู้ใช้
[-s SHELL] กำหนดโปรแกรม Shell ที่จะใช้ให้กับผู้ใช้
[-m] กำหนดให้มีการสร้าง Home Directory หากยังไม่มี
[-c COMMENT] กำหนดค่า String เพื่อแสดงรายละเอียดเพิ่มเติมของผู้ใช้
USER_NAME กำหนด ชื่อที่ใช้เข้าถึงระบบ


ตัวอย่างคำสั่ง
# useradd -u 777 -g test -d /home/test -s /bin/sh -m -c test_comment test

การกำหนดรหัสผ่านให้กับผู้ใช้

ผู้ดูแลระบบสามารถ เพิ่มหรือเปลี่ยนแปลงรหัสผ่านให้กับผู้ใช้ ได้โดยการใช้คำสั่ง passwd ดังนี้
passwd USER_NAME
ตัวอย่างคำสั่ง

# passwd test
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
จาก ตัวอย่างเมื่อพิมพ์คำสั่ง กำหนดรหัสผ่านให้กับผู้ใช้ชื่อ test ระบบจะให้กำหนดรหัสผ่านใหม่ สองครั้ง ถ้าตรงกันระบบจะสร้าง รหัสผ่านให้

การแก้ไขข้อมูลผู้ใช้

ผู้ดูแลระบบสามารถแก้ไขข้อมูลผู้ใช้ด้วยคำสั่ง usermod ซึ่งมี option ทั่วไปดังนี้
usermod [-u UID] [-g GID] [-d HOME_DIR] [-s SHELL] [-m] [-c COMMENT] [-e EXPIRE_DATE] USER_NAME

[-u UID] กำหนดหมายเลข UID ให้กับผู้ใช้
[-g GID] กำหนดหมายเลข GID หรือชื่อกลุ่มให้กับผู้ใช้
[-d HOME_DIR] กำหนดไดเรกทอรีแรกให้กับผู้ใช้
[-s SHELL] กำหนดโปรแกรม Shell ที่จะใช้ให้กับผู้ใช้
[-m] กำหนดให้มีการสร้าง Home Directory หากยังไม่มี
[-c COMMENT] กำหนดค่า String เพื่อแสดงรายละเอียดเพิ่มเติมของผู้ใช้
[-e EXPIRE_DATE] กำหนดวันหมดอายุการใช้งานของผู้ใช้ โดยมีรูปแบบเป็น YYYY-MM-DD
[-L ] กำหนดให้ปิดการใช้งานผู้ใช้
[-U ] กำหนดให้เปิดการใช้งานผู้ใช้
USER_NAME กำหนดชื่อที่ใช้เข้าถึงระบบ


ตัวอย่างคำสั่ง
#usermod -d /home/test02 test
#usermod -c "Mr.test test02" test

การลบผู้ใช้ออกจากระบบ

ผู้ดูแลระบบสามารถลบผู้ใช้ออกจากระบบ โดยการใช้คำสั่ง userdel เช่น
userdel USER_NAME

ตัวอย่างคำสั่ง
# userdel test02

การสร้างกลุ่ม

ผู้ดูแลระบบสามารถสร้างกลุ่มได้โดยการใช้คำสั่ง groupadd ได้โดยการใช้คำสั่งดังนี้
groupadd [-g GID] GROUP_NAME

ตัวอย่างคำสั่ง
#groupadd -g 1000 etda

คำสั่งการแสดงรายละเอียดผู้ใช้

ผู้ใช้สามารถใช้คำสั่ง id เพื่อแสดงรายละเอียดผู้ใช้เช่น Username, UID, GID โดยใช้คำสั่งดังนี้
id USER_NAME

ตัวอย่างคำสั่ง
$ id jezt
uid=1000(jezt) gid=1000(jezt) groups=1000(jezt),4(adm),20(dialout),24(cdrom),33(www-data),46(plugdev),112(lpadmin),120(admin),122(sambashare)

จากคำสั่งพื้นฐานที่ได้แนะนำนั้น ผู้ใช้สามารถดูรายละเอียดเพิ่มเติมได้จากคู่มือการใช้งาน (Man pages) ด้วยการใช้คำสั่ง man [COMMAND_NAME] เช่น $man useradd

อ้างอิง

[1] http://en.wikipedia.org/wiki/Unix
[2] http://en.wikipedia.org/wiki/Superuser
[3] http://www.thaicert.or.th/papers/normal/2011/pp2011no0003.html
[4] http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/
[5] http://en.wikipedia.org/wiki/Unix_shell
[6] http://www.cyberciti.biz/faq/understanding-etcshadow-file/
[7] http://en.wikipedia.org/wiki/Unix_time
[8] http://www.thegeekstuff.com/2009/04/chage-linux-password-expiration-and-aging/
[9] http://www.cyberciti.biz/faq/understanding-etcgroup-file/

Clear