Bagaimana cara menggunakan chmod pada Mac untuk membuat file baru mewarisi izin direktori induk?


23

Saya di Mac. Saya ingin membuatnya sehingga setiap file / folder baru yang dibuat dalam folder tertentu memiliki izin yang sama (bukan grup, yang sudah diurus) seperti pada direktori induk. Di Linux, saya biasanya menggunakan setfacl, tetapi sepertinya chmod di Mac mungkin bisa melakukan apa yang saya cari. Saya sudah membaca halaman manual untuk chmod, tetapi saya masih tidak tahu cara memformat perintah dengan benar untuk mendapatkan yang saya inginkan.


Saya ingin file / folder baru agar dapat dibaca dan ditulis kelompok.

Jawaban:


33

Pertama, sedikit latar belakang untuk menjelaskan apa yang terjadi: File di OS X dapat memiliki dua jenis pengaturan izin yang sangat berbeda diterapkan pada mereka: POSIX dan ACL.

File selalu (well, hampir selalu) memiliki izin POSIX yang diterapkan, terdiri dari pemilik, grup, dan lainnya (dengan beberapa kombinasi baca, tulis, dan eksekusi untuk masing-masing). Tidak ada cara untuk mengontrol pewarisan izin POSIX: item baru selalu dimiliki oleh pengguna apa pun yang menciptakannya, tugas grup diwarisi dari folder tempat mereka berada, dan aksesnya ditentukan oleh umask (yang hampir selalu: pemilik mendapat akses penuh, grup dan yang lainnya hanya baca + eksekusi untuk folder). Jadi izin POSIX tidak akan berfungsi untuk apa yang Anda coba lakukan.

File juga dapat memiliki daftar kontrol akses (ACL) yang diterapkan. Ini adalah daftar entri kontrol akses (ACE), yang masing-masing berlaku untuk pengguna atau grup, menentukan jenis akses (dengan sangat rinci), apakah mereka diizinkan atau ditolak, dan apakah ACE juga harus disalin ke item yang dibuat di dalam folder. Bagian terakhir itu adalah bagian yang membuat ini berguna untuk Anda; Anda perlu membuat ACE pada folder yang menentukan grup yang Anda inginkan, jenis akses yang Anda inginkan, dan pewarisan penuh.

chmod pada OS X dapat memanipulasi ACE dengan opsi izin + a, -a, dll. Jika saya mengerti apa yang Anda inginkan, Anda akan menggunakan ini (dengan nama grup dan jalur folder Anda diganti) untuk membuat ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Perhatikan bahwa warisan bukan "hidup", artinya tidak berlaku untuk item yang dibuat sebelum Anda menetapkan ACE, dan itu tidak berlaku untuk item yang dibuat di tempat lain dan kemudian dipindahkan ke folder. Anda dapat menerapkannya pada konten yang ada dengan menggunakan -R ( chmod -R +a ...). Saya tidak tahu cara (kecuali alat admin server Apple) untuk memaksakan pewarisan item yang dipindahkan ke folder.


Terima kasih atas penjelasannya. Saya baru saja mencobanya dan masih baru saja membuat file baru dengan pengguna baca / tulis, semua orang membaca izin. Folder induk (di luar ruangan) disetel ke 775 izin dengan pengguna saya (jhicks) sebagai pemilik dan _www sebagai grup. Saya telah menambahkan diri saya ke grup _www. drwxrwxr-x + 13 jhicks _www 442B 16 November 09:47 di luar ruangan saya menjalankan perintah Anda sebagai berikut: chmod + a "grup: _www memungkinkan daftar, add_file, cari, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_init, directory_inherit "di luar ruangan
Jeremy Hicks

ls -lhanya menampilkan izin POSIX (meskipun tanda "+" setelah izin menunjukkan bahwa ada hadiah ACL). Gunakan ls -leuntuk menunjukkan ACL juga.
Gordon Davisson

Jika nama grup memiliki spasi di dalamnya, Anda dapat menggunakan: sebagai pembatas. Misalnya, "grup: grup saya dengan spasi: izinkan"
Doug Richardson

Mengikuti chmod +a ...perintah, maka saya menciptakan abc.txt dalam folder. Beralih ke pengguna lain dan mengedit dengan TextEdit, file diindikasikan sebagai Terkunci dan tidak dapat diedit.
ohho

Saya telah melakukan beberapa permainan dengan ini. Saya pikir Anda memaksakan warisan dengan + ai
Robin

4

Coba tambahkan -Rke perintah @ gordon, seperti:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

The -Rpilihan kehendak (seperti dicatat di sini ):

Perulangan: Mengubah mode hierarki file yang di-root pada file, bukan hanya file itu sendiri.

Mengubah hierarki file tampaknya seperti yang Anda cari (untuk file baru, direktori, dll.).

Anda juga dapat melihat pos Apple.SE ini , yang mencakup situasi yang agak mirip dengan milik Anda (kecuali yang berkaitan dengan direktori bersama), yang mengharuskan sudoditempelkan di bagian depan.


4

Ini (-R) bukan yang ingin dilakukan kebanyakan orang; sebagian besar waktu mereka lebih suka untuk mengubah ACL pada direktori paling atas dan melakukan sesuatu yang ajaib untuk memaksa semua objek yang terkandung untuk mewarisi bendera sesuai dengan ACL yang mereka tentukan pada akar sub-pohon itu. Ini jauh lebih elegan karena ACL pada objek akan mengurutkan ACE yang diwariskan ini sesuai dengan kebijakan.

Dan ya, saya harus menulis skrip python untuk melakukan ini, saya juga tidak menemukan sesuatu yang sesuai.


2
Apakah Anda ingin berbagi (misalnya tentang intisari ? Jika Anda tidak keberatan, saya pikir itu adalah isyarat yang bagus.
myhd


0

Pada Mac coba gunakan PathFinder , membuatnya mudah untuk mengatur ACL dan POSIX. Jika Anda meng-hosting WordPress di Server Mac Anda juga harus mengatur define('FS_METHOD', 'direct');di wp-config.php sehingga menginstal plugins dan meningkatkan tidak akan meminta Anda untuk rincian FTP.

Jadi pada dasarnya Anda menyimpan izin POSIX default, dan menambahkan pengguna _www (bukan grup) ke ACL, lalu klik Propagate Permission di jendela ACL.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.