Yêu cầu quyền chạy clmBot
Khi thực hiện tự động gia hạn chứng chỉ, clmBot cần đọc ghi tệp chứng chỉ mục tiêu và 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 middleware 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ự điều 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 các tài khoản có quyền cao như root hoặc Administrator.
Nguyên tắc quyền tối thiểu
Khuyến nghị sử dụng tài khoản hệ thống chuyên dụng (ví dụ clmbot) để chạy clmBot và tuân theo các nguyên tắc sau:
- Chỉ cấp cho tài khoản đó quyền đọ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 cần thiết.
- Chỉ cấp quyền ghi cho các tệp chứng chỉ, tệp khóa riêng và thư mục chứa chúng do clmBot quản lý.
- 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 cần thiết trong script phải được cấp từng quyền một.
Các cách làm không được khuyến nghị:
- Để clmBot chạy lâu dài với danh tính
roothoặcAdministrator. - Cấp toàn quyền cho clmBot đối với thư mục cấu hình trung gian, thư mục chứng chỉ hoặc quyền điều khiển dịch vụ hệ thống.
- Cấp quyền thực thi không giới hạn cho
bash,powershell.exe,systemctl.
Yêu cầu quyền của từng phần mềm trung gian
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. - Chạy lệnh reload:
after_scriptmặc định tạo ra đoạn script sau, dùng để tải lại nginx sau khi chứng chỉ được gia hạn:
nginx -t && nginx -s reload
Đề xuất cấp quyền tối thiểu:
- Chỉ mở thư mục chứng chỉ mục tiêu, không cấp quyền đọc/ghi toàn bộ
/etc/nginx. - Ủy quyền chính xác
nginx -tvànginx -s reloadqua sudoers, không cấp root shell đầy đủ.
Apache HTTP Server
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
SSLCertificateFile,SSLCertificateChainFile,SSLCertificateKeyFile. - Thực thi lệnh khởi động lại dịch vụ:
after_scriptmặc định tạo một trong các tập lệnh sau (tùy theo bản phân phối):
systemctl restart httpd.service
systemctl restart apache2.service
Gợi ý cấp quyền tối thiểu:
- Chỉ mở 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 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 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ị cấp quyền tối thiểu:
- Ưu tiên để clmBot và Tomcat sử dụng cùng một business group, chỉ cấp quyền đọc/ghi cho keystore hoặc thư mục chứng chỉ mục tiêu.
- Chỉ cho phép thực thi
shutdown.shvàstartup.shcủa instance Tomcat tương ứng, 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 quyền theo từng instance.
IIS
Kịch bản IIS phụ thuộc vào tập lệnh Windows PowerShell để nhập PFX và cập nhật HTTPS binding, cần 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 thi
powershell.exe -NoProfile -ExecutionPolicy Bypassđể nhập PFX tạm thời và cập nhật IIS site binding. - 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ý IIS site binding mục tiêu.
- Chính sách thực thi PowerShell và quyền module nên được rà soát riêng theo baseline bảo mật của máy chủ.
Ví dụ cấu hình Linux sudoers
Ví dụ dưới đây chỉ thể hiện mức độ chi tiết của việc cấp quyền, đường dẫn thực tế vui lòng điều chỉnh theo máy chủ mục tiêu.
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ể sử 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ó đang 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 các lệnh chính xác hay không, thay vì
ALL,bashhoặcsystemctlđầy đủ. - Quyền reload hoặc restart của nginx / Apache / Tomcat có chỉ áp dụng cho phiên bản mục tiêu 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.