Điều này gây mất thời gian đáng kể - i9bet

/imgposts/7idje43x.jpg

Trong quá trình làm việc, tôi thường xuyên triển khai các chương trình viết bằng ngôn ngữ Go lên máy chủ sản xuất. Tôi sử dụng Makefile để tự động hóa quy trình biên dịch vàscp tệp thực thi lên máy chủ. Tuy nhiên, tôi không thể tự động khởi động lại dịch đại lý cá độ vụ qua mạng vì các lệnh liên quan đến systemd yêu cầu quyền sudo.

Do đó, mỗi lần triển khai xong, tôi đều phải đăng nhập trực tiếp vào máy chủ, sau đó chạy lệnh sudo systemctl restart xxx.service và nhập mật khẩu thủ công. Điều này gây mất thời gian đáng kể. Tôi muốn tìm một giải pháp để cấp quyền sudo cho người dùng hiện tại nhưng vẫn đảm bảo an toàn bằng cách giới hạn phạm vi chỉ cho phép thực thi một số lệnh cụ thể.

Tôi đã tìm hiểu và phát hiện rằng tập tin sudoers có thể đáp ứng hoàn hảo nhu cầu của mình. Khi kiểm tra thông tin về sudoers:

man sudoers

Tôi đọc được rằng:

sudoers — đây là plugin chính sách bảo mật mặc định của sudo. Plugin này xác định quyền sudo của người dùng dựa trên nội dung của tập tin /etc/sudoers hoặc tùy chọn qua LDAP. Điều thú vị là nó còn hỗ trợ quản lý thông qua hệ thống LDAP, rất chuyên nghiệp và linh hoạt.

Để chỉnh sửa tập tin cấu hình sudoers, chúng ta phải sử dụng lệnh visudo. Lưu ý quan trọng: Không bao giờ chỉnh sửa trực tiếp tập tin /etc/sudoers bằng các trình soạn thảo khác như vim vì bất kỳ lỗi nào trong cú pháp cũng có thể khiến hệ thống bị hỏng.

Chúng ta cũng có thể tạo thêm các tệp cấu hình riêng lẻ trong thư mục /etc/sudoers.d/ bằng cách sử dụng lệnh:

sudo visudo -f /etc/sudoers.d/tên_tập_tin_muốn_chỉnh_sửa
  1. Tạo một tệp cấu hình mới trong thư mục /etc/sudoers.d/:
sudo visudo -f /etc/sudoers.d/cấu_hình_mới
  1. Thêm nội dung sau vào tệp:
người_dùng ALL=(root) NOPASSWD: /usr/bin/systemctl

Trong đó, bạn thay thế người_dùng bằng tên tài khoản mà bạn đang sử dụng để đăng nhập vào máy chủ.

Sau khi cấu hình xong, tôi thử nghiệm bằng cách thực thi lệnh sudo systemctl stop/start từ xa qua ssh. Kết quả là lệnh được thực thi thành công mà không cần nhập mật khẩu. Ngược lại, các lệnh khác như apt install vẫn yêu cầu nhập mật khẩu như bình thường, đúng với mong đợi.

Cấu trúc chung của một dòng cấu hình trong sudoers là:

Người_dùng Máy_chủ = (Chạy_lài) Lệnh

Nghĩa là:

"Người_dùng có thể chạy Lệnh dưới danh nghĩa của người dùng Chạy_lài trên Máy_chủ".

Ví dụ trên có nghĩa là người dùng myuser có thể thực thi lệnh /usr/bin/systemctl mà không cần nhập mật khẩu trên mọi máy chủ.