Tình huống
Mọi thứ dường như hoàn hảo sau khi chuyển trang web của khách hàng sang một droplet DigitalOcean mới. Tuy nhiên, ngay khi tôi cố gắng cập nhật một plugin, quá trình này đã gặp trở ngại. Thay vì thanh tiến trình thông thường, một cửa sổ hiện lên yêu cầu thông tin FTP.
To perform the requested action, WordPress needs to access your web server. Please enter your FTP credentials to proceed.
Đây là một vấn đề gây đau đầu vì các dịch vụ lưu trữ đám mây hiện đại hiếm khi sử dụng FTP truyền thống nữa. Chúng ta thường dùng SSH/SFTP hoặc quản lý tệp trực tiếp. Việc thấy thông báo này không có nghĩa là máy chủ của bạn bị lỗi. Nó chỉ đơn giản là WordPress nhận ra rằng nó không có "chìa khóa" để ghi tệp trực tiếp lên đĩa cứng của bạn.
Tại sao điều này xảy ra
WordPress thực hiện một kiểm tra nhanh dưới nền trước mỗi lần cập nhật. Nó cố gắng tạo một tệp tạm thời nhỏ trong thư mục wp-content của bạn. Nếu chủ sở hữu của tệp mới đó không khớp với chủ sở hữu của thư mục, WordPress sẽ nghi ngờ. Nó giả định rằng mình thiếu quyền ghi trực tiếp và chuyển sang phương thức FTP cũ như một biện pháp an toàn.
Sự không khớp này thường bắt nguồn từ ba vấn đề cụ thể:
- Sai lệch người dùng: Máy chủ web của bạn (như
www-data) không phải là chủ sở hữu của các tệp WordPress. - Tải lên bằng quyền Root: Bạn đã tải các tệp của trang web lên qua SSH bằng người dùng
root. - Phân quyền bị hạn chế: Phân quyền thư mục của bạn được thiết lập quá chặt chẽ, chẳng hạn như 555 thay vì 755 tiêu chuẩn.
Cách khắc phục nhanh: Ép buộc FS_METHOD
Nếu bạn đang trong quá trình triển khai và cần một giải pháp trong 30 giây, bạn có thể bỏ qua hoàn toàn việc kiểm tra quyền sở hữu. Điều này yêu cầu WordPress ngừng đặt câu hỏi và cứ thế ghi tệp. Đây là cách giải quyết tạm thời phổ biến cho 90% người dùng.
- Truy cập máy chủ của bạn qua SFTP hoặc trình quản lý tệp của nhà cung cấp dịch vụ lưu trữ.
- Mở tệp
wp-config.phptrong thư mục gốc của trang web. - Dán dòng này ngay phía trên thông báo "That's all, stop editing" (Tất cả thế thôi, ngừng chỉnh sửa):
define('FS_METHOD', 'direct');
Cảnh báo: Nếu phân quyền cơ bản của bạn vẫn được đặt là "Chỉ đọc" (Read Only), điều này sẽ chỉ thay thế thông báo FTP bằng lỗi "Could not create directory" (Không thể tạo thư mục). Nếu điều đó xảy ra, bạn cần giải pháp lâu dài bên dưới.
Cách khắc phục lâu dài: Chỉnh sửa quyền sở hữu
Cách sạch nhất để giải quyết vấn đề này là đảm bảo máy chủ web thực sự sở hữu các tệp của bạn. Trên Ubuntu hoặc Debian, người dùng hầu như luôn là www-data. Trên CentOS hoặc RHEL, bạn có thể sẽ thấy apache hoặc nginx.
Bước 1: Xác định người dùng máy chủ web
Bạn không chắc ai đang chạy PHP? Hãy chạy lệnh này để tìm hiểu:
ps aux | grep php
Nhìn vào cột ngoài cùng bên trái. Nếu bạn thấy www-data hoặc httpd, đó là người dùng bạn cần sử dụng trong bước tiếp theo.
Bước 2: Lấy lại quyền sở hữu
Đi tới thư mục gốc của web (thường là /var/www/html). Chạy lệnh này để trao lại quyền sở hữu cho máy chủ web:
# Thay thế /var/www/html bằng đường dẫn thực tế của bạn
sudo chown -R www-data:www-data /var/www/html
Bước 3: Thiết lập lại phân quyền theo tiêu chuẩn ngành
Bảo mật là một sự cân bằng. Bạn nên đặt 755 cho thư mục và 644 cho tệp. Nếu những con số này có vẻ khó hiểu, hãy sử dụng Công cụ tính phân quyền Unix để hình dung những gì bạn đang thay đổi. Nó giúp đảm bảo bạn không vô tình cấp quyền ghi công khai cho các tệp nhạy cảm của mình.
Áp dụng các phân quyền tiêu chuẩn này từ thư mục gốc WordPress của bạn:
# Sửa tất cả thư mục thành 755
find . -type d -exec chmod 755 {} \;
# Sửa tất cả tệp thành 644
find . -type f -exec chmod 644 {} \;
Xác minh
Quay lại Bảng điều khiển WordPress và thử cập nhật lại. Thông báo FTP sẽ biến mất ngay lập tức. Nếu bạn đã thêm dòng FS_METHOD trước đó, bây giờ bạn có thể xóa nó một cách an toàn. Máy chủ của bạn hiện đã được cấu hình chính xác đến mức WordPress không cần gợi ý "trực tiếp" nữa.
Lời cuối về bảo mật
Mặc dù chown -R www-data hoạt động hoàn hảo cho các thiết lập VPS riêng lẻ, hãy thận trọng trên các máy chủ chia sẻ (shared server) nơi nhiều người dùng có thể có quyền truy cập. Trong khi bạn đang dọn dẹp tệp wp-config.php, đây cũng là thời điểm tốt để thay đổi các khóa bảo mật (security keys). Sử dụng một trình tạo mật khẩu an toàn để tạo các chuỗi ký tự duy nhất cho cơ sở dữ liệu và salt của bạn. Điều này đảm bảo trang web của bạn vẫn được khóa chặt sau khi bạn đã khắc phục các rào cản truy cập.
Nếu thông báo vẫn còn, hãy kiểm tra xem máy chủ của bạn có sử dụng mod_ruid2 hay không. Module Apache này thay đổi cách xử lý người dùng và có thể yêu cầu quyền sở hữu phải khớp với tên người dùng FTP cụ thể của bạn thay vì người dùng máy chủ web.

