Hướng dẫn CHMOD hàng loạt cho file và thư mục bằng lệnh find
Cách CHMOD hàng loạt bằng lệnh find là gì?
Để CHMOD hàng loạt phân tách riêng biệt file và thư mục trên Linux, hãy dùng lệnh find. Cụ thể: chạy find /path/to/dir -type f -exec chmod 644 {} \; để phân quyền cho tất cả các file và find /path/to/dir -type d -exec chmod 755 {} \; cho tất cả các thư mục.
Khi vận hành website trên các hệ thống VPS Linux hoặc máy chủ vật lý, việc thiết lập đúng quyền hạn (permission) cho file và thư mục là bắt buộc để tránh lỗi HTTP 500 và các lỗ hổng bảo mật nghiêm trọng. Việc làm thủ công rất mất thời gian, do đó lệnh find kết hợp với chmod là công cụ đắc lực nhất cho mọi Sysadmin.
1. CHMOD trên Linux là gì?
CHMOD (Change Mode) là câu lệnh trong hệ điều hành Linux/Unix dùng để thay đổi quyền truy cập (permission) của một tệp tin hoặc thư mục. Có 3 nhóm quyền cơ bản mà bạn cần nắm vững:
- Read (r - 4): Quyền đọc nội dung file hoặc xem danh sách các file trong thư mục.
- Write (w - 2): Quyền chỉnh sửa, thay đổi hoặc xóa nội dung file/thư mục.
- Execute (x - 1): Quyền chạy file như một chương trình (script) hoặc quyền truy cập (cd) vào một thư mục.
2. Cách kiểm tra quyền file trên Linux
Trước khi thay đổi, bạn nên kiểm tra trạng thái phân quyền hiện tại của mã nguồn bằng lệnh liệt kê chi tiết (ls -l) hoặc lệnh stat:
ls -la /home/username/public_html
3. Tại sao nên dùng CHMOD 644 cho file và 755 cho thư mục?
Trong môi trường Web Hosting và VPS, cấu trúc 644/755 là tiêu chuẩn bảo mật "vàng":
- Đối với File (644): Chủ sở hữu (Owner) có quyền Đọc & Ghi (6). Nhóm người dùng (Group) và Người lạ (Others) chỉ có quyền Đọc (4). Điều này ngăn chặn hacker chèn mã độc vào file mã nguồn (như PHP, HTML) của bạn.
- Đối với Thư mục (755): Chủ sở hữu có toàn quyền Đọc, Ghi & Thực thi (7). Người khác chỉ có quyền Đọc và Thực thi (5) để Web Server (như Nginx/Apache) có thể truy cập và đọc dữ liệu bên trong thư mục mà không thể xóa thư mục đó.
4. Cách CHMOD hàng loạt file và thư mục bằng lệnh find
Dưới đây là các lệnh find thực tiễn nhất. Lưu ý: Hãy thay đổi /home/username/public_html thành đường dẫn thực tế trên máy chủ của bạn.
Cách 1: Thiết lập lại toàn bộ quyền hạn chuẩn
Thao tác này giúp bạn dọn dẹp và đưa toàn bộ mã nguồn về đúng chuẩn phân quyền, tách biệt hoàn toàn giữa file và thư mục.
find /home/username/public_html -type f -exec chmod 644 {} \;
find /home/username/public_html -type d -exec chmod 755 {} \;
Cách 2: Sửa các quyền hạn sai (Insecure permissions)
Thay vì quét toàn bộ, bạn có thể ra lệnh cho find chỉ tìm những file đang bị cấu hình sai (ví dụ: 666 hoặc 777 nguy hiểm) để sửa lại nhằm tiết kiệm tài nguyên hệ thống.
Sửa file từ 666 hoặc 777 về 644:
find /home/username/public_html -type f \( -perm 0777 -o -perm 0666 \) -exec chmod 644 {} \;
Sửa thư mục từ 777 về 755:
find /home/username/public_html -type d -perm 0777 -exec chmod 755 {} \;
Cách 3: Phân quyền cho tất cả người dùng (All users)
Nếu bạn là quản trị viên máy chủ (Root) và muốn áp dụng chuẩn bảo mật cho toàn bộ các tài khoản người dùng nằm trong /home, hãy sử dụng ký tự đại diện (wildcard) *.
Áp dụng cho tất cả thư mục:
find /home/*/public_html -type d -exec chmod 755 {} \;
Áp dụng cho tất cả file:
find /home/*/public_html -type f -exec chmod 644 {} \;
5. Cách CHMOD đệ quy toàn bộ bằng lệnh -R
Nếu bạn không cần tách biệt quyền giữa file và thư mục (ví dụ muốn set toàn quyền 777 cho một thư mục cache cụ thể), bạn không cần dùng find mà có thể sử dụng cờ -R (Recursive) của chính lệnh chmod:
chmod -R 777 /home/username/public_html/wp-content/cache/
6. Lỗi thường gặp và Cảnh báo quan trọng
Luôn đảm bảo bạn kết thúc lệnh -exec bằng chuỗi {} \; (phải có dấu gạch chéo ngược để escape dấu chấm phẩy trong Linux shell). Việc thiếu dấu này sẽ gây ra lỗi "find: missing argument to -exec".
Các lỗi phổ biến khác bạn có thể gặp:
- Operation not permitted (Permission denied): Xảy ra khi bạn không phải là chủ sở hữu của file/thư mục đó. Hãy sử dụng quyền
sudoở đầu câu lệnh. - CHMOD sai hệ thống thư mục gốc: Tuyệt đối không chạy lệnh
find / -exec.... Việc CHMOD sai toàn bộ phân vùng gốc (/) sẽ làm hỏng hoàn toàn hệ điều hành Linux.
7. Kết luận
Sử dụng lệnh find kết hợp với -exec chmod là giải pháp chuyên nghiệp, hiệu quả và mạnh mẽ nhất để xử lý cấu trúc quyền hạn phân mảnh trên Linux. Việc duy trì chuẩn 644/755 là hàng rào bảo vệ vững chắc nhất giúp website của bạn chống lại các kỹ thuật chèn mã độc cục bộ (Local Attack).
Bạn muốn một môi trường được thiết lập bảo mật chuẩn hóa 100% ngay từ đầu? Tùy thuộc vào yêu cầu hiệu suất, VietHosting luôn có giải pháp hạ tầng sẵn sàng cho doanh nghiệp.
Các hướng dẫn kỹ thuật khác
Khám phá thêm các hướng dẫn kỹ thuật, thủ thuật quản trị hệ thống và bài viết phân tích giúp tối ưu hiệu năng và vận hành VPS hoặc máy chủ hiệu quả.