Score:0

ความแตกต่างระหว่าง /etc/group และ 'id -G' อาจเกี่ยวข้องกับการตั้งค่านักเทียบท่าหรือไม่

ธง fr

ฉันสร้าง 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 แต่ฉันเดาว่าไม่เกี่ยวข้องกับเวอร์ชัน

Ben L avatar
fr flag
อัปเดต: จริง ๆ แล้วฉันเพิ่ม `--group-add sudo ` เพื่อให้บัญชี sudo-able แต่ยังต้องการทราบวิธีแก้ปัญหาความคลาดเคลื่อน

โพสต์คำตอบ

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