Mendapatkan file baru untuk mewarisi izin grup di Linux

87

Saya mengalami masalah dengan izin pada server Linux. Saya sudah terbiasa dengan BSD. Ketika sebuah direktori dimiliki oleh suatu grup, pengguna yang memilikinya bukan dalam seperti data-www, file yang dibuat di dalamnya akan dimiliki oleh grup itu. Ini penting karena saya ingin file dapat dibaca oleh server web (yang saya tidak akan jalankan sebagai root) tetapi agar pengguna masih dapat meletakkan file baru di direktori. Saya tidak dapat menempatkan pengguna dalam data-www karena mereka dapat membaca setiap situs web pengguna lainnya.

Saya ingin server web membaca semua situs web, saya ingin pengguna dapat mengubah situs mereka sendiri.

Izin diatur seperti ini pada folder saat ini ....

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Ini adalah perilaku standar pada BSD untuk izin untuk bekerja dengan cara ini. Bagaimana saya membuat Linux melakukan ini?

John Tate
sumber
2
Bisakah Anda menggunakan ACL?
slm

Jawaban:

128

Kedengarannya seperti Anda menggambarkan fungsionalitas bit setgid di mana ketika direktori yang telah ditetapkannya, akan memaksa file baru yang dibuat di dalamnya untuk mengatur grup mereka ke grup yang sama yang ditetapkan pada direktori induk.

Contoh

$ whoami
saml

$ groups
saml wheel wireshark

setup direktori dengan perms + kepemilikan

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

sentuh file sebagai saml di dir ini

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

Ini akan memberi Anda kira-kira seperti apa yang Anda inginkan. Jika Anda benar-benar menginginkan apa yang telah Anda jelaskan, saya pikir Anda harus menggunakan fungsionalitas Daftar Kontrol Akses untuk mendapatkannya (ACL).

ACL

Jika Anda ingin mendapatkan kontrol lebih besar atas izin pada file yang dibuat di bawah direktori somedir,, Anda dapat menambahkan aturan ACL berikut untuk mengatur izin default seperti itu.

sebelum

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

mengatur izin

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Perhatikan +pada bagian akhir, itu berarti direktori ini memiliki ACL yang diterapkan padanya.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

setelah

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Perhatikan dengan izin default ( setfacl -Rdm) yang disetel sehingga izinnya adalah ( r-x) secara default ( g:apache:rx). Ini memaksa semua file baru untuk hanya rmengaktifkan bitnya.

slm
sumber
Itu sepertinya memberikan fungsionalitas yang saya inginkan, terima kasih.
John Tate
Ini sepertinya juga memecahkan masalah saya. Namun, saya tidak begitu mengerti kalimat terakhir: "Ini memaksa semua file baru untuk hanya mengaktifkan r bit mereka." Mengapa izin x tidak diaktifkan? Apakah ada cara untuk mengaktifkannya secara default ??
yaobin
1
@ Ohobin Saya pikir ini adalah masalah keamanan, Anda tidak benar-benar ingin memiliki file yang dapat dieksekusi secara default
cdarken
Ini tidak berhasil unzip?
datan.io
@ datan.io - lihat halaman manual unzip. Khususnya -Xsakelar.
slm
37

TL: DR; untuk membuat file baru mewarisi grup folder penampung lakukan:

$ chmod g+s somefolder

Catatan: tersirat dalam jawaban yang diterima, ini hanya cuplikan.

alo Malbarez
sumber
3
setgid berarti bahwa baru file dan folder akan memiliki kelompok yang tepat, tapi ingat bahwa jika Anda memindahkan file ke pohon, mereka tidak akan memiliki pemilik yang tepat dikonfigurasi. Pendekatan ACL mengatasi itu (secara umum).
Chris Morgan
@ ChrisMorgan bagaimana cara mengatasinya? Solusi dari jawaban yang diterima tidak melakukan apa pun untuk file yang dipindahkan dalam kasus saya.
Dan M.
@DanM .: dengan mode file, Anda menetapkan izin yang tidak diwariskan; tetapi dengan ACL, Anda menyetel perizinan yang sedang mewarisi (meskipun anak-anak dapat menentukan ACL mereka sendiri yang menimpa itu), diperiksa pada saat runtime.
Chris Morgan
@ Chrisorgan, ya. Bagaimana kamu melakukannya? Solusi menggunakan formulir diterima ACL jawaban tidak bekerja.
Dan M.
10

Sebagai pelengkap jawaban slm, perhatikan bahwa, pada sistem file ext2 / 3/4, Anda dapat mereplikasi perilaku BSD yang Anda gambarkan dengan menggunakan bsdgroupsopsi mount pada partisi. Dari mount(1)halaman manual:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
user60039
sumber