5 ví dụ lệnh chattr trên Centos / Ubuntu / Debian / Fedora

Lệnh chattr (Change Attribute) là một tiện ích dòng lệnh được sử dụng để thiết lập/gỡ bỏ các thuộc tính cho một tệp trong hệ thống Linux. Lệnh giúp bảo vệ khỏi việc xóa hoặc sửa đổi tình cờ các tệp và thư mục quan trọng, ngay cả khi bạn đăng nhập với quyền root. Điều này rất hữu ích để thiết lập các thuộc tính trong các tệp hệ thống như passwd và shadow, nơi chứa thông tin người dùng.

Cú pháp của lệnh chattr:

# chattr [operator] [flags] [filename]

Các thuộc tính và cờ sử dụng chung với lệnh chattr

Danh sách các thuộc tính thông thường và các cờ liên quan được thiết lập/gỡ bỏ bằng lệnh chattr.

  • Nếu một tệp được truy cập với thuộc tính 'A' được thiết lập, bản ghi atime của nó sẽ không được cập nhật.
  • Nếu một tệp được sửa đổi với thuộc tính 'S' được thiết lập, các thay đổi được cập nhật đồng bộ trên đĩa.
  • Một tệp được thiết lập với thuộc tính 'a' chỉ có thể mở trong chế độ nối dữ liệu để ghi.
  • Một tệp được thiết lập với thuộc tính 'i' không thể được sửa đổi (không thể đổi tên, không thể tạo liên kết tượng trưng, không thể thực thi, không thể ghi, chỉ có siêu người dùng có thể gỡ bỏ thuộc tính).
  • Một tệp với thuộc tính 'j' được thiết lập, tất cả thông tin của nó được cập nhật vào nhật ký ext3 trước khi được cập nhật vào tệp chính thức.
  • Một tệp được thiết lập với thuộc tính 't', không có việc gộp các đoạn cuối.
  • Một tệp với thuộc tính 'd' sẽ không còn là ứng cử viên để sao lưu khi quá trình dump được chạy.
  • Khi một tệp có thuộc tính 'u' bị xóa, dữ liệu của nó được lưu lại. Điều này cho phép người dùng yêu cầu khôi phục nó.

Toán tử

  • +: Thêm thuộc tính vào thuộc tính hiện có của các tệp.
  • -: Gỡ bỏ thuộc tính khỏi thuộc tính hiện có của các tệp.
  • = : Giữ các thuộc tính hiện có của các tệp.

Ở đây, một số ví dụ về lệnh chattr để thiết lập/gỡ bỏ thuộc tính cho tệp và thư mục.

Cách thêm thuộc tính vào tệp để bảo vệ khỏi việc xóa

Sử dụng thư mục "demo" và tệp "important_file.conf". Trước khi thiết lập thuộc tính, đảm bảo kiểm tra xem các tệp hiện có có thuộc tính nào đã được thiết lập bằng lệnh 'ls -l'. Bạn sẽ thấy kết quả, hiện tại không có thuộc tính nào được thiết lập. 

# 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

Để thiết lập thuộc tính, sử dụng dấu + và để gỡ bỏ sử dụng dấu - với lệnh chattr. Vì vậy, thiết lập bit không thể thay đổi (+i) trên các tệp để ngăn ai đó xóa tệp, ngay cả người dùng root cũng không có quyền xóa. 

# chattr +i demo/
# chattr +i important_file.conf

Lưu ý: Bit không thể thay đổi (+i) chỉ có thể được thiết lập bởi người dùng siêu người dùng (ví dụ: root) hoặc người dùng có quyền sudo mới có thể thiết lập được.

Sau khi thiết lập bit không thể thay đổi, kiểm tra thuộc tính bằng lệnh 'lsattr'.

# lsattr
----i----------- ./demo
----i----------- ./important_file.conf

Bây giờ, hãy thử xóa một cách bằng cưỡng, đổi tên hoặc thay đổi quyền truy cập, nó sẽ thông báo "Không cho phép thực hiện". 

# rm -rf demo/
rm: cannot remove âdemo/â: Operation not permitted
# mv demo/ demo_alter
mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
# chmod 755 important_file.conf
chmod: changing permissions of âimportant_file.confâ: Operation not permitted

Lệnh chattr gỡ bỏ thuộc tính trên tệp

Trong ví dụ trên, chúng ta đã chỉ ra cách thiết lập thuộc tính để bảo vệ và ngăn chặn tệp bị xóa một cách tình cờ. Trong ví dụ này, chúng ta sẽ xem cách thiết lập lại (gỡ bỏ thuộc tính) quyền và cho phép thay đổi tệp bằng cờ -i.

# chattr -i demo/ important_file.conf

Sau khi thiết lập lại quyền, kiểm tra trạng thái không thể thay đổi của tệp bằng lệnh 'lsattr'. 

# lsattr
---------------- ./demo
---------------- ./important_file.conf

Kết quả trên: cờ '-i' đã được gỡ bỏ, nghĩa là bạn có thể xóa tất cả các tệp và thư mục nằm trong thư mục "tecmint".

# rm -rf *
# ls -l
total 0

Bảo vệ các tệp /etc/passwd và /etc/shadow

Đặt thuộc tính bất biến trên các tệp /etc/passwd hoặc /etc/shadow sẽ làm cho chúng an toàn khỏi việc xóa hoặc thay đổi không cẩn thận. Bên cạnh cũng sẽ vô hiệu hóa việc tạo người dùng. 

# chattr +i /etc/passwd
# chattr +i /etc/shadow

Bây giờ thử tạo người dùng hệ thống mới, bạn sẽ nhận được thông báo lỗi 'không thể mở /etc/passwd'.

# useradd tecmint
useradd: cannot open /etc/passwd

Cách này giúp đặt quyền bất biến cho các tệp quan trọng hoặc các tệp cấu hình hệ thống  để ngăn khỏi việc xóa.

Gắn thêm dữ liệu mà không thay đổi dữ liệu hiện có trên một tệp

Giả sử, bạn muốn cho phép mọi người chỉ gắn thêm dữ liệu vào một tệp mà không thay đổi hoặc sửa đổi dữ liệu đã nhập. Sử dụng thuộc tính 'a' như sau. 

# chattr +a example.txt
# lsattr example.txt
-----a---------- example.txt

Sau khi thiết lập chế độ gắn thêm, tệp được mở để ghi dữ liệu ở chế độ gắn thêm duy nhất. Bạn bỏ thiết lập thuộc tính gắn thêm: 

# chattr -a example.txt

Thử thay thế nội dung đã tồn tại trên tệp example.txt, bạn sẽ nhận được thông báo lỗi 'Không được phép thực hiện'. 

# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

Thử gắn thêm nội dung mới vào tệp example.txt đã tồn tại và xác minh.

# echo "replace contain on file." >> example.txt
# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.

Bảo vệ các thư mục

Để bảo vệ toàn bộ thư mục và các tệp của nó, sử dụng công cụ '-R' (đệ quy) cùng với cờ '+i' và đường dẫn đầy đủ của thư mục. 

# chattr -R +i myfolder

Sau khi thiết lập thuộc tính đệ quy, thử xóa thư mục và các tệp của nó. 

# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted

Để hủy quyền, sử dụng công cụ '-R', cờ '-i' với đường dẫn đầy đủ của thư mục.

# chattr -R -i myfolder