Bagaimana cara memaksa grup dan izin untuk file yang dibuat di dalam direktori tertentu?

27

Untuk file yang dibuat dari akun pengguna testuser di direktori / var / www, saya perlu mereka memiliki g + rwx sebagai izin, dan www-data sebagai grup.

Bagaimana saya bisa mencapai ini?

Saya membuat file melalui SSH.

Mr.Gando
sumber
1
Bagaimana pengguna Anda membuat file? Melalui FTP stor/ appe? Melalui HTTP PUT? Melalui akun shell? Detail-detail ini penting, karena mereka sangat memengaruhi jawaban yang mungkin, dan perlu ada dalam pertanyaan Anda.
JdeBP
Terima kasih atas masukannya :), saya membuat semuanya melalui SSH.
Mr.Gando

Jawaban:

53

Untuk mengatur kelompok, memberikan /var/wwwyang setgid bit:

chgrp www-data /var/www
chmod g+s /var/www

Untuk juga menyesuaikan subdirektori: find /var/www -type d -exec chmod g+s {} +

Ini akan membuat semua file yang baru dibuat mewarisi grup direktori induk, bukan pengguna.


Untuk mengatur izin grup default, Anda harus menggunakan ACL . Tetapkan ACL "default":

setfacl -m "default:group::rwx" /var/www

Untuk juga menyesuaikan subdirektori: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Catatan: Sistem file harus memiliki dukungan ACL yang diaktifkan. Terkadang diaktifkan secara default; pada ext3 atau ext4 Anda mungkin mendapatkan "Operasi tidak didukung", dalam hal ini harus diaktifkan secara manual:

  • Untuk sistem file yang saat ini dipasang: mount -o remount,acl /

  • Secara permanen - salah satu metode berikut:

    • di tingkat fstab: edit /etc/fstabuntuk ada acldi bidang opsi

    • di tingkat sistem file: tune2fs -o acl /dev/diskname

grawity
sumber
Anda tidak bisa mendapatkan subdirektori dengan chmod -R g + s / var / www? Sepertinya Anda tidak perlu perintah find.
bobpaul
4
@obobul: Tidak, karena chmodjuga akan mendapatkan semua file.
grawity
Perhatikan bahwa beberapa perintah, khususnya install, entah bagaimana berhasil melewati ACL direktori default.
Ulrich Schwarz
@ kegembiraan Ini adalah jawaban yang sangat bagus dan saya yakin ada solusi di sana untuk masalah saya, tapi saya tidak bisa mengatasinya. Saya memiliki /var/www/html/projectsfolder dan ketika www-data membuat file memiliki rw-rw-rizin tetapi ketika saya melakukan sesuatu di konsol itu membuat file dengan rw-r--r. Bagaimana saya bisa memaksa file yang baru dibuat untuk selalu memiliki rw-rw-rizin?
lewis4u
@ lewis4u: Secara global atau per-direktori? Izin default global (well, per-proses) dikendalikan oleh umask. Izin default per-direktori dapat diubah menggunakan setfaclseperti pada posting utama.
grawity
3

Ini mungkin membuat beberapa orang terjebak dengan jawaban 'grawity' pada setgid, jika grup folder berbeda dari milik Anda, Anda mungkin perlu menjalankan chmod sebagai root tetapi Anda tidak akan mendapatkan kesalahan yang mengindikasikan Anda perlu melakukan ini.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set
LukePH
sumber
Saya mencabut rambut saya sebelum saya berlari melintasi ini. Terima kasih.
AndrewStevens
0

Grup file yang dibuat oleh pengguna adalah grup pengguna tersebut (di / etc / group). Izin dikendalikan oleh parameter UMASK lihat ini

DrNoone
sumber