อนุญาตให้ผู้ใช้อ่านโฮมไดเร็กตอรี่ของผู้ใช้คนอื่น ๆ


10

ฉันยังใหม่ต่อการดูแลระบบและฉันมีคำถามเกี่ยวกับการอนุญาต administrationฉันมีกลุ่มที่เรียกว่า ภายในadministrationกลุ่มผมมีผู้ใช้user1, user2, ,user3 superuserผู้ใช้ทั้งหมดอยู่ในadministrationกลุ่ม ตอนนี้ฉันต้องให้สิทธิ์แก่ผู้ใช้superuserเพื่อให้สามารถดู/homeไดเรกทอรีของผู้ใช้รายอื่น แต่ผมไม่ต้องการuser1, user2, user3เพื่อดูบ้านของผู้ใช้อื่น ๆ อื่นที่ไม่ใช่ตัวเอง (นั่นคือuser1ควรจะสามารถเห็นuser1บ้านของคนอื่นได้เท่านั้น)

ฉันสร้างผู้ใช้และกลุ่มและมอบหมายผู้ใช้ทั้งหมดให้กับกลุ่ม ฉันจะระบุการอนุญาตสำหรับsuperuserตอนนี้ได้อย่างไร

กล่าวอีกนัยหนึ่งฉันคิดว่ามีสองกลุ่ม (พูดNormalUsersและSuperuser) NormalUsersกลุ่มจะมีผู้ใช้user1, และuser2 กลุ่มเดียวจะมีผู้ใช้ ตอนนี้ฉันจำเป็นต้องมีการเข้าถึงไฟล์ของผู้ใช้ในกลุ่มอย่างสมบูรณ์ เป็นไปได้ใน Linux?user3SuperuserSuperuserSuperuserNormalUsers



ในคำถามก่อนหน้าของฉันฉันกังวลเกี่ยวกับการแก้ไขไฟล์ / etc / sudoers และทำให้ผู้ใช้เป็นผู้ดูแลระบบบางส่วน ที่นี่ฉันพยายามแก้ไขการอนุญาตของผู้ใช้ภายใน ใช่มันคล้ายกับสิ่งที่ฉันพยายามที่จะบรรลุ แต่กำลังพยายามที่จะเข้าใกล้วิธีการที่แตกต่างกัน
Ramesh

คำตอบ:


10

หากผู้ใช้มีความร่วมมือคุณสามารถใช้รายการควบคุมการเข้าถึง (ACL) ตั้ง ACL ในไดเรกทอรีบ้านของuser1(และเพื่อน) superuserที่ทุนอ่านเข้าถึง ตั้งค่า ACL เริ่มต้นเช่นกันสำหรับไฟล์ที่สร้างขึ้นใหม่และ ACL ในไฟล์ที่มีอยู่

setfacl -R -m user:superuser:rx ~user1
setfacl -d -R -m user:superuser:rx ~user1

user1 สามารถเปลี่ยน ACL ในไฟล์ของเขาได้หากต้องการ

หากคุณต้องการที่จะมักจะให้superuserการเข้าถึงแบบอ่านไปuser1ของไฟล์ที่คุณสามารถสร้างมุมมองของผู้ใช้อื่นไดเรกทอรีบ้านกับสิทธิ์ที่แตกต่างกันกับbindfs

mkdir -p ~superuser/spyglass/user1
chown superuser ~superuser/spyglass
chmod 700 ~superuser/spyglass
bindfs -p a+rX-w ~user1 ~superuser/spyglass/user1

ไฟล์ที่เข้าถึงผ่าน ~ superuser / spyglass / user1 สามารถอ่านได้ทั่วโลก นอกจากสิทธิ์~superuser/spyglass/user1เป็นมุมมองของuser1โฮมไดเร็กตอรี่ของ เนื่องจากsuperuserเป็นผู้ใช้รายเดียวที่สามารถเข้าถึง~superuser/spyglassได้เท่านั้นsuperuserจึงจะได้รับประโยชน์จากสิ่งนี้


setfacl -R -m user:superuser:rx ~user1ในระบบของฉันสิทธิ์และชื่อผู้ใช้ที่จะสลับ:
Aurélien Ooms

10

คุณสามารถใช้ ACL เพื่อให้สิทธิ์การเข้าถึงไดเรกทอรีเฉพาะกับกลุ่มใดก็ได้

ตัวอย่างเช่นถ้าคุณวิ่งsetfacl -m g:dba:rwx /home/fooสมาชิกของกลุ่ม dba จะมีสิทธิ์ rwx อยู่โดยไม่คำนึงว่ากลุ่มใดเป็นเจ้าของไดเรกทอรี

คุณอาจต้องการตั้งค่า "เริ่มต้น" ACL (ACL สำหรับวัตถุที่สร้างขึ้นใหม่ภายในไดเรกทอรี) เพื่อรวมสิทธิ์นี้ด้วย


ใช่แน่นอน .. ฉันก็รู้เหมือนกัน แต่ก็ยังไม่แน่ใจว่าควรให้ ACLs ในเซิร์ฟเวอร์สำหรับผู้ใช้ LDAP หรือไม่
Ramesh

@Ramesh ถ้าผู้ใช้ในระบบ (เพราะคุณใช้ nss-ldap, sssd ฯลฯ ) ฉันก็ไม่แน่ใจว่าทำไมมันถึงไม่เป็นไร
Derobert

ฉันพยายามทำซ้ำสิ่งนี้ในเตียงทดสอบ เมื่อฉันเข้าสู่ระบบในฐานะผู้ใช้ (เช่น foo) ฉันเห็นข้อความเตือนว่า "การอนุญาตควรถูกตั้งค่าเป็น 644" ฉันเชื่อว่าคำเตือนสามารถละเว้นได้ แต่ฉันไม่ต้องการให้ผู้ใช้ห้องทดลองรู้ว่าบัญชีผู้ใช้ของพวกเขาถูกบุกรุก เมื่อฉันเปลี่ยน rwx เป็นเพียง r ในคำสั่ง setfacl ฉันไม่เห็นไดเรกทอรีของ foo
Ramesh

2
@Ramesh คุณต้องการ + x เพื่อไปยังไดเรกทอรีต่างๆ ฉันไม่แน่ใจว่าสิ่งที่บอกคุณว่าไดเรกทอรีควรเป็น 644 ที่โง่มันควรจะเป็น 755 หรือคล้ายกัน แต่ไม่ว่าด้วยวิธีใดผู้ใช้จะเห็นเครื่องหมาย + ในช่องการอนุญาตของ ls และสามารถเรียกใช้ getfacl เพื่อดูได้ - ไม่ใช่ความลับ
Derobert

เอาล่ะฉันได้รับข้อความเตือนไดเร็กทอรี $ HOME ของผู้ใช้ต้องเป็นเจ้าของโดยผู้ใช้และไม่สามารถเขียนได้โดยผู้ใช้รายอื่น ฉันลบสิทธิ์การเขียนในคำสั่ง setacl และตอนนี้ฉันไม่เห็นข้อความเตือน
Ramesh

0

น่าเสียดายที่มันไม่มีวิธีการใด ๆ ที่จะทำสิ่งนี้โดยตรงบน vanilla Linux

คุณอาจจะสามารถสร้างกลุ่มใหม่ใน sudoers สำหรับผู้ดูแลระบบบางส่วนด้วยรายการสีขาวของคำสั่งที่ยอมรับได้ที่คุณต้องการให้พวกเขาทำงาน

อย่างไรก็ตามเพื่อให้ได้สิ่งที่คุณต้องการอย่างแท้จริงคุณจะต้องใช้ Apparmor หรือ SELinux เพื่อให้ได้สิ่งที่คุณต้องการ น่าเสียดายที่ไม่มีเครื่องมือเหล่านี้ติดตั้งและใช้งานได้ง่ายและตัวอย่างอยู่นอกขอบเขตของคำตอบอย่างรวดเร็วที่นี่


1
Linux สนับสนุน ACL มาระยะหนึ่งแล้ว ACL ให้คุณทำสิ่งนี้
Derobert

ใช่ฉันเพิ่งพบโซลูชันนั้นและอัปเดตคำตอบ อย่างไรก็ตามฉันยังไม่รู้ว่าสามารถใช้ในเซิร์ฟเวอร์ได้หรือไม่และสำหรับผู้ใช้ LDAP ด้วย
Ramesh

@derobert จากสิ่งที่ฉันเข้าใจมันเป็นไปไม่ได้ที่จะให้สิทธิ์ระดับ root แก่ใครบางคนผ่าน sudo ในขณะที่ใช้ ACL เพื่อ จำกัด การเข้าถึงพร้อมกัน คุณต้องใช้ SELinux หรือ MAC อื่นเพื่อให้บรรลุ
สวิส

1
ฉันคิดว่าเมื่อ OP บอกว่าผู้ใช้ "superuser" เขาหมายถึงว่า - ไม่ใช่ราก
Derobert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.