Xử lý lỗi mất quyền admin WordPress

Vào một ngày, bỗng dưng bạn truy cập vào trang quản trị WordPress và nhận được thông báo “Xin lỗi, bạn không được phép truy cập trang này”. Khi bị lỗi này, bạn sẽ không vào được WordPress admin, đừng quá lo lắng, hãy làm theo hướng dẫn dưới đây để biết được nguyên nhân và cách xử lý nó nhé.

Lỗi mất quyền admin WordPress

Nguyên nhân của lỗi mất quyền admin trị WordPress ?

Lỗi mất quyền admin quản trị WordPress thường xuất hiện trên các Website có các đặc điểm sau:

  • Web có sử dụng các Themes, Plugins có các Hook can thiệp vào phân quyền của tài khoản WordPress.
  • Web có sử dụng các Plugins tối ưu database, Plugins restore dữ liệu, Plugin tìm kiếm và thay thế URL,… khi xử lý gây lỗi bảng dữ liệu

Lỗi sẽ xảy ra bất khi nào và có nguy cơ bị tái diễn, cho dù lúc đó bạn không hề can thiệt gì vào website của mình.

Làm sao để thiết lập lại phân quyền cho tài khoản quản trị WordPress ?

Có nhiều cách để thiết lập lại phân quyền trong WordPress, dưới đây là 3 cách phổ biến mà tôi đã áp dụng.

Sử dụng WP CLI để khởi tạo tài khoản quản trị WordPress

Sử dụng WP CLI là cách tôi khuyên bạn nên áp dụng.

Với WP CLI, bạn dễ dàng kiểm tra được trạng thái tài khoản quản trị thông qua bảng điều khiển của Terminal của Hosting.

Bạn có thể quan tâm:

Để xem phân quyền của tài khoản quản trị, hãy nhập lệnh sau vào Terminal

wp user list | grep admin

Bạn sẽ nhận được kết quả tương tự như ảnh dưới đây:

Kiểm tra phân quyền user bằng WP CLI trên terminal

Bạn dễ dàng nhận thấy tài khoản admin_dgz08d1u của tôi đang bị mất phân quyền administrator, trong khi tài khoản quantri vẫn còn phân quyền administrator.

Để cập nhật lại phân quyền quản trị mới cho tài khoản, bạn hãy nhập tiếp lệnh sau:

wp user update admin_dgz08d1u --role=administrator

Trong đó admin_dgz08d1u là tên user quản trị của bạn, nên hãy nhớ thay đổi theo đúng tên user mà bạn đã tạo trước đó.

Dưới đây là kết quả sau khi đã cập nhật lại phân quyền:

Thiết lập lại phân quyền quyền user bằng WP CLI trên terminal.

Tuy nhiên, ưu điểm của WP CLI cũng chính là nhược điểm của nó.

Bởi lẽ ở Việt Nam, rất ít nhà cung cấp hosting tích hợp sẵn WP CLI hoặc mở sẵn Terminal trên hosting để bạn có thể chủ động cài đặt WP CLI.

Các nhà cung cấp cấp Hosting thường không khó khăn trong tích hợp WP CLI trên hệ thống của họ.

Phần lớn nguyên do là vì tệp khách hàng của họ không sử dụng hoặc không quan tâm nhiều đến những tính năng mà WP CLI mang lại trong quá trình họ vận hành website.

Tôi tin chắc rằng các nhà cung cấp Hosting và người dùng WordPress tại Việt Nam sẽ dần quan tâm đến WP CLI trong thời gian tới, bởi sự khác biệt mà WP CLI mang lại trong việc quản trị WordPress là cực kỳ tuyệt vời.

Sử dụng câu lệnh SQL

Đối với cách này, bạn sẽ dùng các câu lệnh SQL để khởi tạo một User mới trong cơ sở dữ liệu của WordPress.

Đầu tiên, bạn truy cập vào Bảng điều khiển của hosting, sau đó truy cập vào PHPMyadmin.

Sau đó nhấn trực tiếp vào tên Database muốn thao tác và chọn tab SQL.

Tiếp theo, hãy copy các câu lệnh SQL dưới đây và dán vào tab SQL trên PHPMyadmin của bạn.

INSERT INTO `isaachiroman_wp_nxho2`.`4AgO53_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`) VALUES ('1020', 'newadmin', MD5('newadmin@123'), 'newadmin', '[email protected]', 'https://domain.com/', '2022-09-01 00:00:00', '', '0', 'newadmin');
  
  
INSERT INTO `isaachiroman_wp_nxho2`.`4AgO53_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1020', 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');
  
  
INSERT INTO `isaachiroman_wp_nxho2`.`4AgO53_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1020', 'wp_user_level', '10');

Trong đó:

  • isaachiroman_wp_nxho2: Bạn sửa thành tên Database Name của bạn.
  • 4AgO53_ : Tên Prefix Database.
  • newadmin: Tên tài khoản quản trị viên muốn tạo mới.
  • newadmin@123: Mật khẩu của tài khoản quản trị viên mới.
  • [email protected]: Email của tài khoản quản trị viên mới.
  • 1020: ID mới của tài khoản quản trị viên mới khi được thêm vào Database.

Cuối cùng hãy nhấn Go để thực thi lệnh SQL.

xu ly loi mat phan quyen tai khoan quan tri wordpress 3
xu ly loi mat phan quyen tai khoan quan tri wordpress 5

Bước kế tiếp, bạn đăng nhập lại Website như thông thường với tài khoản quản trị mới mà bạn đã tạo.

Sau khi đăng nhập thành công, hãy truy cập vào mục Thành viên và thiết lập lại phân quyền cho tài khoản quản trị WordPress cũ của bạn.

Bạn có thể thấy danh sách các thành viên trong WordPress tương tự như ảnh dưới đây.

xu ly loi mat phan quyen tai khoan quan tri wordpress 6

Trong một số trường hợp, cách này vẫn sẽ không hoạt động mặc dù các bước thao tác của bạn đều đúng.

Tôi vẫn chưa rõ nguyên nhân tại sao, nhưng với tỷ lệ 60% thành công thì bạn cũng nên thử, biết đâu bất ngờ.

Sử dụng hàm PHP tự động tạo tài khoản trong file functions.php

Với cách này, bạn chỉ cần copy code dưới đây và dán vào file functions.php của giao diện đang kích hoạt.

add_action( 'init', function () {
 $username = 'newadmin';
 $password = 'newadmin@123';
 $email_address = '[email protected]';
 if ( ! username_exists( $username ) ) {
     $user_id = wp_create_user( $username, $password, $email_address );
     $user = new WP_User( $user_id );
     $user->set_role( 'administrator' );
     grant_super_admin($user_id);
}
} );

Hãy nhớ thay thế thông tin username, password, email bằng thông tin của bạn.

xu ly loi mat phan quyen tai khoan quan tri wordpress 4

Hàm PHP này sẽ tạo một tài khoản quản trị WordPress mới với quyền cao nhất trong cơ sở dữ liệu.

Việc còn lại là đăng nhập lại admin web và thiết lập lại phân quyền của tài khoản quản trị cũ thôi.

Tuy nhiên, có một điều bạn cần lưu ý đó là các hosting được trang bị tường lửa có thể sẽ chặn hàm PHP này.

Bởi vì đối với tường lửa, không gì tồi tệ hơn một hàm xử lý được phép tạo tài khoản trong source code. Đây cũng là cách mà các hacker chèn các hàm mã độc chiếm quyền kiểm soát website của bạn.

Tôi đã thử ở trên hai bảng điều khiển phổ biến nhất là CPanelPlesk, cả hai bảng điều khiển này đều trang bị tường lửa Imunify360 thì hàm đều bị chặn.

Với Imunify360 trên Plesk, trong một số trường hợp hàm của tôi vẫn chạy được trước khi tường lửa kịp thời quét lại source code.

File functions.php có thể sẽ bị cách ly sau vài phút, nhưng chừng đó là đủ để tôi có thể lấy lại quyền quản trị của mình.

Nếu bị cách ly file functions.php, bạn chỉ cần loại bỏ hàm xử lý PHP đã chèn đi và tạo lại file functions.php như cũ là được. Imunify360 thường sẽ cách ly file 15 ngày rồi mới thực hiện xóa bỏ mã độc.

Còn với Imunify360 trên Cpanel thì bạn thậm chí không thể Save lại khi chèn hàm vào file functions.php.

Đối với tôi, code gì không quá quan trọng, quan trọng là mục đích sử dụng để làm gì mà thôi.

Tổng kết

Hy vọng những hướng dẫn trên có thể giúp bạn xử lý lỗi mất phân quyền tài khoản quản trị WordPress một cách nhanh chóng.

Nếu bạn có cách xử lý tối ưu hơn, đừng ngần ngại để lại một vài hướng dẫn ở phần bình luận nhé.

Chúc bạn thành công.

Leave a Comment