Quản lý cấu hình /etc bằng etckeeper: Tấm lưới an toàn cho mọi SysAdmin

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Cơn ác mộng lúc 2 giờ sáng mang tên “Lỡ tay”

Kịch bản này chắc chắn không xa lạ: Bạn đang fix lỗi bảo mật trên con server Ubuntu 22.04 lúc nửa đêm. Mắt nhắm mắt mở, bạn sửa nhầm vài dòng trong /etc/ssh/sshd_config. Bạn lưu file, khởi động lại service và… bùm. Kết nối SSH bị ngắt. Bạn bị văng ra ngoài và không tài nào login lại được.

Lúc này, tim bạn đập nhanh vì không nhớ rõ mình đã xóa dòng nào hay gõ thừa dấu cách ở đâu. Nếu đây là code ứng dụng, một lệnh git checkout sẽ giải quyết mọi chuyện trong 3 giây. Vậy tại sao chúng ta không áp dụng Git cho toàn bộ thư mục /etc? Đó là lý do etckeeper ra đời.

Tôi từng mất hơn 4 tiếng gõ lại cấu hình Network Bonding từ con số 0 chỉ vì quên backup file gốc. Sau sự cố đó, etckeeper trở thành công cụ đầu tiên tôi cài đặt trên mọi server mới, từ môi trường staging đến production.

Triển khai nhanh trong 2 phút

Đừng đợi đến khi thảm họa xảy ra mới đi tìm giải pháp. Công cụ này cực kỳ nhẹ và không gây ảnh hưởng đến hiệu năng hệ thống.

Bước 1: Cài đặt

Với Ubuntu/Debian:

sudo apt update && sudo apt install etckeeper git -y

Với RHEL/CentOS/AlmaLinux:

sudo yum install epel-release -y
sudo yum install etckeeper git -y

Bước 2: Khởi tạo

Thông thường etckeeper sẽ tự cấu hình sau khi cài. Tuy nhiên, bạn nên chạy lệnh sau để đảm bảo mọi thứ sẵn sàng:

sudo etckeeper init
sudo etckeeper commit "Khởi tạo: Lưu cấu hình gốc hệ thống"

Mọi thay đổi trong /etc từ giờ đã nằm trong tầm kiểm soát của Git.

Tại sao không dùng Git thuần cho nhanh?

Nhiều anh em sẽ nghĩ: “Cần gì etckeeper, cứ vào /etc rồi git init là xong”. Thực tế, cách làm này chứa đựng hai rủi ro kỹ thuật rất lớn:

  1. Mất Metadata (Quyền sở hữu): Git mặc định không lưu thông tin User/Group (UID/GID). Nếu bạn khôi phục file /etc/shadow bằng Git thuần, permission có thể bị sai lệch. Điều này khiến hệ thống không thể đọc file mật khẩu, gây lỗi login toàn diện. etckeeper xử lý việc này bằng cách lưu metadata vào file .etckeeper.
  2. Thư mục trống: Linux cần một số thư mục trống trong /etc để hoạt động, nhưng Git lại bỏ qua chúng. etckeeper đảm bảo các cấu trúc này được giữ nguyên.
  3. Tự động hóa hoàn toàn: Đây là tính năng đáng giá nhất. Mỗi khi bạn chạy apt install hoặc yum update, etckeeper sẽ tự động commit các thay đổi cấu hình do package mới tạo ra. Bạn sẽ biết chính xác việc cài thêm một phần mềm đã “chọc” vào những file nào của hệ thống.

Kiểm soát và khôi phục trong thực tế

Truy cứu trách nhiệm

Sáng sớm lên văn phòng, bạn thấy Nginx báo lỗi 502. Bạn nghi ngờ đồng nghiệp vừa chỉnh sửa gì đó vào chiều qua? Hãy kiểm tra ngay:

cd /etc
sudo etckeeper vcs log

Lệnh này sẽ liệt kê chi tiết: ai đã sửa, sửa lúc nào và sửa nội dung gì.

So sánh thay đổi (Diff)

Bạn vừa chỉnh sửa /etc/fstab để mount ổ đĩa cứng 10TB mới nhưng chưa dám reboot? Hãy kiểm tra lại những gì mình đã thay đổi so với bản ổn định gần nhất:

sudo etckeeper vcs diff fstab

Khôi phục tức thì

Nếu lỡ tay xóa mất file cấu hình quan trọng, đừng hoảng loạn. Hãy dùng lệnh:

# Đưa một file cụ thể về trạng thái trước đó
sudo etckeeper vcs checkout fstab

# Hoặc quay ngược toàn bộ thư mục /etc về một thời điểm (commit ID) nhất định
sudo etckeeper vcs checkout [commit_id] .

Nâng cao: Đẩy cấu hình lên Remote Repository

Lưu lịch sử tại chỗ là chưa đủ. Nếu ổ cứng server hỏng, bạn sẽ mất trắng. Giải pháp là đẩy /etc lên một Private Repo trên GitLab hoặc GitHub. Lưu ý: Tuyệt đối không để Public vì /etc chứa hash mật khẩu và key nhạy cảm.

cd /etc
sudo git remote add origin [email protected]:user/my-server-etc.git
sudo git push origin master

Khi server gặp sự cố phần cứng, bạn chỉ cần dựng máy mới và kéo cấu hình cũ về để đối chiếu. Việc này tiết kiệm đến 90% thời gian setup lại môi trường.

Kinh nghiệm thực chiến

  • Tối ưu .gitignore: Một số file như ld.so.cache thay đổi liên tục nhưng không có giá trị lịch sử. Hãy thêm chúng vào /etc/.gitignore để tránh làm nhiễu nhật ký commit.
  • Cấu hình Email: Bạn có thể thiết lập để etckeeper gửi email thông báo mỗi khi có tự động commit trong file /etc/etckeeper/etckeeper.conf.
  • Đừng lạm dụng: Dù etckeeper rất mạnh, hãy luôn nhớ commit thủ công với message rõ ràng sau khi bạn hoàn thành một thay đổi quan trọng. Đừng chỉ dựa vào các bản auto-commit của hệ thống.

Lời kết

Tại công ty cũ của tôi, việc quản lý hơn 50 server từng là một cực hình. Từ khi áp dụng etckeeper, mọi thay đổi đều minh bạch. Nó không chỉ là công cụ quản lý phiên bản, mà còn là “bảo hiểm nghề nghiệp” cho chính bạn.

Việc cài đặt chỉ mất 60 giây nhưng có thể cứu bạn khỏi hàng giờ debug trong vô vọng. Hãy thử cài lên một server test, sửa hỏng vài file rồi dùng checkout để tận hưởng cảm giác an tâm khi mọi thứ quay về trạng thái hoàn hảo ban đầu.

Share: