ลืม root password บนลีนุกซ์ ต้องแก้ไขอย่างไร – ตอนที่ 1 แก้โดย single user mode

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

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

ในที่นี้ทดสอบกับ CentOS 6 ซึ่งสามารถนำวิธีการนี้ไปใช้ได้กับ CentOS 5 หรือ Fedora เวอร์ชั่นต่างๆ ได้ ส่วนลีนุกซ์ดิสทริบิวชั่นอื่นๆ วิธีการอาจแตกต่างกันไปเล็กน้อย แต่หลักการน่าจะใกล้เคียงกัน

การเขียนบทความลักษณะอย่างนี้มีทั้งประโยชน์และโทษ ขึ้นอยู่กับผู้อ่านจะนำวิธีนี้ไปใช้ในทางไหน ในฐานะที่ผู้เขียนก็ทำหน้าที่ผู้ดูแลระบบเหมือนกัน ขอแสดงวิธีการแก้ไข รวมทั้งวิธีการป้องกัน ไม่ให้บุคคลอื่นที่ไม่มีสิทธิ์หรือเป็นเจ้าของเครื่องจริงๆ สามารถนำวิธีนี้มาใช้กับเครื่องที่เราดูแลได้ จะขอแบ่งเนื้อหาเป็น 4 ส่วนด้วยกัน

  1. การเปลี่ยน root password โดยการบู๊ตเครื่องแล้วเข้า single user mode
  2. การป้องกันข้อ 1 โดยการตั้ง password ใน grub เพื่อป้องกันไม่ให้สามารถบู๊ตเครื่องเข้า single user mode ได้ หากไม่ทราบ password
  3. การเปลี่ยน root password โดยใช้แผ่นดีวีดีติดตั้ง CentOS ในกรณีที่ไม่ทราบ password ใน grub
  4. การป้องกันข้อ 3 โดยการเปลี่ยนลำดับการบู๊ต ไม่ให้บู๊ตจากแผ่นดีวีดีก่อน

ทั้งสองวิธี ​(ข้อ 1 และ 3) ผู้ดูแลจำเป็นต้องอยู่หน้าเครื่องลีนุกซ์ที่ต้องการแก้ไข และต้องมีการบู๊ตหรือรีบู๊ตเครื่องด้วย วิธีการหนึ่งที่สามารถรีบู๊ตได้ในกรณีที่ไม่ทราบ root password ลองต่อจอ คีย์บอร์ด หากหน้าจอขึ้นหน้าคอนโซล (login:) ลองกดปุ่ม [Ctrl]+[Alt]+[Del] พร้อมกัน น่าจะรีบู๊ตเครื่องได้ แต่ถ้าลองแล้วไม่ได้ อาจจำเป็นต้องกดปุ่ม power ค้างไว้ (ไม่รับรองความปลอดภัยของข้อมูลนะครับ)

การเปลี่ยน root password โดยการบู๊ตเครื่องแล้วเข้า single user mode

บู๊ตเครื่องที่ต้องการแก้ไข

กดปุ่มใดๆ เพื่อเข้าสู่เมนูการบู๊ต (GRUB)

 

ในหน้าเมนูการบู๊ต (GRUB) หากไม่มีการใส่ password ใน grub.conf ด้านล่างจะมีคำอธิบายว่าสามารถกดปุ่ม ‘a’ เพื่อแก้ไขค่า kernel argument เพื่อระบุคอนฟิกสำหรับการบู๊ต

กดปุ่ม ‘a’

 

หน้าจอจะแสดงค่าของ kernel argument ให้เราพิมพ์คำว่า single ต่อท้ายบรรทัดไป (เว้นวรรคครั้งนึง ก่อนพิมพ์ด้วยนะ) เพื่อระบุว่า เราต้องการบู๊ตเข้าสู่ single user mode

 

หน้าจอจะแสดงข้อความต่างๆ เกี่ยวกับการบู๊ต สังเกตว่าใช้เวลาสั้นๆ กว่าปกติ ก็จะขึ้น prompt ของ root (#) แสดงว่าเราเข้าสู่ single user mode แล้ว

การบู๊ตเข้าสู่ single user mode หรือโหมดบำรุงรักษาเครื่องนั้น จะโหลด kernel หรือสิ่งจำเป็นต่างๆ เพียงแค่ให้บู๊ตเครื่องได้เท่านั้น ไม่ได้รันโปรแกรมหรือเซอร์วิสใดๆ ถือว่าเป็นโหมดที่ใช้แก้ไขปัญหาของเครื่อง

 

เมื่อได้ prompt ของ root แล้ว เราก็สามารถรันคำสั่งต่างๆ เป็น root ได้ รวมทั้งการใช้คำสั่ง passwd เพื่อเปลี่ยน password ของ root

 

เพียงเท่านี้เราก็เปลี่ยนรหัสผ่านของ root สำเร็จ สามารถพิมพ์คำสั่ง exit หรือกดปุ่ม [Ctrl]+[D] เพื่อออกจาก single user mode เข้าสู่โหมดการทำงานของเครื่องปกติ (level 3)

 

การตั้ง password ใน grub เพื่อป้องกันไม่ให้สามารถบู๊ตเครื่องเข้า single user mode ได้

หากอ่านวิธีการแก้ไขด้านบนแล้วรู้สึกว่าง่ายมาก แปลว่าใครที่อยู่หน้าเครื่องก็สามารถตั้ง root password ใหม่ได้ เพียงแค่รีบู๊ตเครื่องหนึ่งครั้งเท่านั้น

เพื่อเพิ่มความปลอดภัยให้กับเครื่อง ขอแนะนำให้ตั้ง password ใน grub เพื่อป้องกันไม่ให้แก้ไขแบบวิธีแรกได้

วิธีการตั้ง password ใน grub สามารถทำได้ตั้งแต่ตอนติดตั้ง CentOS หรือลีนุกซ์อื่นๆ ได้เลย โดยเลือก [x] Use a boot loader password

หน้าจอจะขึ้นให้ใส่ password สองครั้ง

 

หรือหากตอนติดตั้งไม่ได้เลือกให้ใส่ password ของ boot loader สามารถแก้ไขภายหลังติดตั้งได้ โดยการแก้ไขไฟล์ /etc/grub.conf (หรือไฟล์ /boot/grub/grub.conf) เพิ่มบรรทัดคอนฟิก password –encrypted ต่อท้ายด้วยรหัสผ่านที่ได้จากการรันคำสั่ง grub-crypt

[root@cent6 ~]# grub-crypt
Password:
Retype password:
$6$gOGyPv6liuNi2.lW$ND0ze9tapIQzHJTQhEk1Ik/YvAnzMU/tcD1BMCzYn2ZdzUvnp5LUiX8ME50sRjzOVJT.AnPaOg/.FtR.8oJHV0

ตัวอย่างการแก้ไขไฟล์ /etc/grub.conf

[root@cent6 ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --encrypted $6$gOGyPv6liuNi2.lW$ND0ze9tapIQzHJTQhEk1Ik/YvAnzMU/tcD1BMCzYn2ZdzUvnp5LUiX8ME50sRjzOVJT.AnPaOg/.FtR.8oJHV0
title CentOS (2.6.32-279.el6.x86_64)
 root (hd0,0)
 kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
 initrd /initramfs-2.6.32-279.el6.x86_64.img

ลองรีบู๊ตเครื่องดู เข้าสู่เมนูบู๊ต GRUB สังเกตว่าข้อความด้านล่างจะเปลี่ยนไป ไม่มีบอกให้กด ‘a’ เพื่อแก้ไขคอนฟิก kernel ได้ มีแต่ให้กด ‘p’ เพื่อใส่ password

ลองกดปุ่ม ‘a’ ดู หน้าจอก็ไม่เปลี่ยนอะไร

 

กดปุ่ม ‘p’ ด้านล่างจะขึ้นให้ใส่ password หากใส่ไม่ถูกต้อง ก็จะกลับสู่หน้าเดิม

 

แต่ถ้าใส่ถูกต้อง หน้าเมนูบู๊ต GRUB ก็จะขึ้นให้สามารถกดปุ่ม ‘a’ ได้เหมือนเดิม

 

ตอนต่อไป จะแสดงวิธีการแก้ไขหากไม่ทราบ password ของ grub ด้วย ทำให้ไม่สามารถเข้า single user mode ได้

 

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

1 thought on “ลืม root password บนลีนุกซ์ ต้องแก้ไขอย่างไร – ตอนที่ 1 แก้โดย single user mode”

  1. ของผมเอา ubuntu usb เข้าไปแก้ shadow file เอาง่ะครับ

Leave a Reply