5 คำสั่ง 'chattr' เพื่อสร้างไฟล์สำคัญที่ไม่เปลี่ยนรูป (ไม่สามารถเปลี่ยนแปลงได้) ใน Linux
chattr (เปลี่ยนคุณสมบัติ) คือยูทิลิตี้บรรทัดคำสั่ง Linux ที่ใช้ในการตั้งค่า/ยกเลิกการตั้งค่าคุณสมบัติบางอย่างให้กับไฟล์ในระบบ Linux เพื่อความปลอดภัยในการลบหรือแก้ไขไฟล์และโฟลเดอร์ที่สำคัญโดยไม่ตั้งใจ แม้ว่าคุณจะถูกบันทึกไว้ก็ตาม ในฐานะผู้ใช้รูท
ในระบบไฟล์ดั้งเดิมของ Linux เช่น ext2, ext3, ext4, btrfs ฯลฯ รองรับแฟล็กทั้งหมด แม้ว่าแฟล็กทั้งหมดจะไม่รองรับ FS ที่ไม่ใช่เจ้าของภาษาทั้งหมด ไม่สามารถลบหรือแก้ไขไฟล์/โฟลเดอร์ได้เมื่อตั้งค่าแอตทริบิวต์ด้วยคำสั่ง chattr แม้ว่าจะมีการอนุญาตแบบเต็มก็ตาม
สิ่งนี้มีประโยชน์มากในการตั้งค่าแอตทริบิวต์ในไฟล์ระบบเช่นไฟล์ passwd และ shadow ซึ่งมีข้อมูลของผู้ใช้อยู่
ไวยากรณ์ของ chattr
chattr [operator] [flags] [filename]
คุณสมบัติและแฟล็ก
ต่อไปนี้เป็นรายการคุณลักษณะทั่วไปและแฟล็กที่เกี่ยวข้องที่สามารถตั้งค่า/ยกเลิกการตั้งค่าได้โดยใช้คำสั่ง chattr
- หากเข้าถึงไฟล์ด้วยชุดแอตทริบิวต์ 'A' บันทึกเวลาจะไม่อัปเดต
- หากไฟล์ได้รับการแก้ไขด้วยชุดแอตทริบิวต์ 'S' การเปลี่ยนแปลงจะถูกอัพเดตพร้อมกันบนดิสก์
- ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 'a' สามารถเปิดได้เฉพาะในโหมดผนวกเพื่อเขียนเท่านั้น
- ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 'i' ซึ่งไม่สามารถแก้ไขได้ (ไม่เปลี่ยนรูป) หมายถึงไม่มีการเปลี่ยนชื่อ, ไม่มีการสร้างลิงค์สัญลักษณ์, ไม่มีการดำเนินการ, ไม่สามารถเขียนได้, มีเพียง superuser เท่านั้นที่สามารถยกเลิกการตั้งค่าแอตทริบิวต์ได้
- ไฟล์ที่มีแอตทริบิวต์ 'j' ถูกตั้งค่า ข้อมูลทั้งหมดจะถูกอัปเดตไปยังเจอร์นัล ext3 ก่อนที่จะอัปเดตเป็นไฟล์นั้นเอง
- ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 't' ไม่มีการผสานส่วนท้าย
- ไฟล์ที่มีแอตทริบิวต์ 'd' จะไม่มีตัวเลือกสำหรับการสำรองข้อมูลอีกต่อไปเมื่อเรียกใช้กระบวนการถ่ายโอนข้อมูล
- เมื่อไฟล์มีแอตทริบิวต์ 'u' ถูกลบ ข้อมูลจะถูกบันทึก ซึ่งจะทำให้ผู้ใช้สามารถขอยกเลิกการลบได้
ผู้ดำเนินการ
- + : เพิ่มแอตทริบิวต์ให้กับแอตทริบิวต์ที่มีอยู่ของไฟล์
- – : ลบแอตทริบิวต์ของแอตทริบิวต์ที่มีอยู่ของไฟล์
- = : เก็บคุณลักษณะที่มีอยู่ซึ่งมีไฟล์ไว้
ที่นี่ เราจะสาธิตตัวอย่างคำสั่ง chattr เพื่อตั้งค่า/ยกเลิกการตั้งค่าคุณลักษณะของไฟล์และโฟลเดอร์
1. วิธีเพิ่มคุณสมบัติในไฟล์เพื่อป้องกันการลบ
เพื่อจุดประสงค์ในการสาธิต เราได้ใช้โฟลเดอร์ demo และไฟล์ important_file.conf ตามลำดับ ก่อนตั้งค่าแอตทริบิวต์ ตรวจสอบให้แน่ใจว่าไฟล์ที่มีอยู่มีแอตทริบิวต์ใด ๆ ที่ตั้งค่าโดยใช้คำสั่ง 'ls -l' คุณเห็นผลลัพธ์หรือไม่ ขณะนี้ไม่มีการตั้งค่าแอตทริบิวต์
[root@tecmint tecmint]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf
ในการตั้งค่าแอตทริบิวต์ เราใช้เครื่องหมาย + และในการยกเลิกการตั้งค่าให้ใช้เครื่องหมาย – ด้วยคำสั่ง chattr ดังนั้น มาตั้งค่าบิตที่ไม่เปลี่ยนรูปในไฟล์ด้วยแฟล็ก +i เพื่อป้องกันไม่ให้ใครก็ตามลบไฟล์ แม้แต่ผู้ใช้รูทก็ไม่มีสิทธิ์ลบมัน
[root@tecmint tecmint]# chattr +i demo/
[root@tecmint tecmint]# chattr +i important_file.conf
หมายเหตุ: บิตที่ไม่เปลี่ยนรูป +i สามารถตั้งค่าได้โดยผู้ใช้ขั้นสูงเท่านั้น (เช่น root) หรือผู้ใช้ที่มีสิทธิ์ sudo สามารถตั้งค่าได้ .
หลังจากตั้งค่าบิตที่ไม่เปลี่ยนรูปแล้ว ให้ตรวจสอบแอตทริบิวต์ด้วยคำสั่ง 'lsattr'
[root@tecmint tecmint]# lsattr
----i----------- ./demo
----i----------- ./important_file.conf
ตอนนี้พยายามลบอย่างรุนแรง เปลี่ยนชื่อหรือเปลี่ยนการอนุญาต แต่จะไม่ได้รับอนุญาตว่า “ไม่อนุญาตให้ดำเนินการ“
[root@tecmint tecmint]# rm -rf demo/
rm: cannot remove âdemo/â: Operation not permitted
[root@tecmint tecmint]# mv demo/ demo_alter
mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[root@tecmint tecmint]# chmod 755 important_file.conf
chmod: changing permissions of âimportant_file.confâ: Operation not permitted
2. วิธียกเลิกการตั้งค่าแอตทริบิวต์ในไฟล์
ในตัวอย่างข้างต้น เราได้ดูวิธีตั้งค่าแอตทริบิวต์ให้ปลอดภัยและป้องกันไฟล์จากการลบโดยไม่ตั้งใจ ในตัวอย่างนี้ เราจะดูวิธีรีเซ็ตสิทธิ์ (ยกเลิกการตั้งค่าแอตทริบิวต์) และอนุญาตให้ทำให้ไฟล์เปลี่ยนแปลงหรือเปลี่ยนแปลงได้โดยใช้ < แข็งแกร่ง> - ฉัน ตั้งค่าสถานะ
[root@tecmint tecmint]# chattr -i demo/ important_file.conf
หลังจากรีเซ็ตการอนุญาต ให้ตรวจสอบสถานะที่ไม่เปลี่ยนรูปแบบของไฟล์โดยใช้คำสั่ง 'lsattr'
[root@tecmint tecmint]# lsattr
---------------- ./demo
---------------- ./important_file.conf
คุณเห็นในผลลัพธ์ข้างต้นว่าแฟล็ก '-i' ถูกลบออก ซึ่งหมายความว่าคุณสามารถลบไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ในโฟลเดอร์ tecmint ได้อย่างปลอดภัย
[root@tecmint tecmint]# rm -rf *
[root@tecmint tecmint]# ls -l
total 0
3. วิธีการรักษาความปลอดภัยไฟล์ /etc/passwd และ /etc/shadow
การตั้งค่าแอตทริบิวต์ที่ไม่เปลี่ยนรูปในไฟล์ /etc/passwd หรือ /etc/shadow ช่วยให้ปลอดภัยจากการลบออกโดยไม่ตั้งใจหรือการงัดแงะ และยังจะปิดการสร้างบัญชีผู้ใช้อีกด้วย
[root@tecmint tecmint]# chattr +i /etc/passwd
[root@tecmint tecmint]# chattr +i /etc/shadow
ตอนนี้ลองสร้างผู้ใช้ระบบใหม่ คุณจะได้รับข้อความแสดงข้อผิดพลาดว่า 'ไม่สามารถเปิด /etc/passwd'
[root@tecmint tecmint]# useradd tecmint
useradd: cannot open /etc/passwd
วิธีนี้ทำให้คุณสามารถตั้งค่าการอนุญาตที่ไม่เปลี่ยนรูปในไฟล์สำคัญหรือไฟล์การกำหนดค่าระบบของคุณเพื่อป้องกันการลบ
4. ผนวกข้อมูลโดยไม่ต้องแก้ไขข้อมูลที่มีอยู่ในไฟล์
สมมติว่า คุณเพียงต้องการให้ทุกคนต่อท้ายข้อมูลในไฟล์โดยไม่ต้องเปลี่ยนแปลงหรือแก้ไขข้อมูลที่ป้อนไปแล้ว คุณสามารถใช้แอตทริบิวต์ 'a' ได้ดังต่อไปนี้
[root@tecmint tecmint]# chattr +a example.txt
[root@tecmint tecmint]# lsattr example.txt
-----a---------- example.txt
หลังจากตั้งค่าโหมดผนวกแล้ว สามารถเปิดไฟล์เพื่อเขียนข้อมูลในโหมดผนวกเท่านั้น คุณสามารถยกเลิกการตั้งค่าแอตทริบิวต์ผนวกได้ดังต่อไปนี้
[root@tecmint tecmint]# chattr -a example.txt
ตอนนี้ให้ลองแทนที่เนื้อหาที่มีอยู่แล้วในไฟล์ example.txt คุณจะได้รับข้อผิดพลาดแจ้งว่า 'ไม่อนุญาตให้ดำเนินการ'
[root@tecmint tecmint]# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted
ตอนนี้ให้ลองเพิ่มเนื้อหาใหม่ต่อท้ายไฟล์ที่มีอยู่ example.txt และยืนยัน
[root@tecmint tecmint]# echo "replace contain on file." >> example.txt
[root@tecmint tecmint]# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.
5. วิธีการรักษาความปลอดภัยไดเร็กทอรี
เพื่อรักษาความปลอดภัยทั้งไดเร็กทอรีและไฟล์ในนั้น เราใช้สวิตช์ '-R' (เรียกซ้ำ) ด้วยแฟล็ก '+i' พร้อมกับเส้นทางแบบเต็มของโฟลเดอร์
[root@tecmint tecmint]# chattr -R +i myfolder
หลังจากตั้งค่าแอตทริบิวต์แบบเรียกซ้ำแล้ว ให้ลองลบโฟลเดอร์และไฟล์ในนั้น
[root@tecmint tecmint]# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted
หากต้องการยกเลิกการตั้งค่าการอนุญาต เราใช้สวิตช์ '-R' (แบบเรียกซ้ำ) เดียวกันกับแฟล็ก '-i' พร้อมกับเส้นทางแบบเต็มของโฟลเดอร์
[root@tecmint tecmint]# chattr -R -i myfolder
แค่นั้นแหละ! หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์คำสั่ง chattr แฟล็ก และตัวเลือก ให้ใช้ man page