Score:0

gcsfuse ไม่สามารถเปิด /dev/fuse: ปฏิเสธการอนุญาต

ธง de

ฉันใช้คำสั่งต่อไปนี้ภายในคอนเทนเนอร์ในฐานะผู้ใช้ทั่วไปที่ไม่ใช่รูท

gcsfuse --foreground --debug_fuse --debug_fs --debug_gcs --debug_http my-bucket /data

และใช้งานได้ ในท้องถิ่น เมื่อฉันเริ่มคอนเทนเนอร์ด้วย --สิทธิพิเศษ และก็ไม่เป็นไร

แต่สิ่งเดียวกันนี้ใช้ไม่ได้กับ Cloud Run (เมื่อใช้สภาพแวดล้อมการดำเนินการแสดงตัวอย่างรุ่นที่ 2) ฉันได้รับข้อผิดพลาดต่อไปนี้:

2022-05-13 12:08:41.547 CEST gcs: 2022/05/13 10:08:41.546642 Req 0x1: -> ListObjects("") (46.897367ms): ตกลง
2022-05-13 12:08:41.551 CEST /usr/bin/fusermount: ไม่สามารถเปิด /dev/fuse: ปฏิเสธการอนุญาต
2022-05-13 12:08:41.551 CEST mountWithArgs: mountWithConn: Mount: mount: กำลังทำงาน /usr/bin/fusermount: exit สถานะ 1

บรรทัดบันทึกการแก้ไขข้อบกพร่องอื่นๆ ทั้งหมด, HTTP, GCS และอื่นๆ แสดงการทำงานทุกอย่าง

ฉันสร้างผู้ใช้ของฉันแบบนี้ในไฟล์ ไฟล์นักเทียบท่า

RUN useradd -lmU joe\
  && mkdir -p /ข้อมูล \
  && chown -R joe:joe /ข้อมูล
USER โจ

เดอะ เอกสารกล่าวว่า ว่าฉัน ควรรัน gcsfuse ในฐานะผู้ใช้ที่จะใช้ระบบไฟล์ ไม่ใช่รูทแต่มันใช้งานไม่ได้ มีความคิดอะไรที่ฉันทำผิด?

Priyashree Bhadra avatar
in flag
ดูที่[คำตอบ](https://stackoverflow.com/a/70430026/15803365)ผู้โพสต์คำถาม (https://stackoverflow.com/questions/70407189/unable-to-mount-bucket-with-gcsfuse-on-cloud-run) พบข้อความแสดงข้อผิดพลาดที่คล้ายกันและไม่สามารถเมานต์บัคเก็ตได้ ด้วย gcsfuse บน Cloud Run
de flag
@PriyashreeBhadra ขอบคุณ! ฉันเห็นคำถาม/คำตอบนั้นแล้ว แต่ฉันคิดว่าการใช้ `777` นั้นเป็นการเอาชนะจุดประสงค์ ด้วย 'รูท' สำหรับฉันทุกอย่างใช้งานได้ แต่เอกสารส่งเสริมว่าไม่ควรใช้ 'รูท' ดังนั้น .. IMHO นี่ถือว่าไม่เหมาะสม (จุดประสงค์คือการปฏิบัติตามแนวทาง *การรักษาความปลอดภัยเป็นอันดับแรก* เมื่อจัดการกับคอนเทนเนอร์) อาจเป็นไปไม่ได้เลย แต่นั่นคือคำตอบ! :)
Priyashree Bhadra avatar
in flag
โดยค่าเริ่มต้น ไอโหนดทั้งหมดในระบบไฟล์ gcsfuse จะแสดงว่าเป็นของ UID และ GID ของกระบวนการ gcsfuse เอง นั่นคือผู้ใช้ที่เมาต์ระบบไฟล์ 644 และ 755 เป็นสิทธิ์เริ่มต้นสำหรับไฟล์และไดเรกทอรี inodes ทั้งหมดในระบบไฟล์ gcsfuse ไม่รองรับการเปลี่ยนโหมดไอโหนด (โดยใช้ chmod(2) หรือคล้ายกัน) และการเปลี่ยนแปลงจะถูกละเว้นโดยไม่แจ้งให้ทราบ
Priyashree Bhadra avatar
in flag
เมื่อคุณต่อเชื่อมบัคเก็ตพื้นที่เก็บข้อมูลของคุณโดยใช้ gcsfuse เลเยอร์เคอร์เนลของฟิวส์จะจำกัดการเข้าถึงระบบไฟล์สำหรับผู้ใช้ที่ติดตั้งระบบไฟล์ หากคุณต้องการให้สิทธิ์การเข้าถึงแก่ผู้ใช้รายอื่น คุณสามารถแทนที่ลักษณะการทำงานนี้ด้วยตัวเลือก allow_other mount พร้อมกับแฟล็ก --uid และ --gid อย่างไรก็ตาม โปรดทราบว่าการดำเนินการนี้อาจมีผลกระทบต่อความปลอดภัย ดู[ที่นี่](https://github.com/googlecloudplatform/gcsfuse/blob/master/docs/semantics.md#inodes)สำหรับเอกสารประกอบ
de flag
`ระบบไฟล์ gcsfuse แสดงว่าเป็นเจ้าของโดย UID และ GID ของกระบวนการ gcsfuse เอง' ซึ่งเป็นสิ่งที่ฉันต้องการ เริ่ม `gcsfuse` เป็น `joe` ซึ่งใช้ไม่ได้ในขณะนี้ `ถ้าคุณต้องการให้สิทธิ์การเข้าถึงแก่ผู้ใช้รายอื่น คุณสามารถแทนที่พฤติกรรมนี้ด้วย allow_other mount' แต่ฉันไม่ต้องการ ด้วยเหตุผลที่แน่นอนที่คุณพูดถึงว่าการดำเนินการนี้มีผลกระทบด้านความปลอดภัย ฉันเริ่มเห็นว่าปัญหานี้ค่อนข้างเป็นปัญหาสภาพแวดล้อมของ Cloud Run มากกว่าปัญหา `gcsfuse` อย่างไรก็ตาม เนื่องจากผู้ใช้ Cloud Run เป็นผู้ที่สามารถใช้ประโยชน์จากสิ่งนี้ได้มากที่สุด ฉันจะเปิดคำถามนี้ไว้
Priyashree Bhadra avatar
in flag
ฉันคิดว่าฉันเห็นผู้คนจำนวนมากใช้บริการอื่นนอกเหนือจาก Cloud Run ด้วย gcsfuse (เช่น เช่น อินสแตนซ์ VM) ตามความเข้าใจของฉัน คำถามนี้ดูเหมือนจะเป็นคำถามสิทธิ์ gcsfuse มากกว่า Cloud Run สำหรับฉัน แต่ใช่ มันใช้ได้หากบุคคลไม่ต้องการทำ chmod ด้วยสิทธิ์ 777/ 666 หรือใช้ allow_other ฉันเจอ GitHub นี้ [ความคิดเห็นเกี่ยวกับปัญหา](https://github.com/GoogleCloudPlatform/gcsfuse/issues/236#issuecomment-361956965) ซึ่งดูเหมือนยุติธรรม คุณสามารถลองเพิ่มตัวเองในกลุ่มฟิวส์และเปลี่ยนกลุ่มที่จะฟิวส์ในอุปกรณ์ /dev/fuse แจ้งให้เราทราบหากเป็นไปได้สำหรับคุณ
de flag
`/dev/fuse` ใช้ได้เฉพาะเมื่อคอนเทนเนอร์เริ่มทำงานจริง ดังนั้นผู้ใช้ `joe` ของฉันที่ไม่มี `root` จะไม่สามารถเปลี่ยนความเป็นเจ้าของได้ และเนื่องจากอุปกรณ์เป็นของ `root:root` ฉันจึงทำอะไรไม่ได้เลย ฉันพยายามสร้างกลุ่ม `fuse` และเพิ่มผู้ใช้ของฉันเข้าไป แต่ ... ดูเหมือนจะไม่ได้ผล ฉันจะพยายามทุกครั้งที่มีเวลา ... แต่! สิ่งต่าง ๆ ทำงานในพื้นที่ด้วยแฟล็ก `--priviliged` ที่ส่งผ่านไปยัง 'docker run' แม้ว่าอุปกรณ์จะเป็นของ 'root:root' ในความคิดเห็นเกี่ยวกับปัญหา GitHub มีการกล่าวว่าพวกเขาเปลี่ยน *กลุ่มที่จะหลอมรวมในอุปกรณ์ `/dev/fuse`* พวกเขาจะต้องดำเนินการภายใต้ `รูท' จากนั้น
de flag
* พวกเขาต้องดำเนินการภายใต้การรูทแล้ว * ซึ่งเป็นวิธีแก้ปัญหา * ชนิดของ * แม้ว่าจะแฮ็กเล็กน้อย ขอบคุณที่พูดถึงปัญหา GitHub นี้ ฉันสมัครรับข้อมูลแล้ว!
Score:1
ธง in

สำหรับชุมชนที่ค้นหาคำตอบสำหรับคำถามนี้:

ตามนี้ครับ คำตอบการเพิ่ม -file-mode=777 -dir-mode=777 ร่วมกับคำสั่ง gcsfuse ใน gcsfuse.sh เพื่อเปิดใช้งานการอ่าน/เขียนภายในไดเรกทอรีที่ติดตั้งของที่ฝากข้อมูล GCS ควรเป็นตัวเลือกหนึ่ง แต่เนื่องจาก โคฮานี เรแบร์ต ยืนยันว่าไม่ได้มีวัตถุประสงค์เพื่อความปลอดภัย ฉันขุดเพิ่มเติมและพบข้อมูลที่เป็นประโยชน์จริงๆ:

  • โดยค่าเริ่มต้น ไอโหนดทั้งหมดในระบบไฟล์ gcsfuse จะแสดงเป็น เป็นเจ้าของโดย UID และ GID ของกระบวนการ gcsfuse เอง นั่นคือผู้ใช้ ใครติดตั้งระบบไฟล์ 644 และ 755 เป็นสิทธิ์เริ่มต้น สำหรับไฟล์และไดเร็กทอรี inodes ทั้งหมดในระบบไฟล์ gcsfuse การเปลี่ยนแปลง ไม่รองรับโหมด inode (โดยใช้ chmod(2) หรือคล้ายกัน) และมีการเปลี่ยนแปลง ถูกเพิกเฉยอย่างเงียบ ๆ

  • เมื่อคุณต่อเชื่อมบัคเก็ตของพื้นที่เก็บข้อมูลโดยใช้ gcsfuse ซึ่งเป็นเคอร์เนลของฟิวส์ เลเยอร์ จำกัด การเข้าถึงระบบไฟล์สำหรับผู้ใช้ที่ติดตั้งไฟล์ ระบบ. หากคุณต้องการให้สิทธิ์การเข้าถึงแก่ผู้ใช้รายอื่น คุณสามารถทำได้ แทนที่พฤติกรรมนี้ด้วยตัวเลือก allow_other mount พร้อมกับ แฟล็ก --uid และ --gid อย่างไรก็ตาม โปรดทราบว่าสิ่งนี้อาจมี ผลกระทบด้านความปลอดภัย ดู ที่นี่ สำหรับเอกสาร

  • หากบุคคลไม่ต้องการทำ chmod ด้วยสิทธิ์ 777/ 666 หรือใช้ allow_other เขาสามารถลองเพิ่มตัวเองในกลุ่มฟิวส์และเปลี่ยน กลุ่มที่จะฟิวส์ในอุปกรณ์ /dev/fuse ฉันเจอ GitHub นี้ ออกความคิดเห็น ซึ่งดูยุติธรรม สิ่งต่าง ๆ ทำงานในพื้นที่ด้วย แฟล็ก --privileged ส่งผ่านไปยังนักเทียบท่าทำงานแม้ว่าอุปกรณ์จะเป็นเจ้าของก็ตาม ราก:ราก. ในความคิดเห็นเกี่ยวกับปัญหา GitHub มีการกล่าวว่าพวกเขา เปลี่ยนกลุ่มที่จะฟิวส์ในอุปกรณ์ /dev/fuse พวกเขาต้องดำเนินการ ภายใต้รูทแล้วนั่นอาจเป็นวิธีแก้ปัญหาสำหรับผู้ใช้ทุกคนที่ ไม่ต้องการผ่านแฮ็ก 777/ allow_other/ --uid,--gid, 666

โพสต์คำตอบ

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