Yêu cầu quyền chạy clmBot
clmBot khi thực hiện tự động gia hạn chứng chỉ cần đọc và ghi tệp chứng chỉ đích, đồng thời sau khi cập nhật cần tải lại hoặc khởi động lại dịch vụ middleware tương ứng.Bài viết này mô tả cấu hình quyền tối thiểu được khuyến nghị trong các tình huống phần mềm trung gian khác nhau.
Lệnh reload / restart của middleware được định nghĩa trong trường servers[].after_script của config.yaml, người dùng có thể tùy chỉnh theo môi trường thực tế. clmBot không yêu cầu chạy lâu dài bằng tài khoản có quyền cao như root hoặc Administrator.
Nguyên tắc đặc quyền tối thiểu
Nên sử dụng tài khoản hệ thống chuyên dụng (chẳng hạn như clmbot) để chạy clmBot và tuân thủ các nguyên tắc sau:
- Chỉ cấp cho tài khoản này các quyền cần thiết để đọc cấu hình clmBot, thư mục nhật ký và điểm cài đặt chứng chỉ mục tiêu.
- Chỉ cấp quyền ghi cho các tệp chứng chỉ, tệp khóa riêng tư do clmBot quản lý và thư mục chứa chúng.
- Chỉ cho phép thực thi các lệnh reload / restart middleware đã được xác nhận, không cấp
NOPASSWD: ALLhoặc quyền root đầy đủ. before_script,after_scriptphải được kiểm tra thủ công, các quyền mà script cần phải được cấp từng mục một.
Cách làm không được khuyến nghị:
- Để clmBot chạy lâu dài với vai trò
roothoặcAdministrator. - Cấp toàn bộ quyền kiểm soát thư mục cấu hình middleware, thư mục chứng chỉ hoặc dịch vụ hệ thống cho clmBot.
- Cấp quyền thực thi không giới hạn cho
bash,powershell.exe,systemctl.
Yêu cầu quyền đối với từng middleware
nginx
clmBot cần các quyền sau:
- Quyền đọc/ghi thư mục chứng chỉ: Có quyền đọc/ghi đối với thư mục chứa tệp chứng chỉ đích (
.crt), tệp chuỗi CA (tùy chọn) và tệp khóa riêng (.key), để ghi chứng chỉ mới và tạo bản sao lưu.bak. - Thực thi lệnh reload:
after_scriptmặc định tạo đoạn mã sau, dùng để tải lại nginx sau khi cập nhật chứng chỉ:
nginx -t && nginx -s reload
Khuyến nghị quyền hạn tối thiểu:
- Chỉ mở thư mục chứng chỉ đích, không cấp quyền đọc/ghi toàn bộ
/etc/nginx. - Thông qua sudoers để phân quyền chính xác
nginx -tvànginx -s reload, không cấp shell root hoàn chỉnh.
Apache HTTP Server
clmBot cần các quyền sau:
- Quyền đọc và ghi vào thư mục chứng chỉ: Cần có quyền đọc và ghi vào thư mục chứa
SSLCertificateFile,SSLCertificateChainFile,SSLCertificateKeyFile. - Thực hiện lệnh khởi động lại dịch vụ:
after_scriptmặc định tạo ra một trong các tập lệnh sau (tùy thuộc vào bản phân phối):
systemctl restart httpd.service
systemctl restart apache2.service
Khuyến nghị cấp quyền tối thiểu:
- Chỉ cấp quyền truy cập vào thư mục chứng chỉ mục tiêu, không cấp quyền cho toàn bộ thư mục cấu hình Apache.
- Thông qua sudoers, chỉ cấp quyền
restartcho tên dịch vụ Apache thực tế đang được hệ thống hiện tại sử dụng.
Tomcat
clmBot cần các quyền sau:
- Quyền đọc/ghi thư mục chứng chỉ: Có quyền đọc/ghi đối với thư mục chứa tệp chứng chỉ/khóa riêng tư PEM hoặc tệp JKS keystore.
- Thực thi tập lệnh dừng và khởi động:
after_scriptmặc định tạo các tập lệnh sau:
export JAVA_HOME="<java_home>" && "<catalina_base>/bin/shutdown.sh" && "<catalina_base>/bin/startup.sh"
Khuyến nghị quyền hạn tối thiểu:
- Ưu tiên cho clmBot và Tomcat sử dụng cùng một nhóm nghiệp vụ, chỉ cấp quyền đọc ghi cho keystore mục tiêu hoặc thư mục chứng chỉ.
- Chỉ cho phép thực thi
shutdown.shvàstartup.shtương ứng với instance Tomcat, không cấp quyền cho toàn bộ thư mục/opt. - Môi trường nhiều instance Tomcat nên phân tách ủy quyền theo từng instance.
IIS
Kịch bản IIS phụ thuộc vào script Windows PowerShell để nhập PFX và cập nhật liên kết HTTPS, yêu cầu quyền quản trị viên.
clmBot cần các quyền sau:
- Chạy bằng tài khoản quản trị viên: thực hiện
powershell.exe -NoProfile -ExecutionPolicy Bypassđể nhập PFX tạm thời và cập nhật liên kết site IIS. - Quyền đọc/ghi thư mục chứng chỉ: tạo và dọn dẹp tệp PFX tạm thời.
Khuyến nghị cấp quyền tối thiểu:
- Sử dụng tài khoản dịch vụ Windows chuyên dụng, chỉ cấp quyền cần thiết để quản lý liên kết (binding) của site IIS mục tiêu.
- Chính sách thực thi PowerShell và quyền mô-đun cần được kiểm tra riêng theo đường cơ sở bảo mật của máy chủ.
Ví dụ cấu hình sudoers trên Linux
Ví dụ sau chỉ thể hiện phạm vi ủy quyền, vui lòng điều chỉnh đường dẫn thực tế theo máy chủ đích.
nginx:
clmbot ALL=(root) NOPASSWD: /usr/sbin/nginx -t
clmbot ALL=(root) NOPASSWD: /usr/sbin/nginx -s reload
Apache:
clmbot ALL=(root) NOPASSWD: /bin/systemctl restart apache2.service
Tomcat:
clmbot ALL=(tomcat) NOPASSWD: /opt/apache-tomcat/bin/shutdown.sh
clmbot ALL=(tomcat) NOPASSWD: /opt/apache-tomcat/bin/startup.sh
Ví dụ về quyền thư mục chứng chỉ:
chown -R root:clmbot /etc/ssl/example
chmod 0750 /etc/ssl/example
chmod 0640 /etc/ssl/example/site.crt /etc/ssl/example/ca.crt
chmod 0640 /etc/ssl/example/site.key
Nếu cần cho phép clmBot ghi và sao lưu các tệp nêu trên, bạn có thể dùng ACL để cấp quyền chính xác:
setfacl -m u:clmbot:rwx /etc/ssl/example
setfacl -m u:clmbot:rw- /etc/ssl/example/site.crt
setfacl -m u:clmbot:rw- /etc/ssl/example/ca.crt
setfacl -m u:clmbot:rw- /etc/ssl/example/site.key
Danh sách kiểm tra quyền trước khi triển khai
Trước khi triển khai clmBot, bạn nên xác nhận từng mục cấu hình quyền sau đây.
- clmBot có chạy bằng tài khoản chuyên dụng hay không, thay vì
roothoặc quản trị viên. config.yamlcó chỉ cho phép các tài khoản cần thiết đọc và ghi hay không.- Tệp chứng chỉ mà mỗi
servers[].formattrỏ tới có chỉ mở quyền đọc ghi cần thiết hay không. - Thư mục chứa tệp chứng chỉ có cho phép tạo và dọn dẹp tệp sao lưu
.bakhay không. before_script,after_scriptđã được kiểm tra thủ công hay chưa.- sudoers có chỉ chứa lệnh chính xác hay không, thay vì
ALL,bashhoặc toàn bộsystemctl. - Quyền reload hoặc restart của nginx / Apache / Tomcat có chỉ bao phủ phiên bản đích hay không.
- Địa chỉ và cổng lắng nghe của chế độ dịch vụ (
clm-bot server) có phù hợp với chính sách tường lửa của máy chủ hay không.