it-swarm-id.com

Jadikan semua file baru di direktori dapat diakses oleh grup

Misalkan saya memiliki dua pengguna Alice dan Bob dan sebuah grup GROUPNAME dan folder foo, kedua pengguna adalah anggota GROUPNAME (menggunakan Linux dan ext3).

Jika saya menyimpan file Alice pengguna di bawah foo, izinnya adalah: -rw-r--r-- Alice Alice. Namun, apakah mungkin untuk mencapai bahwa setiap file yang disimpan di bawah beberapa subdirektori dari foo memiliki izin -rwxrwx--- Alice GROUPNAME (mis. pemilik Alice, grup GROUPNAME)?

132
student

Anda dapat mengontrol bit izin yang ditetapkan dengan umask, dan grup dengan membuat direktori setgid ke GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

Perhatikan bahwa Anda harus melakukan chgrp/chmod untuk setiap subdirektori; itu tidak merambat secara otomatis (yaitu, tidak ada direktori yang ada atau kemudian dibuat di bawah direktori setgid akan menjadi setgid , meskipun yang terakhir akan berada di grup GROUPNAME).

Perhatikan juga bahwa umask adalah atribut proses dan berlaku untuk semua file yang dibuat oleh proses itu dan anak-anaknya (yang mewarisi umask yang berlaku di orang tuanya pada waktu fork() waktu) . Pengguna mungkin perlu mengatur ini dalam ~/.profile, Dan mungkin perlu diwaspadai untuk hal-hal yang tidak terkait dengan direktori Anda yang memerlukan izin berbeda. modul semoga bermanfaat jika Anda memerlukan pengaturan berbeda saat melakukan hal yang berbeda.

Anda dapat mengontrol sesuatu dengan sedikit lebih baik jika Anda dapat menggunakan POSIX ACLs; harus dimungkinkan untuk menentukan mask perizinan dan grup, dan membuatnya disebarluaskan dengan bijaksana. Dukungan untuk POSIX ACL agak bervariasi.

96
geekosaur

Jika memungkinkan, gunakan daftar kontrol akses (ACL) .

Di Linux, pastikan sistem file yang Anda gunakan mendukung ACL (kebanyakan sistem file unix melakukannya). Anda mungkin perlu mengubah opsi pemasangan untuk mengaktifkan ACL: dengan ext2/ext3/ext4, Anda perlu menentukan opsi pemasangan acl secara eksplisit, jadi entri dalam /etc/fstab akan terlihat seperti /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Lari mount -o remount,acl / untuk mengaktifkan ACL tanpa me-reboot. Juga instal alat-alat baris perintah ACL getfacl dan setfacl, biasanya disediakan dalam paket yang disebut acl.

Sekarang setelah pengaturan satu kali selesai, ubah ACL direktori untuk memberikan izin menulis grup dan membuat izin ini diwarisi oleh file yang baru dibuat. Di bawah Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

Jika ACL bukan opsi, buat direktori yang dimiliki oleh grup GROUPNAME, dan tetapkan izinnya menjadi 2775 atau 2770: chmod g+rwxs /path/to/directory. s di sini berarti bit setgid; untuk direktori, itu berarti bahwa file yang dibuat dalam direktori ini akan menjadi milik grup yang memiliki direktori.

Anda juga perlu mengatur Alice dan Bob mask untuk membuat semua file mereka dapat ditulis grup secara default. Umask default pada sebagian besar sistem adalah 022, artinya file dapat memiliki semua izin kecuali tulis oleh grup dan lainnya. Ubah itu menjadi 002, artinya hanya melarang izin menulis-oleh-lainnya. Anda biasanya akan meletakkan pengaturan itu di ~/.profile:

umask 002    # or 007 to have files not readable by others

Pertanyaan ini sangat cocok untuk linux acl . Karena Anda tidak menyatakan OS Anda, saya akan menganggap Linux sebagai berikut. Berikut adalah contoh sesi.

Saya tidak tahu tutorial acl yang benar-benar bagus, tetapi Anda bisa melakukan lebih buruk daripada http://www.vanemery.com/Linux/ACL/linux-acl.html

Perhatikan bahwa default acl berperilaku seperti umask lokal. Karena setidaknya di Linux, umasks diterapkan secara global, ini adalah satu-satunya cara saya tahu untuk mendapatkan efek dari umask lokal. Untuk beberapa alasan fitur ini sedikit dikenal. Net dipenuhi dengan orang-orang yang bertanya tentang override umask lokal, tetapi hampir tidak ada yang berpikir untuk menggunakan acl.

Perhatikan juga bahwa Anda perlu me-mount partisi tempat Anda bekerja dengan dukungan acl, mis.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

Sesi berikut:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Setel grup foo menjadi staff, dan atur acl grup dan pengguna foo ke rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

Tetapkan akun default pengguna dan grup ke rwx juga. Ini mendefinisikan izin yang diwarisi oleh file dan direktori dari foo. Jadi semua file dan direktori yang dibuat di bawah foo akan memiliki izin grup rw.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

Sekarang buat beberapa file dalam foo sebagai pengguna faheem dan john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Daftar file. Perhatikan bahwa kedua file yang dimiliki oleh faheem dan file yang dimiliki oleh john dibuat dengan izin grup rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
24
Faheem Mitha