lenh-su-khong-can-password-0

Trong bài viết này, mình sẽ hướng dẫn anh em cách để chuyển sang một user khác bằng lệnh su trên hệ điều hành Linux mà không cần password. Ví dụ, chúng ta có một user postgres (user toàn quyền mặc định của PostgreSQL), chúng ta muốn tất cả user trong group postgres có thể chuyển sang user postgres bằng lệnh su mà không cần phải điền password của user này.

lenh-su-khong-can-password-0

Mặc định, chỉ có user root mới có thể chuyển sang các user khác mà không cần phải điền phải password. Các user còn lại đều phải điền password nếu muốn chuyển sang user khác, nếu các user này gõ sai password thì sẽ bị báo “authentication failed“.

Để tránh tình trạng này, anh em có thể tham khảo 2 cách sau đây.

Cách 1: Sử dụng module chứng thực PAM

PAM viết tắt cho Pluggable Authentication Modules, là phần core của việc xác thực user trên hệ điều hành Linux hiện nay. Để cho phép user trong một group chuyển sang một user khác mà không cần phải khai báo password, chúng ta cần chỉnh sửa cấu hình của PAM trong file cấu hình /etc/pam.d/su

vim /etc/pam.d/su

Hoặc

sudo vim /etc/pam.d/su

Thêm dòng cấu hình bên dưới vào sau “auth sufficient pam_rootok.so” như hình bên dưới.

auth       [success=ignore default=1] pam_succeed_if.so user = postgres
auth       sufficient   pam_succeed_if.so use_uid user ingroup postgres

Trong các dòng cấu hình trên, dòng đầu tiên sẽ kiểm tra xem user mục tiêu có phải là postgres hay không, nếu có, service sẽ kiểm tra user hiện tại, nếu không, dòng default=1 được bỏ qua và các bước xác thực mình thường sẽ được thực thi, tức là vẫn phải khai báo password.

auth       [success=ignore default=1] pam_succeed_if.so user = postgres

Dòng sau sẽ kiểm tra xem người dùng hiện tại có trong nhóm postgres hay không, nếu có, quá trình xác thực sẽ được xem là thành công và không cần phải khai báo password nữa. Nếu không thì sẽ phải khai báo password như bình thường.

auth       sufficient   pam_succeed_if.so use_uid user ingroup postgres
lenh-su-khong-can-password-1

Để 2 dòng cấu hình vào file như hình và save lại.

Tiếp theo, thêm user bất kỳ (ví dụ abxat) vào group postgres để thử nghiệm xem thế nào. Bắt đầu tạo user abxat để test.

sudo usermod -aG postgres abxat

Bây giờ đứng từ user abxat vừa tạo thử dùng lệnh su đến user postgres xem thế nào và anh em tự kiểm chứng nhé.

su - postgres

Cách 2: Dùng file Sudoers

Ngoài cách 1 như đã trình bày ở trên, chúng ta còn có thể khiến lệnh su không cần phải hỏi lại password nữa bằng cách sửa đổi lại một chút trong file Sudoers. Trong trường hợp này, user abxat sẽ chuyển sang một user khác có trong file sudoers hoặc trong group sudo để có thể thu hồi lệnh sudo.

sudo visudo

Lúc này, thêm cấu hình sau vào phía dưới dòng “%sudo ALL=(ALL:ALL) ALL” như trong hình.

abxat ALL=NOPASSWD: /bin/su – postgres
lenh-su-khong-can-password-1

Thêm cấu hình như trong hình và lưu lại.

Vậy là đã xong, giờ thử lại lệnh su để chuyển từ user abxat sang user postgres xem thế nào.

sudo su - postgres

Anh em tự kiểm chứng kết quả nhé. Để nắm thêm thông tin về PAM, anh em có thể xem qua trang hướng dẫn của PAM với lệnh man pam.conf cũng như man sudo, sẽ có nhiều thứ hay ho đang chờ anh em.

man pam.conf
man sudo

Xin cảm ơn anh em đã đọc bài, vẫn còn nhiều bài viết hướng dẫn hữu ích, anh em có thể xem qua khi cần nhé.