ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home สร้างผู้ใช้ใหม่และให้สิทธิ์ sudo บน Linux

สร้างผู้ใช้ใหม่และให้สิทธิ์ sudo บน Linux

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

คู่มือนี้ใช้ได้กับ Ubuntu 22.04/24.04 และ AlmaLinux/Rocky Linux 8-9 สองกลุ่มนี้ต่างกันที่ชื่อกลุ่มผู้ใช้ที่ได้สิทธิ์ sudo คือ sudo บน Ubuntu และ wheel บน AlmaLinux/Rocky

สิ่งที่ต้องเตรียม

  • เข้าสู่ระบบด้วย root หรือผู้ใช้ที่มีสิทธิ์ sudo อยู่แล้ว
  • ชื่อผู้ใช้ใหม่ ใช้ตัวพิมพ์เล็ก ตัวเลข และ - หรือ _ ไม่มีช่องว่าง ตัวอย่างในคู่มือนี้ใช้ somchai
  • ถ้าจะให้ผู้ใช้ใหม่เข้าด้วย SSH Key ให้เตรียม Public Key ของผู้ใช้คนนั้นไว้ (ดู ตั้งค่า SSH Key)

คำสั่งในคู่มือนี้เขียนแบบมี sudo นำหน้า ถ้าคุณเข้าสู่ระบบเป็น root อยู่แล้ว จะพิมพ์ sudo หรือไม่ก็ได้

ขั้นตอนที่ 1: สร้างผู้ใช้ใหม่

Ubuntu

sudo adduser somchai

คำสั่งนี้สร้างผู้ใช้ สร้างโฮมไดเรกทอรี /home/somchai แล้วถามรหัสผ่านสองครั้ง จากนั้นถามข้อมูลเพิ่มเติม (Full Name, Room Number และอื่น ๆ) กด Enter ข้ามได้ทั้งหมด และตอบ Y เพื่อยืนยัน

AlmaLinux / Rocky Linux

บนระบบกลุ่มนี้ adduser เป็นชื่อเดียวกับ useradd ซึ่งไม่ถามรหัสผ่าน จึงต้องตั้งรหัสผ่านแยก

sudo useradd -m somchai
sudo passwd somchai

เมื่อสำเร็จ passwd จะแสดง passwd: all authentication tokens updated successfully.

ใช้รหัสผ่านที่ยาวและไม่ซ้ำกับที่อื่น แม้จะเข้า SSH ด้วย Key ก็ตาม เพราะ sudo จะถามรหัสผ่านนี้ทุกครั้งที่ยกสิทธิ์

ขั้นตอนที่ 2: เพิ่มผู้ใช้เข้ากลุ่ม sudo หรือ wheel

# Ubuntu
sudo usermod -aG sudo somchai

# AlmaLinux / Rocky Linux
sudo usermod -aG wheel somchai

ตัวเลือก -a สำคัญมาก หมายถึงเพิ่มเข้ากลุ่มโดยไม่ลบกลุ่มเดิม ถ้าลืม -a ผู้ใช้จะถูกถอดออกจากกลุ่มอื่นทั้งหมด ตรวจผลด้วย

groups somchai

ผลลัพธ์บน Ubuntu ควรเป็น somchai : somchai sudo และบน AlmaLinux/Rocky เป็น somchai : somchai wheel

ขั้นตอนที่ 3: ทดสอบสิทธิ์ sudo

สลับไปเป็นผู้ใช้ใหม่แล้วลองคำสั่งที่ต้องใช้สิทธิ์ root

su - somchai
sudo whoami

ระบบจะถาม [sudo] password for somchai: ให้ใส่รหัสผ่านของ somchai (ไม่ใช่ของ root) ผลลัพธ์ต้องเป็น root จากนั้นพิมพ์ exit เพื่อกลับเป็นผู้ใช้เดิม

ขั้นตอนที่ 4: ให้ผู้ใช้ใหม่เข้า SSH ด้วย Key

ถ้าเซิร์ฟเวอร์ปิดการเข้าด้วยรหัสผ่านไว้แล้ว ผู้ใช้ใหม่จะเข้า SSH ไม่ได้จนกว่าจะมี Public Key ของตัวเอง ให้สร้างไฟล์ authorized_keys แล้ววาง Public Key ของผู้ใช้คนนั้นลงไป (หนึ่ง Key ต่อหนึ่งบรรทัด)

sudo mkdir -p /home/somchai/.ssh
sudo nano /home/somchai/.ssh/authorized_keys
sudo chown -R somchai:somchai /home/somchai/.ssh
sudo chmod 700 /home/somchai/.ssh
sudo chmod 600 /home/somchai/.ssh/authorized_keys

ถ้าผู้ใช้ใหม่คือตัวคุณเอง และต้องการใช้ Key เดียวกับที่ใช้กับ root อยู่ ให้คัดลอกไฟล์แทนการวางเอง

sudo mkdir -p /home/somchai/.ssh
sudo cp /root/.ssh/authorized_keys /home/somchai/.ssh/
sudo chown -R somchai:somchai /home/somchai/.ssh
sudo chmod 700 /home/somchai/.ssh
sudo chmod 600 /home/somchai/.ssh/authorized_keys

บน AlmaLinux/Rocky ที่เปิด SELinux ให้รันเพิ่ม sudo restorecon -Rv /home/somchai/.ssh เพื่อให้ Context ของไฟล์ถูกต้อง

ตรวจสอบผลลัพธ์

เปิดหน้าต่างใหม่บนเครื่องของคุณ (อย่าปิด Session เดิม) แล้วเข้าด้วยผู้ใช้ใหม่

ssh [email protected]
sudo -v
sudo -l

sudo -v ถามรหัสผ่านแล้วไม่แสดงอะไรหากมีสิทธิ์ ส่วน sudo -l แสดงสิทธิ์ที่ได้รับ ควรมีบรรทัด (ALL : ALL) ALL บน Ubuntu หรือ (ALL) ALL บน AlmaLinux/Rocky ถ้าทั้งสองอย่างผ่าน ผู้ใช้ใหม่พร้อมใช้งานแล้ว

ขั้นตอนเพิ่มเติม: ปิดการเข้า SSH ด้วย root

เมื่อยืนยันแล้วว่าผู้ใช้ใหม่เข้า SSH และใช้ sudo ได้ ควรปิดไม่ให้ root เข้าทาง SSH โดยสร้างหรือแก้ไฟล์ /etc/ssh/sshd_config.d/00-hardening.conf ให้มีบรรทัดด้านล่าง (ถ้าไฟล์มีบรรทัด PermitRootLogin อยู่แล้ว ให้แก้บรรทัดเดิม อย่าเพิ่มซ้ำ)

PermitRootLogin no

แล้วตรวจไวยากรณ์และโหลดค่าใหม่

sudo sshd -t
# Ubuntu
sudo systemctl reload ssh
# AlmaLinux / Rocky Linux
sudo systemctl reload sshd

ทดสอบจากหน้าต่างใหม่ว่า ssh [email protected] ถูกปฏิเสธ และ ssh [email protected] ยังเข้าได้ ก่อนปิด Session เดิม ถ้าไฟล์ sshd_config หลักของ AlmaLinux/Rocky 8 ไม่มีบรรทัด Include /etc/ssh/sshd_config.d/*.conf ให้แก้ PermitRootLogin ในไฟล์หลักแทน

ขั้นตอนเพิ่มเติม: ให้สิทธิ์ sudo แบบเจาะจง

บางกรณีต้องการให้ผู้ใช้ เช่น บัญชีสำหรับ Deploy สั่งได้เฉพาะบางคำสั่งโดยไม่ต้องใส่รหัสผ่าน ให้สร้างไฟล์ใน /etc/sudoers.d/ ด้วย visudo เสมอ เพราะ visudo ตรวจไวยากรณ์ก่อนบันทึก

sudo visudo -f /etc/sudoers.d/deploy

ตัวอย่างให้ผู้ใช้ deploy รีโหลด Nginx ได้โดยไม่ถามรหัสผ่าน

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx

ระบุ Path เต็มของคำสั่งเสมอ ดูได้จาก command -v systemctl และหลีกเลี่ยงการให้ NOPASSWD: ALL กับบัญชีที่ใช้งานประจำ

ปัญหาที่พบบ่อย

somchai is not in the sudoers file

ผู้ใช้ยังไม่อยู่ในกลุ่ม sudo หรือ wheel หรือเพิ่มกลุ่มแล้วแต่ยังใช้ Session เดิมอยู่ สมาชิกภาพกลุ่มมีผลเมื่อเข้าสู่ระบบใหม่เท่านั้น ให้ออกจากระบบแล้วเข้าใหม่ หรือใช้ su - somchai ใหม่อีกครั้ง บน AlmaLinux/Rocky ให้ตรวจว่าบรรทัด %wheel ALL=(ALL) ALL ใน /etc/sudoers ไม่ได้ถูกใส่ # ไว้

แก้ sudoers ผิดแล้ว sudo ใช้ไม่ได้ทั้งระบบ

ถ้ายังมี Session root เปิดอยู่ ให้แก้ไฟล์ที่ผิดทันที ถ้าไม่มี ให้ลองใช้ pkexec visudo (ใช้ได้เมื่อติดตั้ง polkit ไว้) หรือเข้าผ่าน Console Server ผ่าน Web UI ในฐานะ root แล้วรัน visudo -c เพื่อดูว่าไฟล์ใดผิด นี่คือเหตุผลที่ควรแก้ด้วย visudo เท่านั้น

ผู้ใช้ใหม่เข้า SSH ไม่ได้ ขึ้น Permission denied (publickey)

ตรวจเจ้าของและสิทธิ์ของ /home/somchai/.ssh ด้วย ls -la /home/somchai/.ssh เจ้าของต้องเป็น somchai สิทธิ์ต้องเป็น 700 และ 600 ตามลำดับ และตรวจว่า Public Key อยู่ในบรรทัดเดียว ไม่ถูกตัดขึ้นบรรทัดใหม่ระหว่างการคัดลอก

หากต้องการความช่วยเหลือในการจัดการผู้ใช้หรือสิทธิ์บนเซิร์ฟเวอร์ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security