ฉันสร้าง Dockerfile ใช้ userid ปัจจุบันของฉันเพื่อเรียกใช้แอปพลิเคชันเพื่อให้คอนเทนเนอร์นักเทียบท่าทำงานในสิทธิ์เดียวกันกับผู้ใช้ปัจจุบันของฉัน โดยพิจารณาจากคอนเทนเนอร์ที่เมานต์โฟลเดอร์ของโฮสต์เพื่อทำงาน
ฉันไม่ใช่รูทสำหรับระบบโฮสต์ (โลคัล) ของฉัน เพื่อให้ชีวิตของฉันง่ายขึ้น ฉันยังเพิ่ม root, sudo group ให้กับบัญชี Docker image นี้ด้วย ดังนั้นฉันจึงสามารถทำงาน sudo เพื่อติดตั้งสิ่งต่างๆ ได้
นี่คือส่วนหนึ่งของ Dockerfile:
(อูบุนตู 18.04)
ARG USERNAME='ทดสอบ'
ARG UID=1000
ARG GID=1000
รัน apt-get update && apt-get install -yq openssh-server sudo
RUN groupadd -g $GID ดีบักกรุ๊ป
RUN useradd -rm -d /home/$USERNAME -s /bin/bash -u $UID -g $GID -G ล้อ $USERNAME
RUN echo $USERNAME:test | รหัสผ่าน
เมื่อฉันสร้างอิมเมจนักเทียบท่า ฉันใช้
นักเทียบท่า build --build-arg UID=$(id -u) --build-arg GID=$(id -g) --build-arg USERNAME=$(whoami)
เพื่อส่งต่อชื่อผู้ใช้และรหัสผู้ใช้ของฉัน
และเมื่อฉันเรียกใช้อิมเมจนักเทียบท่า (เพื่อสร้างคอนเทนเนอร์นักเทียบท่า) ฉันยังใช้
นักเทียบท่าเรียกใช้ --detach -u $(id -u):$(id -g)
ทุกอย่างเป็นไปด้วยดีจนถึงจุดนี้ เมื่อฉันใช้ 'นักเทียบท่า exec -it xxx bash' เพื่อเข้าสู่ระบบคอนเทนเนอร์นี้ ชื่อผู้ใช้ของฉันถูกต้อง (เบน) รหัสผู้ใช้ของฉันถูกต้อง (10023) รหัส -G
แสดงว่าฉันอยู่ใน 3 กลุ่ม: 10001 (debuggroup), 0 (root), 27 (sudo)
10001 คือรหัสกลุ่มจริงของฉันถ้าฉันเรียกใช้ รหัส -g
ในโฮสต์
นี่คือการเปลี่ยนแปลง:
ในโฮสต์ นอกจากกลุ่ม 10,001 แล้ว ฉันยังเป็นสมาชิกของกลุ่ม 10022 และ 10033 ดังนั้นฉันจึงมีสิทธิ์ในโฟลเดอร์เฉพาะ ตอนนี้อยู่ในคอนเทนเนอร์ เนื่องจากผู้ใช้ไม่ได้อยู่ใน 10022 และ 10033 ฉันไม่สามารถเข้าถึงโฟลเดอร์นี้ได้
ดังนั้นฉันจึงเปลี่ยน เรียกใช้นักเทียบท่า
คำสั่งไปที่:
นักเทียบท่าเรียกใช้ --detach -u $(id -u):$(id -g) $(id -G | sed -e 's/\</--group-add /g')
มันใช้งานได้จริง และฉันสามารถเข้าถึงโฟลเดอร์ของฉันได้แล้ว
รหัส -G
แสดงว่าฉันอยู่ใน 3 กลุ่ม: 10001 (debuggroup), 10022 (ไม่มีชื่อ), 10033 (ไม่มีชื่อ)
แต่:
ฉันไม่ได้เป็นสมาชิกของ sudo และ root อีกต่อไป สิ่งที่น่าสนใจคือ แมว /etc/group
แสดงว่าฉันยังอยู่ในกลุ่ม sudo และ root แต่ฉันไม่ได้รับอนุญาตให้ sudo อีกต่อไป
ben@a1559a984ac0:/$ grep เบน /etc/group
รูท:x:0:เบน
sudo:x:27:เบ็น
ben@a1559a984ac0:/$ sudo ls
[sudo] รหัสผ่านสำหรับเบ็น:
เบ็นไม่ได้อยู่ในไฟล์ sudoers เหตุการณ์นี้จะถูกรายงาน
มีบางโพสต์ StackExchange ที่พูดถึงความคลาดเคลื่อนเกี่ยวกับกลุ่ม แต่ฉันไม่เห็นวิธีแก้ไขปัญหานี้: บัญชีของฉันอยู่ใน /etc/group แต่ไม่ได้อยู่ใน "groups" และ "id -G" ทำไม " --group-add" ของ เรียกใช้นักเทียบท่า
คำสั่งลบกลุ่มที่มีอยู่ที่ฉันอยู่ ?
ฉันเดาว่าฉันสามารถฮาร์ดโค้ด " --group-add 0 " เพื่อเพิ่มตัวเองในรูทได้ แต่ก็ยังน่าหงุดหงิด (ไม่สง่างาม) ข้อเสนอแนะใด ๆ
ไฟล์นักเทียบท่าสำหรับ Ubuntu 18.04 แต่ฉันเดาว่าไม่เกี่ยวข้องกับเวอร์ชัน