ค้นหาเว็บไซต์

5 คำสั่ง 'chattr' เพื่อสร้างไฟล์สำคัญที่ไม่เปลี่ยนรูป (ไม่สามารถเปลี่ยนแปลงได้) ใน Linux


chattr (เปลี่ยนคุณสมบัติ) คือยูทิลิตี้บรรทัดคำสั่ง Linux ที่ใช้ในการตั้งค่า/ยกเลิกการตั้งค่าคุณสมบัติบางอย่างให้กับไฟล์ในระบบ Linux เพื่อความปลอดภัยในการลบหรือแก้ไขไฟล์และโฟลเดอร์ที่สำคัญโดยไม่ตั้งใจ แม้ว่าคุณจะถูกบันทึกไว้ก็ตาม ในฐานะผู้ใช้รูท

ในระบบไฟล์ดั้งเดิมของ Linux เช่น ext2, ext3, ext4, btrfs ฯลฯ รองรับแฟล็กทั้งหมด แม้ว่าแฟล็กทั้งหมดจะไม่รองรับ FS ที่ไม่ใช่เจ้าของภาษาทั้งหมด ไม่สามารถลบหรือแก้ไขไฟล์/โฟลเดอร์ได้เมื่อตั้งค่าแอตทริบิวต์ด้วยคำสั่ง chattr แม้ว่าจะมีการอนุญาตแบบเต็มก็ตาม

สิ่งนี้มีประโยชน์มากในการตั้งค่าแอตทริบิวต์ในไฟล์ระบบเช่นไฟล์ passwd และ shadow ซึ่งมีข้อมูลของผู้ใช้อยู่

ไวยากรณ์ของ chattr
chattr [operator] [flags] [filename]
คุณสมบัติและแฟล็ก

ต่อไปนี้เป็นรายการคุณลักษณะทั่วไปและแฟล็กที่เกี่ยวข้องที่สามารถตั้งค่า/ยกเลิกการตั้งค่าได้โดยใช้คำสั่ง chattr

  1. หากเข้าถึงไฟล์ด้วยชุดแอตทริบิวต์ 'A' บันทึกเวลาจะไม่อัปเดต
  2. หากไฟล์ได้รับการแก้ไขด้วยชุดแอตทริบิวต์ 'S' การเปลี่ยนแปลงจะถูกอัพเดตพร้อมกันบนดิสก์
  3. ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 'a' สามารถเปิดได้เฉพาะในโหมดผนวกเพื่อเขียนเท่านั้น
  4. ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 'i' ซึ่งไม่สามารถแก้ไขได้ (ไม่เปลี่ยนรูป) หมายถึงไม่มีการเปลี่ยนชื่อ, ไม่มีการสร้างลิงค์สัญลักษณ์, ไม่มีการดำเนินการ, ไม่สามารถเขียนได้, มีเพียง superuser เท่านั้นที่สามารถยกเลิกการตั้งค่าแอตทริบิวต์ได้
  5. ไฟล์ที่มีแอตทริบิวต์ 'j' ถูกตั้งค่า ข้อมูลทั้งหมดจะถูกอัปเดตไปยังเจอร์นัล ext3 ก่อนที่จะอัปเดตเป็นไฟล์นั้นเอง
  6. ไฟล์ถูกตั้งค่าด้วยแอตทริบิวต์ 't' ไม่มีการผสานส่วนท้าย
  7. ไฟล์ที่มีแอตทริบิวต์ 'd' จะไม่มีตัวเลือกสำหรับการสำรองข้อมูลอีกต่อไปเมื่อเรียกใช้กระบวนการถ่ายโอนข้อมูล
  8. เมื่อไฟล์มีแอตทริบิวต์ 'u' ถูกลบ ข้อมูลจะถูกบันทึก ซึ่งจะทำให้ผู้ใช้สามารถขอยกเลิกการลบได้
ผู้ดำเนินการ
  1. + : เพิ่มแอตทริบิวต์ให้กับแอตทริบิวต์ที่มีอยู่ของไฟล์
  2. : ลบแอตทริบิวต์ของแอตทริบิวต์ที่มีอยู่ของไฟล์
  3. = : เก็บคุณลักษณะที่มีอยู่ซึ่งมีไฟล์ไว้

ที่นี่ เราจะสาธิตตัวอย่างคำสั่ง 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