1. Tổng quan
NgocNguyen WP Manager là bộ 2 plugin giúp bạn quản lý tập trung nhiều website WordPress từ một nơi duy nhất: xem tình trạng, cập nhật core/plugin/theme, khoá việc update/sửa file, và theo dõi các tài khoản admin để phát hiện sớm dấu hiệu bị hack.
| Plugin | Cài ở đâu | Vai trò |
|---|---|---|
| NgocNguyen WP Manager Dashboard |
1 site quản trị của bạn | Giao diện điều khiển: danh sách site, nút Check/Update, khoá update, cảnh báo |
| NgocNguyen WP Manager for Client Client / Agent |
Mỗi site khách cần quản lý | Nhận lệnh từ Dashboard, trả thông tin và thực hiện update |
Bạn có thể làm gì với bộ plugin này
- Xem phiên bản WordPress, số plugin/theme chờ update, trạng thái online/offline của tất cả site.
- Update core, plugin, theme cho từng site hoặc hàng loạt (chọn riêng từng loại).
- Bật/tắt khoá chặn update, cài đặt và sửa file ngay trên site khách bằng một cái toggle.
- Xem danh sách tài khoản admin của từng site, cảnh báo admin mới.
- Tự động check tất cả site mỗi ngày, hiện số site cần xử lý ngay trên menu.
2. Cách bảo mật hoạt động
Hiểu phần này giúp bạn dùng đúng và xử lý sự cố nhanh hơn.
- Site ID — mã định danh (UUID) của mỗi site khách. Không bí mật, nhưng cần khớp khi kết nối.
- Secret Key — chuỗi 64 ký tự hex dùng để ký lệnh. Đây là thứ quan trọng nhất, giữ kín.
- Chữ ký HMAC-SHA256 — mỗi request kèm Site ID, timestamp và chữ ký. Client chỉ chấp nhận khi chữ ký đúng và timestamp lệch không quá 5 phút.
- Danh sách IP/tên miền cho phép — Client chỉ nhận lệnh từ các địa chỉ bạn khai báo.
- Secret được mã hoá (AES-256) khi lưu trong database, cả ở Dashboard lẫn Client. Ở Client, secret chỉ hiện một lần lúc tạo.
- Chủ sở hữu (owner) — trên mỗi site khách, chỉ 1 tài khoản admin được thấy, cấu hình, tắt hoặc xoá plugin Client.
3. Yêu cầu
- WordPress 5.9 trở lên (khuyến nghị bản mới), PHP có extension
openssl. - Site khách phải gọi được REST API (
/wp-json/) và cho phép PHP ghi file (để update được). - Dashboard phải truy cập được các site khách qua HTTPS.
4. Cài đặt và kết nối site đầu tiên
Bước 1 — Cài Dashboard
Vào Plugins → Cài mới → Tải plugin lên, chọn file ngocnguyen-wp-manager-vXX.zip rồi Kích hoạt. Menu NgocNguyen WP Manager xuất hiện ở sidebar.
Bước 2 — Cài Client trên site khách
Cài file ngocnguyen-wp-manager-for-client-vXX.zip và kích hoạt bằng chính tài khoản admin bạn muốn làm chủ sở hữu (tài khoản kích hoạt sẽ tự thành chủ sở hữu).
Bước 3 — Lấy thông tin kết nối
Trên site khách vào Cài đặt → NgocNguyen WP Manager:
- Sao chép Site ID ở mục 1.
- Ở mục 2 bấm Tạo Secret Key và sao chép ngay (chỉ hiện một lần, tối đa 5 phút).
- Ở mục 3 nhập IP hoặc tên miền của site Dashboard rồi bấm Lưu danh sách.
Bước 4 — Thêm site vào Dashboard
Bấm Thêm site và điền: Tên site, URL (dạng https://example.com), Site ID, Secret Key. Có thể bấm nút kiểm tra để xem Client đã sẵn sàng chưa. Dashboard sẽ thử kết nối trước khi lưu; thành công thì site hiện ngay trong bảng.
Bước 5 — Khoá bảo mật
Vào Plugins trên site khách kiểm tra mọi thứ ổn, rồi cân nhắc bật khoá update (xem mục 7).
5. Plugin Client — trang Cài đặt
Trang nằm ở Cài đặt → NgocNguyen WP Manager (chỉ chủ sở hữu mới thấy).
Chủ sở hữu
- Site mới cài: người kích hoạt plugin là chủ sở hữu. Site cài từ bản cũ chưa có chủ thì trang hiện nút Tôi là chủ sở hữu, hãy bấm ngay, kẻo admin khác bấm trước.
- Admin khác không thấy menu, không thấy plugin trong danh sách Plugins, Site Health hay REST, và bị chặn bật, tắt, xoá plugin này (kể cả gửi request tay).
- Bỏ quyền chủ sở hữu để trả site về trạng thái chưa có chủ (nhớ nhận quyền lại ngay).
- Nếu tài khoản chủ sở hữu bị xoá, site tự quay về trạng thái chưa có chủ.
Mục 1 — Site ID
Mã định danh của site, sao chép để dán vào Dashboard.
Mục 2 — Secret Key
- Tạo Secret Key: sinh key mới, hiển thị một lần duy nhất rồi chỉ còn hiện dấu chấm.
- Tạo lại Secret Key: huỷ key cũ, Dashboard mất kết nối đến khi bạn thêm lại site với key mới.
- Có thể đặt secret cố định trong
wp-config.phpthay vì database (an toàn hơn):define('BWM_SECRET', 'chuoi-hex-64-ky-tu');— khi đó nút tạo key bị ẩn.
Mục 3 — Danh sách cho phép (IP / tên miền)
- Mỗi dòng một mục (hoặc ngăn cách bằng dấu phẩy). Nhập được IP hoặc tên miền; tên miền được phân giải sang IP (lưu đệm 5 phút).
- Để trống nghĩa là cho phép mọi nơi gửi lệnh (không khuyến nghị).
- Dùng tên miền trỏ đúng tới server Dashboard và không đặt sau Cloudflare/proxy, nếu không IP sẽ không khớp và bạn nhận lỗi "IP không được phép".
Mục 4 — Khoá Agent
Xoá Secret Key. Dashboard mất kết nối hoàn toàn cho tới khi bạn tạo lại key. Dùng khi cần ngắt kết nối khẩn cấp (nghi ngờ lộ key).
Cấu hình qua wp-config.php (tuỳ chọn)
| Hằng số | Tác dụng |
|---|---|
BWM_SECRET | Đặt secret cố định ngoài database |
BWM_OWNER_ID | Cố định ID chủ sở hữu, không ai đổi được qua giao diện |
Nên thêm define('DISALLOW_FILE_EDIT', true); để tắt trình sửa file của WordPress.
6. Dashboard — các phần của giao diện
Bốn ô thống kê
- Tổng số site, Đang online, Offline, Bản cập nhật chờ (tổng số core + plugin + theme đang chờ update trên mọi site).
- Các số này luôn tính trên toàn bộ site, kể cả khi bạn đang xem trang khác.
Bảng danh sách site
| Cột | Ý nghĩa |
|---|---|
| Site | Tên và domain. |
| Admin User | Các tài khoản có quyền quản trị (xem mục 8). |
| WP | Phiên bản WordPress. |
| Core | "Mới nhất" hoặc phiên bản mới đang chờ. |
| Plugins / Themes | "Mới nhất" hoặc huy hiệu số lượng chờ update. Bấm huy hiệu để chỉ update loại đó trên site này. |
| Khoá update | Toggle chặn update/sửa file (mục 7). |
| Trạng thái | ONLINE / OFFLINE. |
| Check cuối | Lần check gần nhất (tay hoặc tự động). |
| Hành động | Check, Update All, Xoá. |
Nút trên mỗi dòng
- Check: hỏi lại Client để làm mới dữ liệu của site đó.
- Update All: update plugin, theme rồi core trên site đó, sau đó tự check lại. Lỗi (nếu có) hiện ở thông báo màu đỏ, kèm tên plugin lỗi.
- Xoá: chỉ xoá site khỏi Dashboard, không ảnh hưởng gì tới site khách (plugin Client vẫn còn).
Nút phía trên
- Check tất cả: check toàn bộ site ở mọi trang (tối đa 5 site chạy song song).
- Thêm site: mở form kết nối site mới.
Thanh thao tác hàng loạt (đáy trang)
- Tick các site cần xử lý (ô tiêu đề bảng chọn mọi site trong trang hiện tại).
- Bấm Check để làm mới các site đã chọn.
- Chọn loại update bằng 3 ô bật/tắt Core / Plugins / Themes (mặc định bật cả ba, lựa chọn được nhớ), rồi bấm Update. Hộp xác nhận ghi rõ loại và số site. Nếu bỏ hết 3 ô thì nút Update bị khoá.
Phân trang
Mỗi trang hiện 50 site. Thanh phân trang xuất hiện ở đáy bảng khi có hơn 50 site. Chuyển trang sẽ bỏ các ô đã tick.
Bong bóng đỏ trên menu
Số đỏ cạnh tên menu là số site cần xử lý. Một site được tính nếu: đang offline, hoặc có bản cập nhật chờ, hoặc có tài khoản admin tạo trong 7 ngày gần đây. Số tự cập nhật sau mỗi lần Check/Update.
Tự động check mỗi ngày
Dashboard đặt lịch WP-Cron để check mọi site 1 lần/ngày (mỗi site chờ tối đa 45 giây). WP-Cron chỉ chạy khi site Dashboard có truy cập; để chạy đúng giờ, thêm define('DISABLE_WP_CRON', true); vào wp-config.php và đặt cron thật trên hosting, ví dụ mỗi 15 phút:
curl -s https://domain-dashboard/wp-cron.php?doing_wp_cron
7. Khoá update và sửa file
Toggle ở cột Khoá update bật/tắt tính năng chặn ngay trên site khách (mỗi lần bấm có hộp xác nhận). Khi Đã khoá, plugin Client chặn tương đương 3 hằng số trong wp-config.php:
| Tương đương | Tác dụng |
|---|---|
DISALLOW_FILE_MODS | Chặn cài, update, xoá plugin/theme/core từ trang quản trị và request tay |
AUTOMATIC_UPDATER_DISABLED | Tắt mọi auto update (core, plugin, theme, bản dịch) |
DISALLOW_FILE_EDIT | Tắt trình sửa file plugin/theme |
- Update từ Dashboard vẫn chạy được trên site đang khoá (khoá chỉ chặn admin trên site và auto update). Dashboard là đường update duy nhất được phép.
- Nhãn "+ wp-config" nghĩa là site còn bị khoá bằng hằng số trong
wp-config.php; toggle không gỡ được phần đó. - Nhãn "Update bị khoá" trong cột Site là tình huống khác: Client không ghi được file (do
DISALLOW_FILE_MODS/AUTOMATIC_UPDATER_DISABLEDtrongwp-config.phphoặc quyền thư mục), nên update từ Dashboard cũng sẽ lỗi. - Dấu "---" ở cột này: site đang chạy Client bản cũ, hãy cập nhật Client.
- Mặc định là Mở cho mọi site.
Khoá nằm trong plugin Client nên mạnh hơn hết là kết hợp thêm hằng số trong wp-config.php làm lớp chính.
8. Theo dõi admin user và phát hiện bị hack
Cột Admin User liệt kê các tài khoản có quyền quản trị (manage_options, gồm cả role tuỳ chỉnh). Rê chuột vào từng tên để xem email, ngày tạo và ID.
| Dấu hiệu | Ý nghĩa |
|---|---|
| Chip xanh lá có ★ | Chủ sở hữu plugin Client trên site đó. |
| Chip đỏ "MỚI" | Admin tạo trong 7 ngày gần đây, hãy kiểm tra ngay nếu bạn không tạo. |
| Chip vàng "chưa có chủ" | Plugin Client chưa có chủ sở hữu: ai là admin cũng thấy và tắt được. Vào site nhận quyền ngay. |
| Chip "+N" | Còn N admin chưa hiển thị (hiện tối đa 6; rê chuột xem tên). |
9. Quy trình khuyến nghị
Hằng ngày
Nhìn bong bóng đỏ trên menu. Có số thì mở Dashboard, xử lý site offline, admin lạ, rồi update.
Khi update
- Bấm Check tất cả để có dữ liệu mới nhất.
- Update thử 1-2 site trước, mở site kiểm tra giao diện và chức năng chính.
- Tick các site còn lại, chọn Core/Plugins/Themes phù hợp, bấm Update.
- Site cần giữ ổn định thì giữ toggle ở trạng thái Đã khoá và chỉ update qua Dashboard.
Hằng tuần
Xem lại cột Admin User, chip "chưa có chủ" và các site offline lâu.
10. Khuyến nghị bảo mật
- Bật 2FA và dùng mật khẩu mạnh cho tài khoản admin của site Dashboard. Hack được site này là ra lệnh được cho mọi site khách.
- Giữ ít admin nhất có thể trên Dashboard và trên các site khách; nên giới hạn IP truy cập wp-admin.
- Luôn điền danh sách IP/tên miền cho phép trên từng site khách.
- Ưu tiên đặt
BWM_SECRET,BWM_OWNER_IDvà các hằng số khoá trongwp-config.php. - Không đổi salts/keys (
AUTH_KEY,SECURE_AUTH_KEY...) của WordPress sau khi đã kết nối: secret được mã hoá bằng các khoá này, đổi đi sẽ không giải mã được và phải thêm lại site. - Chủ sở hữu có thể tắt plugin Client; admin khác có quyền FTP/database vẫn có thể phá được. WordPress không khoá tuyệt đối với admin.
11. Xử lý sự cố
| Hiện tượng / thông báo | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Site ID sai | Dán nhầm Site ID, hoặc site khách bị đổi Site ID | Lấy lại Site ID ở trang Cài đặt trên site khách |
| Chữ ký sai | Secret Key sai hoặc đã bị tạo lại | Xoá site và thêm lại với key mới |
| Timestamp hết hạn | Giờ server Dashboard hoặc site khách lệch hơn 5 phút | Đồng bộ giờ server |
| IP không được phép (403) | IP Dashboard không có trong danh sách cho phép, hoặc Dashboard nằm sau Cloudflare/proxy | Thêm IP/tên miền đúng của server Dashboard |
| Agent đã bị khoá (423) | Đã bấm Khoá Agent nên không còn secret | Tạo lại Secret Key rồi thêm lại site |
| OFFLINE | Site chết, chặn REST API, plugin bảo mật chặn /wp-json/, SSL lỗi |
Mở thử https://site/wp-json/bwm/v1/ping; kiểm tra tường lửa/WAF |
| Số liệu không đổi sau update | Cache (LiteSpeed...) lưu response cũ | Client mới đã gửi header chống cache; thêm wp-json/bwm vào mục "Do Not Cache URIs" của plugin cache |
| Update lỗi một vài plugin | Plugin premium cần license, hết dung lượng, quyền ghi file | Đọc dòng lỗi ghi theo từng plugin ở thông báo đỏ |
| Cột Khoá update hiện "---" | Site chạy Client bản cũ | Cập nhật Client lên bản mới nhất |
| Không thấy Admin User | Client bản cũ | Cập nhật Client, bấm Check lại |
Nhắn Zalo để được giải đáp trực tiếp.