Chiều hôm thứ 6 vừa rồi, tôi ssh vào con server quen thuộc, review một số thứ và dọn dẹp vài file cũ. Gõ
rm abcdxyz.log
cái rẹt. Nhưng thay vì im lặng làm việc như mọi lần, terminal lại trả về:
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Tôi đang dùng user root. Nó không bị readonly, không bị process nào giữ và kể cả bạn có thử
chmod 777
, chown
, kill -9
, TẤT CẢ ĐỀU VÔ DỤNG.Một câu lệnh nảy ra ngay trong đầu tôi sau đó mà câu lệnh này cũng đã từ lâu rồi chưa dùng lại câu lệnh có thể khiến root “chịu luôn”, chính là: chattr. Và đúng như vậy cậu em trong team đang dò log của ngày cũ nên đã bật mode “Bất khả xâm phạm”. Thấy cũng khá hữu ích nên viết bài này tới anh em.
Vậy chattr là gì?
chattr
là viết tắt của “change attribute”. Nó không can thiệp vào permission (rwx), mà chơi ở tầng sâu hơn: các flag đặc biệt trong hệ thống file. Khi bạn gắn cờ +i
cho một file, file đó trở thành immutable – không sửa được, không xóa được, không đổi tên được. Kể cả bạn là root.Nó giống như một chiếc niêm phong trong thế giới Linux. Một khi đã dán tem “không được đụng”, mọi thao tác phá hoại sẽ bị kernel từ chối thẳng mặt. Chính xác rồi đấy tất cả luôn.
Làm thử cho vui
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Hay sửa:
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Muốn làm gì cũng phải… xin phép kernel bằng cách tháo cờ:
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Kiểm tra xem file có bị dính +i hay không
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Output có thể trông như thế này:
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Dấu
i
chính là thứ khiến bạn vò đầu bứt tai nãy giờ.Những flag mạnh mẽ khác của chattr
Flag | Ý nghĩa ngắn gọn |
---|---|
+i | Immutable – không đụng được gì hết |
+a | Append only – chỉ được ghi thêm, không xóa/sửa nội dung |
+A | Không cập nhật thời gian truy cập |
+d | Không backup file khi dùng lệnh dump |
Thực tế thì
+i
và +a
là hai flag phổ biến nhất. Mỗi cái có use-case riêng rất rõ ràng.Dùng chattr trong thực tế như thế nào?
Thật sự là có khá nhiều cách sử dụng trong thực tế cái này tùy vào cách nghĩ của mỗi người thôi còn bản chất mình đã nói hết ở trên rồi. Anh em dùng sao vào mục đích gì là quyết định của anh em ở đây mình gợi ý để anh em tham khảo nhé.1. Chống tool ghi đè file config
Bạn cấu hình DNS trong/etc/resolv.conf
, nhưng cứ mỗi lần kết nối VPN hoặc DHCP renew là bị ghi đè mất. Khó chịu?
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
2. Bảo vệ ~/.ssh/authorized_keys
Bạn dùng key để SSH vào server. Nhưng kẻ xấu (hoặc một script ngu ngốc nào đó) có thể xóa mất file này.
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
3. Log chỉ cho phép ghi thêm
Bạn muốn đảm bảo log không bị sửa, không bị xóa:
Mã:
Bạn không có quyền xem nội dung này. Đăng nhập hoặc Đăng ký.
Chỉ được append. Muốn “xoá dấu vết” trong log? Không có mùa thu nào luôn
Điều gì xảy ra khi dán +i vào file?
- Không thể
rm
,mv
,truncate
,echo
,nano
,vim
lên file đó. - Không thể rename file.
- Không thể tạo hardlink đến file.
- Cả backup script cũng có thể fail nếu logic là xóa file rồi tạo lại.
+i
, bạn sẽ rất cay cú khi sửa file đó hoài không được”.Có “phạm vi ngoài vòng” nào không?
Không. Kernel không quan tâm bạn là root hay ai – nếu flagi
còn đó, thì rm
cũng vô dụng.Chỉ có cách duy nhất là khi bạn tháo flag đi (
chattr -i
) thì mọi thứ mới trở lại như cũ.Một vài lưu ý quan trọng
- Chỉ dùng
chattr
trên các filesystem hỗ trợ (ext2, ext3, ext4, XFS…). - Tránh gắn
+i
vào thư mục system, trừ khi bạn hiểu rõ mình đang làm gì. - Ghi lại vào runbook: những file nào đã bị gắn cờ, ai gắn, và vì sao.
Tạm kết
chattr là một công cụ không mới, nhưng rất nhiều admin chưa từng chạm vào. Trong khi đó, chỉ cần một flag +i thôi cũng đủ cứu bạn khỏi nhiều rắc rối: từ DNS bị ghi đè, log bị xóa, đến user nào đó “lỡ tay” xóa nhầm file hệ thống.Và điều thú vị nhất? Nó khiến bạn nhận ra rằng: trên Linux, đôi khi “quyền lực tối cao” không nằm ở root, mà nằm ở những cái cờ nho nhỏ bị giấu kỹ trong inode.
Bạn muốn bảo vệ server của mình tốt hơn? Đừng chỉ học
chmod
hay chown
. Hãy nhớ rằng:Có những file chỉ nên tồn tại theo đúng cách bạn tạo ra nó. Và chattr là con dấu bảo vệ cuối cùng.
Nếu bạn thấy bài viết hữu ích, đừng quên chia sẻ cho anh em và thử troll xem anh em trong team biết không nhé
Nguồn bài viết: devops