ไดเรกทอรี setgid มีวัตถุประสงค์อะไร?


12

ฉันรู้ว่า setgid ทำงานอย่างไร แต่ฉันไม่รู้ว่าทำไมมันถึงได้รับการออกแบบมีตัวอย่างใดที่แสดงให้เห็นถึงปัญหาที่แก้ได้

คำตอบ:


19

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


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

ใช่คุณถูกต้องผู้ใช้รายอื่นสามารถแชร์ (อ่าน) ไฟล์ที่คุณสร้างขึ้นในไดเรกทอรี setgid แต่สิทธิ์การเขียนกลุ่ม (g + w) ไม่ได้รับการสืบทอดในไดเรกทอรี setgid และทำให้ผู้ใช้รายอื่นไม่สามารถผนวกเข้ากับ ไดเรกทอรีที่คุณสร้างขึ้นในไดเรกทอรี setgid ซึ่งเป็นการ จำกัด การใช้งาน ดังนั้นฉันมีคำถามนี้มันช่วยแก้ปัญหาการอ่านแบบแชร์ของ CVS แต่ไม่แชร์การเขียนไปยังไดเรกทอรีที่สร้างขึ้นใหม่ ??
XièJìléi

1
นั่นคือเหตุผลที่คุณต้องการใช้การตั้งค่า umask ที่เหมาะสม ตัวอย่างเช่น umask 007 จะปล่อยให้สิทธิ์เต็มรูปแบบสำหรับผู้ใช้และกลุ่ม แต่ไม่มีสำหรับผู้อื่น
andol

13

การใช้งานหลักคือการสงวนเจ้าของกลุ่มของแผนผังไฟล์:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

สิ่งนี้มีแนวโน้มที่จะเป็นประโยชน์ในสภาพแวดล้อมที่ผู้ใช้ที่แตกต่างกันจะสร้าง / แก้ไขไฟล์ / dirs ภายใต้ไดเรกทอรี: เมื่อทุกไฟล์ / dirs ใช้กลุ่มเดียวกันผู้ใช้ทุกคนสามารถแก้ไข / เปลี่ยนไฟล์ / dirs (สิทธิ์อนุญาต): เช่น "xyz เป็นเจ้าของไฟล์ abc ดังนั้นฉันจึงไม่สามารถแก้ไขได้"

ทางเลือกอื่นในการใช้ setgid ด้วยวิธีนี้คือตัวเลือกเมานต์ระบบไฟล์grpid

จากภูเขาคน:

grpid หรือ bsdgroups / nogrpid หรือ sysvgroups

ตัวเลือกเหล่านี้จะกำหนดกลุ่มที่ไฟล์ที่สร้างขึ้นใหม่จะได้รับ เมื่อ grpid ถูกตั้งค่ามันจะใช้ id กลุ่มของไดเรกทอรีที่มันถูกสร้างขึ้น มิฉะนั้น (ค่าเริ่มต้น) จะใช้ fsgid ของกระบวนการปัจจุบันเว้นแต่ไดเรกทอรีมีการตั้งค่าบิต setgid ในกรณีที่จะใช้เวลา gid จากไดเรกทอรีหลักและยังได้รับการตั้งค่าบิต setgid หากมันเป็นไดเรกทอรีตัวเอง

เมื่อเปิดใช้งานไฟล์ / dirs ที่สร้างขึ้นบนระบบไฟล์ที่ติดตั้ง grpid จะสืบทอดกลุ่มของไดเรกทอรีหลัก:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

ฉันพบว่าใช้ตัวเลือกgrpidอย่างเหมาะสมลดโอกาสในการเกิดข้อผิดพลาดของมนุษย์ (เนื่องจากระบบไฟล์ทำงานได้โดยไม่คำนึงถึงสิทธิ์ dir)

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