เนื่องจาก root เป็น user ที่สามารถดำเนินการและเข้าถึงการทำงานคำสั่งและไฟล์ต่างๆได้ทั้งหมด
เพื่อเป็นการลดความเสี่ยงอันอาจจะเกิดจากการทำงานที่ผิดพลาดและผู้ไม่ประสงค์ดี จึงมีความจำเป็นที่จะจำกัดการเข้าถึงระบบโดยตรงผ่าน account "root"
สำหรับการที่จะใช้งานคำสั่งต่างที่ต้องใช้สิทธิ์เท่า root ทำได้ผ่านคำสั่ง "sudo" หรือ "su"
ก่อนที่จะ disable root จะต้องมั่นใจว่ามี user ที่อยู่ในกลุ่มที่มีสิทธิ์ใช้คำสั่ง "sudo" เรียบร้อยแล้ว
เมื่อตรวจสอบเรียบร้อยก็สามารถดำเนินการได้ดังนี้
1. เปลี่ยน shell ของ root เป็น nologin
ปกติ shell ของ root คือ /bin/bash เมื่อต้องการยกเลิกการ login ด้วย root จึงเปลี่ยนเป็น /sbin/nologin
วิธีที่ 1. แก้ไขไฟล์ /etc/passwd
$ sudo vi /etc/passwd
เปลี่ยนจาก
root:x:0:0:root:/root:/bin/bash
เป็น
root:x:0:0:root:/root:/sbin/nologin
จากนั้นทำการ save และออกจากไฟล์
หรือ
วิธีที่ 2. ใช้คำสั่ง chsh
$ sudo chsh -s /sbin/nologin root
หลังจากนี้ถ้ามีการ login ด้วย root จะได้รับข้อความ "This account is currently not available"
2. ยกเลิกการ login ด้วย root ผ่าน Console
ขั้นตอนนี้ใช้ PAM module ที่เรียกว่า pam_security ซึ่งยินยอมให้ root เข้าใช้งานผ่านเส้นทางที่ระบุไว้ใน /etc/securetty เท่านั้น
วิธีการคือทำให้ไฟล์นี้ว่าง ด้วยการสร้างไฟล์ว่างๆ
เปลี่ยนชือไฟล์ต้นฉบับ
$ sudo mv /etc/securetty /etc/securetty.org
จากนั้นก็ทำการสร้างไฟล์ว่างๆขึ้นมา
$ sudo touch /etc/securetty
หรือ
$ sudo echo > /etc/securetty
จากนั้นทำการเปลี่ยนโหมดการเข้าถึงไฟล์โดยไม่ให้ user อื่นเข้าใช้งาน
$ sudo chmod 600 /etc/securetty
ถ้ายังต้องการให้ securetty รองรับการใช้งานผ่าน KDM, GDM และ XDM login managers ให้เพิ่มข้อความข้างล่างนี้
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
ไปที่ไฟล์
- /etc/pam.d/gdm
- /etc/pam.d/gdm-autologin
- /etc/pam.d/gdm-fingerprint
- /etc/pam.d/gdm-password
- /etc/pam.d/gdm-smartcard
- /etc/pam.d/kdm
- /etc/pam.d/kdm-np
- /etc/pam.d/xdm
ขั้นตอนนี้จะไม่กระทบต่อการใช้งานผ่าน su, sudo, ssh, scp, sftp
3. ยกเลิก ssh login ด้วย root
$ sudo vi /etc/ssh/sshd_config
กำหนด PermitRootLogin เป็น no
PermitRootLogin no
จากนั้นทำการ save และปิดไฟล์ แล้วทำการ restart service "ssh"
$ sudo systemctl restart sshd (RHEL/CentOS 7 or upper)
OR
$ sudo service sshd restart (RHEL/CentOS 6 or lower)
จะมีผลกระทบกับคำสั่ง ssh, scp, sftp
4. จำกัดสิทธิ์การเข้าถึง Service ต่างของ root ด้วย PAM
PAM ใช้งานผ่าน /lib/security/pam_listfile.so module มีความยืดหยุ่นในการกำหนดสิทธิ์ของ account ใช้งาน
Module ดังกล่าวสามารถใช้อ้างอิงรายชื่อ user ว่าใครที่ไม่ได้รับอนุญาตให้ login ผ่าน service ไหน เช่น login, ssh เป็นต้น
สำหรับเคสนี้ เราต้องการยกเลิกการเข้าถึงผ่าน root มาที่ระบบ โดยยกเลิกการเข้าถึงด้วย login และ sshd service ขั้นแรกจะต้องแก้ไขไฟล์สำหรับ service ที่ต้องการใน /etc/pam.d directory
$ sudo vi /etc/pam.d/login
OR
$ sudo vi /etc/pam.d/sshd
ถัดไป ทำการเพิ่ม config ด้านล่างในทั้ง 2 ไฟล์
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
หลังจากทำการ save และออกจากไฟล์แล้ว ให้ทำการสร้างไฟล์ /etc/ssh/deniedusers ซึ่งระบุ 1 ชื่อต่อ 1 บรรทัด และทำการเปลี่ยนสิทธิ์ของไฟล์ไม่ให้ user อื่นอ่านได้
เพิ่ม root เข้าไปในไฟล์ แล้ว save และออกจากไฟล์
$ sudo vi /etc/ssh/deniedusers
root
$ sudo chmod 600 /etc/ssh/deniedusers
5. ยกเลิกการ ftp ด้วย root
เพิ่มชื่อ user ในไฟล์ /etc/ftpusers หรือ /etc/vsftpd/ftpusers (VSFTPD)
$ sudo echo root >> /etc/ftpusers
OR
$ sudo echo root >> /etc/vsftpd/ftpusers
ชื่อ user ที่เพิ่มในไฟล์ /etc/ftpusers หรือ /etc/vsftpd/ftpusers จะไม่สามารถ login ใน service ftp ได้
ในส่วนของ PAM vsftpd FTP server จะใช้ไฟล์ /etc/pam.d/vsftpd config โดยเพิ่มข้อความ
auth required /lib/security/pam_listfile.so item=user \
onerr=succeed sense=deny file=/etc/vsftpd/ftpusers
*** NOTE: ในไฟล์ config ของ vsftpd (/etc/vsftpd/vsftpd.conf) สามารถเปลี่ยนไฟล์ user list (ซึ่งเก็บรายชื่อ user ที่ต้องการให้ใช้ ftp) ได้ที่ตัวแปร userlist_file (default file = /etc/vsftpd/user_list) เช่น ถ้าต้องการเปลี่ยนชื่อไฟล์สำหรับเก็บรายชื่อ user ที่ต้องการให้ใช้ ftp ใหม่ ก็แก้ไขได้ตามตัวอย่างคือ
userlist_enable=YES
userlist_file=/etc/vsftpd/ftp.user_list
userlist_deny=NO
สำหรับตัวแปร userlist_deny ค่า default คือ YES จะไม่อนุญาตให้ user ที่อยู่ในไฟล์ที่ระบุในตัวแปร userlist_file ใช้งาน ftp ได้
ถ้าต้องการให้ user ที่อยู่ในไฟล์นี้ใช้งาน ftp ได้ ให้กำหนด ค่าตัวแปร userlist_deny เป็น NO
อ้างอิง url:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-controlling_root_access
How to disable root account in Linux
Reviewed by Wisoot Amatariyakul
on
11:04 PM
Rating:
No comments: