2026年11月12日
2026年11月12日
Quyền tệp WordPress khuyến nghị: thư mục 755, tệp 644, wp-config.php
Đây là phiên bản được bản địa hóa từ bài viết gốc tiếng Nhật. Đọc bài gốc tiếng Nhật
Quyền tệp (file permission) của WordPress về cơ bản là 755 cho thư mục và 644 cho tệp. wp-config.php chứa thông tin kết nối cơ sở dữ liệu nên cần hạn chế người đọc chặt hơn. Không chỉ nhìn các con số, mà hãy kiểm tra cả ai là chủ sở hữu tệp và PHP đang chạy dưới người dùng nào, như vậy bạn sẽ tránh được cả rò rỉ thông tin lẫn lỗi "không cập nhật được". Các giá trị khuyến nghị trong bài là nội dung đã đối chiếu với tài liệu chính thức của WordPress "Hardening WordPress" vào tháng 11/2026.
Cách đọc các con số quyền
Quyền được biểu diễn cho ba nhóm "chủ sở hữu, nhóm, những người khác", mỗi nhóm bằng tổng của quyền đọc (4), ghi (2) và thực thi (1).
| Giá trị | Ký hiệu | Ý nghĩa |
|---|---|---|
| 755 | rwxr-xr-x | Chủ sở hữu đọc, ghi và vào được bên trong; những người khác chỉ đọc và vào được bên trong (dành cho thư mục) |
| 644 | rw-r--r-- | Chủ sở hữu đọc và ghi, những người khác chỉ đọc (dành cho tệp) |
| 640 | rw-r----- | Chủ sở hữu đọc và ghi, nhóm chỉ đọc, những người khác không làm được gì |
| 600 | rw------- | Chỉ chủ sở hữu đọc và ghi được |
| 440 / 400 | r--r----- / r-------- | Không ai ghi được; chỉ chủ sở hữu (và nhóm) đọc được |
Quyền "thực thi (x)" của thư mục là quyền vào bên trong thư mục đó. Nếu bỏ x khỏi thư mục, các tệp bên trong sẽ không đọc được.
Giá trị khuyến nghị cho WordPress
| Đối tượng | Giá trị khuyến nghị | Ghi chú |
|---|---|---|
| Thư mục | 755 (750 nếu dùng chung máy chủ và không muốn người khác thấy) | Ngay cả khi cập nhật tự động chính thức, thư mục cũng được đồng bộ về 755 |
| Tệp | 644 (640 trong trường hợp như trên) | Ngay cả khi cập nhật tự động chính thức, tệp cũng được đồng bộ về 644 |
| wp-config.php | Hạn chế để chỉ bạn và máy chủ Web đọc được | Tài liệu chính thức nói "nói chung là 400 hoặc 440". Nếu môi trường chạy PHP bằng cùng người dùng với chủ sở hữu tệp thì 600 hoặc 400 vẫn chạy được |
| .htaccess | 644 | Nếu bạn để WordPress ghi lại tệp khi lưu thiết lập đường dẫn tĩnh (Permalinks), người dùng chạy PHP phải ghi được |
| wp-content/uploads | Thư mục 755, tệp 644 | Hãy đặt chủ sở hữu sao cho người dùng chạy PHP ghi được |
Bạn không cần đặt 777 (ai cũng ghi được). Trên máy chủ dùng chung, nó có thể để người dùng khác trên cùng máy chủ ghi đè tệp của bạn.
Tùy dịch vụ hosting, nhà cung cấp có thể tự quy định giá trị khuyến nghị riêng (vì cách chạy PHP khác nhau theo từng máy chủ). Nếu hướng dẫn của máy chủ bạn thuê có ghi giá trị, hãy ưu tiên theo đó.
Cách nghĩ về chủ sở hữu
Theo giải thích chính thức, tệp thuộc sở hữu của tài khoản người dùng của chính bạn và được đặt để bạn ghi được. Chỉ những tệp WordPress cần ghi (uploads, theme khi dùng trình chỉnh sửa theme, v.v.) mới cần khớp chủ sở hữu hoặc nhóm để người dùng chạy máy chủ Web (PHP) ghi được.
Nếu đặt toàn bộ thuộc về người dùng của máy chủ Web, như chown -R www-data:www-data, thì PHP có thể ghi đè mọi tệp. Khi một lỗ hổng plugin bị khai thác, thiệt hại dễ lan rộng, nên hãy xem hiện trạng trước rồi mới quyết định.
Việc khi cập nhật plugin hoặc core bị yêu cầu "thông tin kết nối (tên máy chủ, tên người dùng, mật khẩu FTP)" phần lớn là do chủ sở hữu không khớp. WordPress chỉ chọn cách ghi trực tiếp vào tệp khi chủ sở hữu của tệp do PHP tạo ra trùng với chủ sở hữu của các tệp WordPress. Nếu khác nhau, nó yêu cầu cập nhật qua FTP. Đừng mở rộng quyền lên 777, mà hãy khớp lại chủ sở hữu để sửa.
Kiểm tra thiết lập hiện tại
Vào thư mục WordPress qua SSH và kiểm tra giá trị cùng chủ sở hữu bằng các lệnh sau. Hãy sửa đường dẫn cho phù hợp với môi trường của bạn.
cd /var/www/html
# Giá trị quyền, chủ sở hữu và nhóm của wp-config.php
stat -c '%a %U:%G %n' wp-config.php
# Tìm các tệp và thư mục mà người dùng khác ghi được
find . -perm -o=w ! -type l
# Tìm tệp PHP trong uploads (bình thường sẽ không có)
find wp-content/uploads -type f -name '*.php'
Người dùng chạy PHP khi truy cập qua Web hãy kiểm tra trong cấu hình máy chủ (như user của pool PHP-FPM) hoặc hướng dẫn của máy chủ thuê. Nó không nhất thiết trùng với người dùng bạn đăng nhập qua SSH.
Nếu trong uploads có tệp PHP lạ, hãy nghi ngờ bị can thiệp và ghi lại ngày giờ cũng như nội dung tệp trước khi xóa.
Sửa quyền hàng loạt
Chạy trong thư mục WordPress. Hãy sao lưu trước khi chạy.
cd /var/www/html
# Đồng bộ thư mục về 755 và tệp về 644
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# Hạn chế wp-config.php (ví dụ cho môi trường PHP chạy bằng chủ sở hữu tệp)
chmod 600 wp-config.php
Hãy chọn giá trị của wp-config.php theo môi trường như sau.
- PHP chạy bằng cùng người dùng với chủ sở hữu tệp (nhiều hosting dùng chung, PHP-FPM theo từng người dùng): 600 hoặc 400
- Chủ sở hữu là tài khoản của bạn và máy chủ Web đọc với tư cách nhóm: dùng 640 hoặc 440 và đặt nhóm là nhóm của máy chủ Web
# Ví dụ: chủ sở hữu là bạn, nhóm là máy chủ Web (www-data) và đặt 640
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php
Sau khi thiết lập, hãy mở site và trang quản trị để xác nhận hiển thị và đăng nhập được. Nếu hiện màn hình trắng hoặc lỗi, nghĩa là PHP không đọc được wp-config.php. Hãy trả giá trị về 644 rồi xem lại chủ sở hữu và nhóm.
Nếu đặt 400 hoặc 440, các plugin ghi vào wp-config.php (như plugin ghi thiết lập cache) sẽ thất bại. Chỉ khi cấu hình những plugin đó, hãy tạm thời cho phép ghi.
Không để wp-config.php bị đọc từ Web
Khi PHP chạy bình thường, dù truy cập wp-config.php bằng trình duyệt thì nội dung cũng không hiển thị. Để phòng trường hợp PHP ngừng chạy làm lộ mã nguồn, hãy từ chối truy cập ở cả phía máy chủ Web. Với Apache 2.4, hãy viết đoạn sau vào .htaccess trong thư mục đặt WordPress (Order Deny,Allow / Deny from all cũ là cách viết của Apache 2.2).
<Files "wp-config.php">
Require all denied
</Files>
Các bước chi tiết được giải thích trong "Thiết lập từ chối truy cập vào wp-config.php".
Bản thân .htaccess đã bị từ chối truy cập theo thiết lập chuẩn của Apache (<Files ".ht*"> trong httpd.conf).
Theo giải thích chính thức, bạn cũng có thể chuyển wp-config.php lên một cấp so với thư mục đặt WordPress. WordPress sẽ tìm ở thư mục cấp trên nếu không có wp-config.php trong cùng thư mục. Tuy nhiên, tài liệu chính thức cũng đề cập đến ý kiến cho rằng hiệu quả nhỏ, và việc làm sai có thể gây nguy hiểm ngược lại. Khi chuyển, hãy chắc chắn thư mục cấp trên không phải là thư mục công khai.
Không cho chạy PHP trong uploads
uploads là thư mục WordPress ghi vào, nên là nơi dễ bị tấn công đặt tệp vào. Nếu không cho PHP chạy ở đây, thì dù tệp bị đặt vào cũng không hoạt động.
Với Apache 2.4, hãy tạo wp-content/uploads/.htaccess và viết nội dung sau.
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
Để dùng Require trong .htaccess, phía máy chủ phải cho phép bằng AllowOverride. Nếu không được cho phép, sẽ gặp lỗi 500 hoặc thiết lập bị bỏ qua. Sau khi viết xong, hãy mở một URL PHP không tồn tại như https://example.com/wp-content/uploads/test.php và xác nhận nhận được 403 (nếu vẫn là 404 thì thiết lập chưa có hiệu lực).
Với Nginx, trong khối server, hãy đặt đoạn sau trước location ~ \.php$ dùng để xử lý PHP. Lý do là các location dạng biểu thức chính quy được đối chiếu lần lượt từ trên xuống và cái khớp đầu tiên sẽ được dùng.
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
Sau khi đổi cấu hình, hãy kiểm tra cú pháp bằng nginx -t rồi mới tải lại.
Ngoài ra, chức năng tải media lên của WordPress mặc định không chấp nhận các tệp ngoài những loại được phép (hình ảnh, PDF, v.v.). Thông thường, bạn không thể tải tệp PHP lên làm media từ trang quản trị.
Lưu ý
- Trước khi đổi quyền, hãy sao lưu tệp và cơ sở dữ liệu.
- Khi đổi quyền bằng phần mềm FTP, tùy máy chủ có thể không hỗ trợ đổi hàng loạt. Khi có nhiều tệp, dùng
findqua SSH sẽ nhanh hơn và tránh sót. - Khi bị yêu cầu thông tin kết nối FTP lúc cập nhật, đừng mở rộng quyền mà hãy kiểm tra chủ sở hữu. Bạn cũng có thể tham khảo "Cách sửa lỗi quyền của WordPress".
- Chạy định kỳ các lệnh kiểm tra ở trên (tệp mà người dùng khác ghi được, PHP trong uploads) sẽ giúp bạn sớm nhận ra thiết lập bị lệch hoặc bị can thiệp.
Có câu hỏi về WordPress? Đơn vị xuất bản trang này ở Nhật Bản và trả lời bằng tiếng Nhật. Liên hệ (tiếng Nhật)