Score:1

จะรักษาความปลอดภัยกระบวนการและลูกที่แยกออกจากกันโดยใช้ setuid และ setgid ได้อย่างไร

ธง cn

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

ปัญหาคือเมื่อฉันพยายามโทร เซตุย หรือ ตั้งค่า หลังจากแยกกระบวนการลูกฉันกลับมา setuid ล้มเหลว: ไม่อนุญาตให้ดำเนินการ ไม่ว่าฉันจะทำอะไร. ฉันยังยืนยันว่า capsh -- พิมพ์ แสดงว่าฉันมี CAP_SETUID ความสามารถเมื่อเรียกใช้เชลล์เป็น ฟู ผู้ใช้ดังนั้นฉันจึงคิดว่าควรอนุญาต

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

cn flag
"กระบวนการยูนิกซ์ทั้งหมด" ยูนิกซ์ != ลินุกซ์ ฉันจะถือว่าคุณสร้างบริการ systemd ที่สร้างพาเรนต์เป็นผู้ใช้ foo และวางไข่ (สคริปต์หรือบริการ systemd ที่ 2) ย่อย แต่จะมีกระบวนการที่เป็นเจ้าของรูตเหนือพาเรนต์เสมอ ดูตัวอย่างบริการ apache (พาเรนต์เป็นรูท แต่ลูกของมันเป็นเจ้าของโดยใช้ apache)
Matt Hintzke avatar
cn flag
โชคไม่ดีที่ฉันลองทำสิ่งนี้และปรากฏว่า WSL ไม่ทำงานกับ `systemd` และเนื่องจากฉันใช้นักเทียบท่าและจำเป็นต้องพัฒนาบน Windows ดูเหมือนว่าฉันจะใช้สิ่งนั้นเป็นวิธีแก้ปัญหาไม่ได้
cn flag
คุณต้องเพิ่ม WSL ในคำถามอีกครั้ง: P สิ่งที่คุณต้องการไม่น่าจะเป็นไปได้ด้วย WSL ไม่ใช่สิ่งทดแทนการติดตั้ง Linux
Matt Hintzke avatar
cn flag
ใช่ ขอโทษ ฉันหมายความว่าซอฟต์แวร์การผลิตจะไม่ใช้ WSL ดังนั้นฉันจึงไม่ได้คิดถึงเรื่องนั้นจริงๆ แต่การดูว่าการพัฒนาทั้งหมดจะเป็นอย่างไรใน windows มันเป็นข้อกำหนดที่ฉันคิดว่า ขอบคุณ แต่ดูเหมือนว่าฉันจะไม่สามารถทำได้อย่างมีประสิทธิภาพ
NotTheDr01ds avatar
vn flag
@MattHintzke ปกติฉันไม่แนะนำเส้นทางนี้ แต่ในกรณีของคุณฉันคิดว่ามันอาจรับประกันข้อยกเว้น เนื่องจากคุณใช้ WSL เพื่อวัตถุประสงค์ในการพัฒนาเพื่อเลียนแบบระบบที่ใช้งานจริงเท่านั้น คุณอาจต้องพิจารณาสคริปต์การเปิดใช้งาน Systemd เช่น [Genie](https://github.com/arkane-systems/genie) ฉันไม่ชอบใช้สคริปต์ Systemd เหล่านี้เป็นการส่วนตัว เนื่องจากสคริปต์เหล่านี้เปลี่ยนฟังก์ชันการทำงาน WSL ไปมาก แต่อาจเป็นเส้นทางที่ถูกต้องสำหรับคุณ สคริปต์เหล่านี้ทั้งหมดมีแนวคิดทั่วไปเหมือนกันในการสร้างคอนเทนเนอร์/เนมสเปซโดยที่ Systemd เป็น PID1 และเปลี่ยนเป็นเนมสเปซนั้น
Matt Hintzke avatar
cn flag
@NotTheDr01ds อืม โอเค ฉันจะลองดู ขอบคุณ!

โพสต์คำตอบ

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