Các lệnh chattr và lsattr cho phép người dùng thiết lập và kiểm tra các thuộc tính đặc biệt (extended attributes) trên hệ thống tập tin Linux — những thuộc tính không thể thay đổi thông qua các quyền chuẩn như chmod hay chown. Chúng hoạt động dựa trên cơ chế bảo vệ cấp hạt nhân (kernel-level), thường được sử dụng để tăng cường an toàn dữ liệu hoặc hỗ trợ các kịch bản vận hành đặc thù.
Các thuộc tính phổ biến
Dưới đây là danh sách một số cờ thuộc tính quan trọng, cùng chức năng tương ứng:
a: Chỉ cho phép ghi nối tiếp (append-only). Không thể ghi đè hoặc xóa nội dung hiện có.i: Đặt trạng thái "bất khả xâm phạm" — tệp hoặc thư mục không thể sửa đổi, xóa, đổi tên hoặc liên kết cứng.c: Tự động nén dữ liệu khi lưu vào đĩa (yêu cầu hỗ trợ từ hệ thống tập tin).s: Xóa hoàn toàn dữ liệu khi tệp bị xoá (overwritten with zeros trước khi giải phóng khối).u: Hỗ trợ khôi phục sau khi xóa (giữ lại dữ liệu trên đĩa cho đến khi bị ghi đè).D: Đảm bảo tất cả các thay đổi được ghi đồng bộ ngay lập tức lên đĩa (không cache).S: Ghi đồng bộ từng lần cập nhật (tương tựD, nhưng áp dụng cho từng thao tác nhỏ hơn).d: Loại trừ khỏi các hoạt động sao lưu kiểudump.
Cú pháp cơ bản
chattr [tùy_chọn] [cờ] <tệp>
lsattr [tùy_chọn] <tệp>
Tùy chọn chính
chattr:
-R: Áp dụng đệ quy lên toàn bộ cây thư mục.+i,-a,=s: Lần lượt thêm, loại bỏ hoặc gán duy nhất một cờ.-v <số_version>: Thiết lập phiên bản inode (dùng trong một số hệ thống tập tin nâng cao).
lsattr:
-a: Hiển thị cả tệp ẩn.-R: Liệt kê đệ quy.-E: Hiển thị giá trị thực tế của thuộc tính mở rộng (nếu có).-D: Chỉ hiển thị tên thuộc tính mở rộng (không bao gồm giá trị).
Ví dụ minh họa
Đặt tệp audit.log ở chế độ chỉ nối:
sudo chattr +a /var/log/audit.log
lsattr /var/log/audit.log
# Output: -----a---------- /var/log/audit.log
Khi đó, các lệnh như echo "msg" > audit.log sẽ thất bại, nhưng echo "msg" >> audit.log vẫn thành công.
Khóa vĩnh viễn một cấu hình quan trọng:
sudo chattr +i /etc/nginx/nginx.conf
sudo rm /etc/nginx/nginx.conf
# Output: rm: cannot remove '/etc/nginx/nginx.conf': Operation not permitted
Để gỡ khóa, cần chạy:
sudo chattr -i /etc/nginx/nginx.conf
Lưu ý vận hành
Một số hệ thống tập tin (như FAT32, exFAT, NFS client mount) không hỗ trợ thuộc tính mở rộng. Khi gọi lsattr trên các đối tượng như vậy, bạn có thể gặp thông báo lỗi Operation not supported. Ngoài ra, việc thiết lập cờ i hoặc a có thể gây ảnh hưởng nghiêm trọng đến ứng dụng nếu không hiểu rõ ngữ cảnh sử dụng — ví dụ: một tiến trình ghi log cố gắng ghi đè tệp đã bị đặt +a sẽ thất bại với mã lỗi EPERM.