Apa tujuan dari direktori setgid?

11

Saya tahu cara kerja setgid, tetapi saya tidak tahu mengapa itu dirancang, apakah ada contoh untuk menggambarkan masalah apa yang dipecahkan?

Xiè Jìléi
sumber

Jawaban:

18

Sementara file / binary setgid mungkin tidak jelas berguna, saya pasti menemukan bit setgid sangat berguna diterapkan pada direktori. Asumsikan Anda adalah bagian dari kelompok kerja yang berbeda, yang masing-masing memiliki kelompok unix (izin) mereka sendiri. Tentunya Anda kemudian ingin meletakkan bit setgid pada folder proyek, memastikan bahwa kepemilikan grup yang tepat diterapkan ketika Anda membuat file baru, dan dengan demikian memungkinkan kolega Anda dalam grup proyek itu mengakses file-file itu?

andol
sumber
2
Jika Anda menggunakan CVS, Anda mungkin akan sangat mengenalnya karena alasan ini (jika direktori dalam repositori tidak setgid, maka Anda mendapatkan banyak kesalahan izin karena pengguna yang berbeda mencoba untuk checkout dan melakukan file)
Suppressingfire
Ya Anda benar, pengguna lain dapat membagikan (baca) file yang dibuat oleh Anda di direktori setgid, tetapi izin grup yang dapat ditulis (g + w) tidak diwarisi dalam direktori setgid, dan dengan demikian pengguna lain tidak dapat menambahkan ke sub- direktori yang Anda buat di direktori setgid, ini membatasi penggunaannya. Jadi saya punya pertanyaan ini, itu menyelesaikan masalah baca-baca CVS tetapi tidak berbagi-tulis ke direktori yang baru dibuat. ??
Xiè Jìléi
1
Itu sebabnya Anda juga ingin menggunakan pengaturan umask yang sesuai. Misalnya umask 007 akan meninggalkan izin penuh untuk pengguna dan grup, tetapi tidak untuk yang lain.
andol
13

Penggunaan utama adalah untuk melestarikan pemilik grup dari pohon file:

[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]$

Ini cenderung berguna dalam lingkungan di mana pengguna yang berbeda akan membuat / mengedit file / direktori di bawah direktori: Ketika semua file / direktori berbagi grup yang sama, semua pengguna dapat mengedit / mengubah file / direktori (izin yang diizinkan): Ini menghindari situasi seperti "xyz memiliki file abc, jadi saya tidak dapat mengeditnya".

Alternatif untuk menggunakan setgid dengan cara ini adalah opsi mount filesystem grpid .

Dari man mount:

grpid atau bsdgroups / nogrpid atau sysvgroups

Opsi ini menentukan id grup apa yang didapat oleh file yang baru dibuat. Ketika grpid diset, dibutuhkan id grup direktori tempat ia dibuat; jika tidak (default) ia mengambil fsgid dari proses saat ini, kecuali direktori tersebut memiliki set bit setgid, dalam hal ini ia mengambil gid dari direktori induk, dan juga mendapatkan set bit setgid yang ditetapkan jika itu adalah direktori itu sendiri.

Saat diaktifkan, file / dir yang dibuat pada sistem file yang dipasang grpid juga mewarisi grup direktori induk:

[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 ~]$

Saya telah menemukan menggunakan opsi grpid secara tepat mengurangi kemungkinan kesalahan manusia (karena filesystem melakukan pekerjaan, terlepas dari izin dir).

Lockie
sumber