ข้อกำหนดสิทธิ์ในการรัน
เมื่อ clmBot ดำเนินการอัปเดตใบรับรองอัตโนมัติ จำเป็นต้องอ่านและเขียนไฟล์ใบรับรองเป้าหมาย และหลังจากอัปเดตแล้วต้องโหลดซ้ำหรือรีสตาร์ทบริการมิดเดิลแวร์ที่เกี่ยวข้อง บทความนี้อธิบายการกำหนดค่าสิทธิ์ขั้นต่ำที่แนะนำในสถานการณ์มิดเดิลแวร์ประเภทต่าง ๆ
คำสั่ง reload / restart ของมิดเดิลแวร์ถูกกำหนดไว้ในฟิลด์ servers[].after_script ของ config.yaml ผู้ใช้สามารถปรับเปลี่ยนได้ตามสภาพแวดล้อมจริง clmBot ไม่จำเป็นต้องทำงานด้วยบัญชีสิทธิ์สูง เช่น root หรือ Administrator ในระยะยาว
หลักการสิทธิ์ขั้นต่ำ
แนะนำให้ใช้บัญชีระบบเฉพาะ (เช่น clmbot) เพื่อรัน clmBot:
- ให้สิทธิ์บัญชีดังกล่าวเฉพาะที่จำเป็นสำหรับการอ่านการกำหนดค่า clmBot ไดเรกทอรีบันทึก และจุดติดตั้งใบรับรองเป้าหมายเท่านั้น
- ให้สิทธิ์เขียนเฉพาะไฟล์ใบรับรอง ไฟล์คีย์ส่วนตัว และไดเรกทอรีที่เกี่ยวข้องซึ่งจัดการโดย clmBot เท่านั้น
- อนุญาตเฉพาะคำสั่ง reload / restart ของมิดเดิลแวร์ที่ผ่านการยืนยันแล้วเท่านั้น
before_scriptและafter_scriptต้องผ่านการตรวจสอบโดยเจ้าหน้าที่ก่อนจึงจะอนุญาตทีละรายการ
ไม่แนะนำ:
- ให้ clmBot ทำงานในฐานะ
rootหรือAdministratorในระยะยาว - เปิดสิทธิ์การควบคุมไดเรกทอรีการกำหนดค่ามิดเดิลแวร์ ไดเรกทอรีใบรับรอง หรือบริการระบบโดยรวมให้แก่ clmBot
- มอบสิทธิ์การดำเนินการแบบไม่จำกัดหรือ
NOPASSWD: ALLให้แก่bash,powershell.exe,systemctl
ข้อกำหนดสิทธิ์ของแต่ละมิดเดิลแวร์
| มิดเดิลแวร์ | สิทธิ์ที่ต้องการ | ตัวอย่าง after_script |
|---|---|---|
| nginx | สิทธิ์การอ่านและเขียนไฟล์ใบรับรอง (.crt), CA chain (ไม่บังคับ), คีย์ส่วนตัว (.key) และไดเรกทอรีที่ไฟล์เหล่านั้นอยู่ เพื่อใช้เขียนใบรับรองใหม่และสร้างข้อมูลสำรอง .bak | nginx -t && nginx -s reload |
| Apache | สิทธิ์ในการอ่านและเขียนของไดเรกทอรีที่ SSLCertificateFile, SSLCertificateChainFile, SSLCertificateKeyFile ตั้งอยู่ | systemctl restart httpd.service หรือ systemctl restart apache2.service |
| Tomcat | สิทธิ์ในการอ่านและเขียนของใบรับรอง PEM/คีย์ส่วนตัว หรือไฟล์ JKS keystore และไดเรกทอรีที่ตั้งอยู่ | JAVA_HOME + shutdown.sh + startup.sh |
| IIS | นำเข้า PFX และอัปเดตการผูกไซต์ด้วยสคริปต์ PowerShell ในตัวของ clmBot ต้องใช้สิทธิ์ผู้ดูแลระบบ; การสร้างและล้างไฟล์ PFX ชั่วคราว | ไม่ต้องกำหนดค่า สคริปต์ในตัวจัดการให้อัตโนมัติ |
- สคริปต์ที่สร้างขึ้นโดยอัตโนมัติผ่านฟังก์ชันการค้นพบใบรับรองจะใช้พาธแบบสัมบูรณ์ของคำสั่ง (เช่น nginx พร้อมพารามิเตอร์
-p,-cและsystemctlใช้พาธแบบสัมบูรณ์) โปรดยึดตามservers[].after_scriptที่สร้างขึ้นจริง - หาก Tomcat ถูกจัดการโดย systemd สคริปต์ที่สร้างขึ้นโดยอัตโนมัติจะเป็น
systemctl restart <tomcat 服务名>แทนshutdown.sh/startup.sh
ตัวอย่างการกำหนดค่า Linux sudoers
ตัวอย่างต่อไปนี้แสดงเฉพาะระดับสิทธิ์การอนุญาต โปรดปรับพาธจริงตามเครื่องเป้าหมาย
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
ตัวอย่างสิทธิ์ของไดเรกทอรีใบรับรอง
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
หากต้องการอนุญาตให้ clmBot เขียนและสำรองไฟล์ข้างต้น สามารถใช้ ACL เพื่อกำหนดสิทธิ์อย่างแม่นยำได้ดังนี้:
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/site.key
รายการตรวจสอบสิทธิ์ก่อนเปิดใช้งาน
ก่อนปรับใช้ clmBot ขอแนะนำให้ยืนยันการกำหนดค่าสิทธิ์ต่อไปนี้ทีละรายการ
- clmBot ใช้บัญชีเฉพาะในการทำงานหรือไม่ แทนที่จะใช้
rootหรือผู้ดูแลระบบ config.yamlอนุญาตให้เฉพาะบัญชีที่จำเป็นอ่านและเขียนเท่านั้นหรือไม่- ไฟล์ใบรับรองที่
servers[].formatแต่ละรายการชี้ไป เปิดสิทธิ์อ่านและเขียนที่จำเป็นเท่านั้นหรือไม่ - ไดเรกทอรีที่เก็บไฟล์ใบรับรอง อนุญาตให้สร้างและล้างไฟล์สำรอง
.bakหรือไม่ before_scriptและafter_scriptได้รับการตรวจสอบโดยเจ้าหน้าที่แล้วหรือไม่- sudoers มีเฉพาะคำสั่งที่ตรงกันเท่านั้นหรือไม่ แทนที่จะเป็น
ALL,bashหรือsystemctlแบบเต็ม - สิทธิ์ reload หรือ restart ของ nginx / Apache / Tomcat ครอบคลุมเฉพาะอินสแตนซ์เป้าหมายหรือไม่
- โหมดบริการ (
clm-bot server) ที่อยู่และพอร์ตที่监听 สอดคล้องกับนโยบายไฟร์วอลล์ของโฮสต์หรือไม่