นักเทียบท่าไร้รูท

Nak Theiyb Tha Ri Ruth



Docker เป็นหนึ่งในเครื่องมือที่ทรงพลังและมีอิทธิพลมากที่สุดสำหรับการพัฒนาและปรับใช้แอปพลิเคชันสมัยใหม่ ในฐานะนักพัฒนา เราใช้สิ่งนี้บนเครื่องของเราเพื่อตั้งค่าและกำหนดค่าสภาพแวดล้อมที่ตรงกับความต้องการของแอปพลิเคชันของเราอย่างรวดเร็วภายในไม่กี่วินาที

อย่างไรก็ตาม เมื่อทำงานใน Docker เราอาจพบกรณีที่เราต้องสร้างและใช้ทรัพยากร Docker แต่ไม่มีสิทธิ์การเข้าถึงระดับรูท

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







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



นักเทียบท่าไร้รูทคืออะไร?

ตามค่าเริ่มต้น เมื่อคุณติดตั้ง Docker แล้ว Docker daemon และเครื่องมือต่างๆ จะต้องมีสิทธิ์รูทบนระบบโฮสต์ ซึ่งอาจส่งผลให้เกิดความเสี่ยงด้านความปลอดภัยอย่างมากหาก Docker ถูกโจมตี ซึ่งสามารถให้สิทธิ์การเข้าถึงรูทแก่ผู้โจมตีได้



Rootless Docker เป็นคุณสมบัติที่ช่วยให้เราใช้และรัน Docker daemon และคอนเทนเนอร์ที่เกี่ยวข้องโดยไม่ต้องมีสิทธิ์รูท





มันทำงานอย่างไร

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

เนมสเปซของผู้ใช้ – หนึ่งในคุณสมบัติที่สำคัญที่นักเทียบท่าไร้รูทใช้คือเนมสเปซของผู้ใช้ คุณลักษณะพื้นฐานของเคอร์เนล Linux ช่วยให้กระบวนการมี ID ผู้ใช้และกลุ่มที่แตกต่างกันภายในเนมสเปซเมื่อเปรียบเทียบกับภายนอก ซึ่งหมายความว่ากระบวนการสามารถทำงานในฐานะผู้ใช้รูทภายในเนมสเปซ แต่ภายนอกกระบวนการนั้นจะทำงานในฐานะผู้ใช้ทั่วไป



เครือข่าย – คุณสมบัติถัดไปของ Docker ที่ไม่มีรูทคือระบบเครือข่าย ตามค่าเริ่มต้น docker daemon ปกติอาศัยสแต็กเครือข่าย เช่น iptables และบริดจ์ที่ต้องการสิทธิ์รูท

นักเทียบท่าใช้ประโยชน์จากคุณสมบัติต่างๆ เช่น slirp4netns ซึ่งจัดเตรียมสแต็ก TCP/IP ในโหมดผู้ใช้ในนักเทียบท่าแบบไร้รูท สิ่งนี้ทำให้ Docker สามารถเข้าถึงเครือข่ายโดยไม่ต้องได้รับอนุญาตรูทบนระบบโฮสต์

พื้นที่จัดเก็บ – ส่วนสำคัญถัดไปของนักเทียบท่าแบบไร้รูทคือไดรเวอร์การจัดเก็บข้อมูล ตามค่าเริ่มต้น Docker จะใช้ไดรเวอร์การจัดเก็บข้อมูลแบบซ้อนทับ 2 ซึ่งตามที่คุณเดาได้นั้นต้องใช้สิทธิ์รูท แต่อินสแตนซ์นักเทียบท่าที่ไม่มีรูทจะใช้ไดรเวอร์ fuse-overlayfs แทน ไดรเวอร์นี้ใช้ FUSE overlay fs ซึ่งช่วยให้เราเมานต์ได้โดยไม่ต้องมีสิทธิ์รูท

ข้างต้นคือองค์ประกอบที่สำคัญบางประการของอินสแตนซ์นักเทียบท่าแบบไร้รูท โปรดจำไว้ว่านี่ไม่ได้สำรวจการทำงานทั้งหมดของนักเทียบท่าที่ไม่มีรูท พิจารณาเอกสารประกอบเพื่อเรียนรู้เพิ่มเติม

Rootless Docker – ข้อกำหนด

ให้เราย้ายจากทฤษฎีและเรียนรู้วิธีสร้างและกำหนดค่าสภาพแวดล้อม Docker ที่ไม่มีรูท

หากต้องการติดตามโพสต์นี้ ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

  1. ระบบที่ใช้ Linux พร้อมสิทธิ์รูท
  2. การเข้าถึงเครือข่าย

การกำหนดค่าระบบด้วย UIDMap

ก่อนที่จะติดตั้งและกำหนดค่า Docker เราต้องติดตั้งและกำหนดค่าระบบด้วยยูทิลิตี้ uidmap

UIDMap ช่วยให้เราสามารถจัดการการแมป UID และ GUI ของกระบวนการในระบบ Linux ในเนื้อหาของเนมสเปซของผู้ใช้ จำได้ไหมเมื่อเราพูดถึงว่า Docker ที่ไม่มีรูทใช้ประโยชน์จากเนมสเปซของผู้ใช้? เครื่องมือนี้จะช่วยให้เราระบุการแมป UID และ GID และเนมสเปซที่เกี่ยวข้องได้

เริ่มต้นด้วยการรีเฟรชแพ็คเกจระบบดังต่อไปนี้:

$ ซูโดะ ฉลาดรับการปรับปรุง

จากนั้นให้ติดตั้งยูทิลิตี้ uidmap ดังภาพ:

$ ซูโดะ apt-get ติดตั้ง uidmap -และ

การติดตั้ง Docker แบบไม่มีรูท

ขั้นตอนต่อไปคือการประมวลผลและติดตั้ง Docker ที่ไม่มีรูท เราสามารถทำได้โดยทำตามขั้นตอนง่าย ๆ ด้านล่างนี้:

เริ่มต้นด้วยการดาวน์โหลดสคริปต์ติดตั้งนักเทียบท่าแบบรูทจากลิงค์ที่แสดงด้านล่าง:

https://get.docker.com/rootless

คุณสามารถใช้ cURL หรือ WGET

$ ขด -sSL https: // get.นักเทียบท่า.com / ไม่มีราก |

โปรดทราบว่าคุณไม่สามารถรันคำสั่งข้างต้นในฐานะผู้ใช้รูทได้

เมื่อการติดตั้งเสร็จสมบูรณ์ ให้แก้ไขไฟล์ .bashrc ของคุณโดยใช้โปรแกรมแก้ไขข้อความที่คุณชื่นชอบ:

$ นาโน .bashrc

จากนั้นเพิ่มรายการต่อไปนี้ลงในไฟล์คอนฟิกูเรชัน bashrc:

ส่งออก XDG_RUNTIME_DIR = / บ้าน / อูบุนตู / .นักเทียบท่า / วิ่ง

ส่งออก เส้นทาง = / บ้าน / อูบุนตู / ถังขยะ: $พาธ

ส่งออก DOCKER_HOST =ยูนิกซ์: /// บ้าน / อูบุนตู / .นักเทียบท่า / วิ่ง / นักเทียบท่าถุงเท้า

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนผู้ใช้จาก 'ubuntu' เป็นผู้ใช้ที่คุณต้องการติดตั้ง Docker เอาต์พุตสคริปต์จะให้เนื้อหาแก่คุณเพื่อเพิ่มลงในไฟล์ .bashrc

บันทึกการเปลี่ยนแปลงและปิดตัวแก้ไข

ในขั้นตอนถัดไป เราต้องเริ่มต้น Docker daemon ที่ไม่มีรูท เราสามารถทำได้โดยใช้ systemctl ดังแสดงในคำสั่งด้านล่าง:

ระบบ --อูบุนตู เริ่มนักเทียบท่า

เมื่อเริ่มต้นแล้ว คุณสามารถใช้คำสั่ง Docker เพื่อเริ่มต้นและกำหนดค่าคอนเทนเนอร์ Docker ได้

บทสรุป

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