0Pricing
Docker & DevOps Fundamentals · บทเรียน

ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน

นำแนวทางปฏิบัติที่ดีที่สุดมาใช้เพื่อรักษาความปลอดภัยของคอนเทนเนอร์ขณะทำงาน รวมถึงสิทธิ์ผู้ใช้และขีดจำกัดทรัพยากร

ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน เป็นบทเรียน Docker & DevOps Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Docker & DevOps Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

พื้นฐานความปลอดภัยขณะทำงาน

ยินดีต้อนรับสู่ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน! การสร้างอิมเมจที่ปลอดภัยเป็นสิ่งสำคัญ แต่จะเกิดอะไรขึ้นเมื่อคอนเทนเนอร์เริ่มทำงานแล้ว

บทเรียนนี้มุ่งเน้นแนวทางปฏิบัติที่ดีที่สุดในการปกป้องแอปพลิเคชันของคุณขณะที่กำลังทำงานอยู่ และจำกัดความเสียหายที่อาจเกิดจากช่องโหว่หรือการโจมตี

ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน — ภาพประกอบ 1

หลักการให้สิทธิ์เท่าที่จำเป็น

แนวคิดพื้นฐานด้านความปลอดภัยคือหลักการให้สิทธิ์เท่าที่จำเป็น ซึ่งหมายถึงการให้สิทธิ์แก่เอนทิตีหนึ่ง (เช่น คอนเทนเนอร์หรือผู้ใช้) เฉพาะสิทธิ์ที่จำเป็นอย่างยิ่งต่อการทำหน้าที่ของตน และไม่ให้มากกว่านั้น

การนำหลักการนี้มาใช้จะช่วยลดพื้นที่โจมตีและจำกัดผลกระทบหากคอนเทนเนอร์ถูกเจาะ

หลีกเลี่ยงการทำงานในฐานะรูท

โดยค่าเริ่มต้น กระบวนการภายในคอนเทนเนอร์ Docker จะทำงานในฐานะผู้ใช้ root ซึ่งมีสิทธิ์ผู้ดูแลระบบอย่างเต็มรูปแบบภายในคอนเทนเนอร์

  • ความเสี่ยง: หากผู้โจมตีควบคุมคอนเทนเนอร์ที่มีสิทธิ์รูทได้ ผู้โจมตีอาจใช้ประโยชน์จากช่องโหว่ในดีมอน Docker หรือเคอร์เนลเพื่อเข้าถึงระบบโฮสต์ในฐานะรูทได้
  • แนวทางปฏิบัติที่ดีที่สุด: ให้กระบวนการของคอนเทนเนอร์ทำงานในฐานะผู้ใช้ที่ไม่ใช่รูทเสมอ

ทำงานในฐานะผู้ใช้ที่ไม่ใช่รูท

คุณสามารถระบุผู้ใช้ (ด้วยชื่อหรือ UID) สำหรับกระบวนการของคอนเทนเนอร์ได้โดยใช้แฟล็ก --user ร่วมกับ docker run ในตัวอย่างนี้ เราเรียกใช้คำสั่ง id ในคอนเทนเนอร์ Alpine ในฐานะผู้ใช้ 1000

หากไม่มีผู้ใช้ 1000 อยู่ Docker ก็ยังคงใช้ UID นั้น

docker run --rm -it --user 1000 alpine id

ทำความเข้าใจความสามารถของ Linux

ระบบ Linux แบบดั้งเดิมมีผู้ใช้รูทที่มีสิทธิ์แบบ “ได้ทั้งหมดหรือไม่ได้เลย” ความสามารถของ Linux จะแบ่งสิทธิ์รูทอันทรงพลังออกเป็นหน่วยย่อยที่แยกจากกัน

วิธีนี้ทำให้กระบวนการมีเฉพาะอำนาจที่คล้ายสิทธิ์รูทซึ่งจำเป็นจริง ๆ (เช่น การผูกกับพอร์ตหมายเลขต่ำ การเข้าถึงเครือข่ายดิบ) โดยไม่ต้องมีสิทธิ์รูทเต็มรูปแบบ

ตัดความสามารถที่ไม่จำเป็นออก

โดยค่าเริ่มต้น คอนเทนเนอร์ Docker จะทำงานพร้อมชุดความสามารถจำนวนมาก คุณสามารถตัดความสามารถที่ไม่จำเป็นออกโดยใช้ --cap-drop เพื่อจำกัดสิ่งที่คอนเทนเนอร์ทำได้ให้มากยิ่งขึ้น

ในที่นี้ เราตัดความสามารถ NET_RAW ออก คำสั่ง ping ซึ่งต้องใช้ NET_RAW จะทำงานล้มเหลว แสดงให้เห็นถึงข้อจำกัดนี้

docker run --rm -it --cap-drop=NET_RAW alpine ping -c 1 localhost || echo "Ping failed: NET_RAW capability dropped!"

ควบคุมทรัพยากรของคอนเทนเนอร์

คอนเทนเนอร์ใช้เคอร์เนลและทรัพยากรร่วมกับโฮสต์ การใช้ทรัพยากรโดยไม่ควบคุมของคอนเทนเนอร์หนึ่งอาจทำให้เกิดการปฏิเสธการให้บริการ (DoS) ต่อคอนเทนเนอร์อื่นหรือแม้แต่ตัวโฮสต์เอง

  • ขีดจำกัด CPU: ป้องกันไม่ให้คอนเทนเนอร์ใช้รอบการประมวลผลของ CPU จนหมด
  • ขีดจำกัดหน่วยความจำ: ป้องกันไม่ให้คอนเทนเนอร์ใช้ RAM ที่มีอยู่ทั้งหมด ซึ่งช่วยป้องกันความไม่เสถียรของระบบ

กำหนดขีดจำกัดทรัพยากร

คุณสามารถกำหนดขีดจำกัด CPU และหน่วยความจำได้โดยตรงด้วย docker run ตัวอย่างนี้จำกัดหน่วยความจำไว้ที่ 128MB และจำกัดการใช้ CPU ไว้ที่ 0.5 (ครึ่งหนึ่งของแกน CPU หนึ่งแกน)

วิธีนี้ช่วยให้มั่นใจว่าคอนเทนเนอร์ของคุณทำงานได้อย่างเหมาะสมและไม่แย่งทรัพยากรจากกระบวนการอื่น

docker run --rm -it --memory="128m" --cpus="0.5" alpine sh -c "echo 'Container running with limited resources.' && free -h"

ระบบไฟล์แบบอ่านอย่างเดียว

แอปพลิเคชันจำนวนมากไม่จำเป็นต้องเขียนลงในระบบไฟล์รูทหลังเริ่มทำงาน การทำให้ระบบไฟล์เป็นแบบอ่านอย่างเดียวให้ประโยชน์ด้านความปลอดภัยอย่างมาก:

  • ป้องกันการดัดแปลง: ผู้โจมตีไม่สามารถแก้ไขไฟล์ที่มีอยู่หรือเขียนไฟล์อันตรายใหม่ได้
  • จำกัดการคงอยู่ของข้อมูล: การเปลี่ยนแปลงใด ๆ จะเกิดขึ้นชั่วคราวและสูญหายเมื่อเริ่มคอนเทนเนอร์ใหม่
  • บังคับใช้ความไม่เปลี่ยนแปลง: ส่งเสริมการออกแบบที่ให้คอนเทนเนอร์ถูกทิ้งได้และจัดการการกำหนดค่าจากภายนอก

นำคอนเทนเนอร์แบบอ่านอย่างเดียวไปใช้งาน

ใช้แฟล็ก --read-only เมื่อเรียกใช้คอนเทนเนอร์ ความพยายามใด ๆ ที่จะเขียนลงในระบบไฟล์ของคอนเทนเนอร์ (นอกเหนือจากโวลุมที่เมานต์ไว้อย่างชัดเจน) จะล้มเหลว

ลองสร้างไฟล์ในคอนเทนเนอร์แบบอ่านอย่างเดียวนี้:

docker run --rm -it --read-only alpine sh -c "touch /test.txt || echo 'Error: Cannot write to read-only filesystem!'"

ตรวจสอบความปลอดภัยขณะทำงาน

ข้อใดต่อไปนี้เป็นแนวทางปฏิบัติที่ดีสำหรับการรักษาความปลอดภัยของคอนเทนเนอร์ขณะทำงาน

ทบทวนความปลอดภัยขณะทำงาน

ทำได้ดีมาก! คุณได้เรียนรู้วิธีเพิ่มความปลอดภัยให้คอนเทนเนอร์ขณะที่กำลังทำงานแล้ว:

  • สิทธิ์เท่าที่จำเป็น: มอบเฉพาะสิทธิ์ที่จำเป็น
  • ผู้ใช้ที่ไม่ใช่รูท: หลีกเลี่ยงการเรียกใช้กระบวนการในฐานะ root
  • ความสามารถ: ตัดความสามารถของ Linux ที่ไม่จำเป็นออก
  • ขีดจำกัดทรัพยากร: ควบคุมการใช้ CPU และหน่วยความจำ
  • อ่านอย่างเดียว: ทำให้ระบบไฟล์ไม่เปลี่ยนแปลงเพื่อป้องกันการเขียน

แนวทางเหล่านี้ช่วยลดพื้นที่โจมตีและผลกระทบจากการถูกเจาะที่อาจเกิดขึ้นได้อย่างมาก ฝึกฝนต่อไปนะครับ/ค่ะ!

คำถามที่พบบ่อย

บทเรียน “ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Docker & DevOps Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน”

นำแนวทางปฏิบัติที่ดีที่สุดมาใช้เพื่อรักษาความปลอดภัยของคอนเทนเนอร์ขณะทำงาน รวมถึงสิทธิ์ผู้ใช้และขีดจำกัดทรัพยากร คุณปฏิบัติ Docker & DevOps Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Docker & DevOps Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Docker & DevOps Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Docker & DevOps Fundamentals นี้ได้ไหม

ได้ บทเรียน Docker & DevOps Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสแกนความปลอดภัยของอิมเมจคอนเทนเนอร์
  2. ความปลอดภัยของคอนเทนเนอร์ขณะทำงาน
  3. การจัดการข้อมูลลับและ RBAC
  4. นโยบายเครือข่ายและเครือข่ายตามสิทธิ์น้อยที่สุด
← กลับไปที่ Docker & DevOps Fundamentals