Skip to main content

ข้อกำหนดสิทธิ์ในการรัน

เมื่อ 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) และไดเรกทอรีที่ไฟล์เหล่านั้นอยู่ เพื่อใช้เขียนใบรับรองใหม่และสร้างข้อมูลสำรอง .baknginx -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) ที่อยู่และพอร์ตที่监听 สอดคล้องกับนโยบายไฟร์วอลล์ของโฮสต์หรือไม่