Yeni dosyaları üst dizin izinlerini devralmak için Mac'te chmod'u nasıl kullanırım?


23

Mac'teyim. Belirli bir klasörde oluşturulan yeni dosya / klasörlerin, üst dizininkilerle aynı izinlere (grup değil, halledilmiş) sahip olmasını sağlamak istiyorum. Linux'ta normalde setfacl kullanırdım, fakat Mac'te chmod aradığımı yapabilir gibi görünüyor. Chmod için man sayfasını okudum, ancak ne istediğimi elde etmek için komutu nasıl doğru bir şekilde formatlayacağımı bulamıyorum.


Yeni dosyaların / klasörlerin okunabilir ve yazılabilir olmasını istiyorum.

Yanıtlar:


33

İlk olarak, neler olduğunu açıklamak için bir miktar arka plan: OS X'deki dosyalar kendilerine uygulanan oldukça farklı iki tür izin ayarlarına sahip olabilir: POSIX ve ACL'ler.

Dosyaların her zaman (neredeyse, her zaman) sahibi, grubu ve diğerlerinden oluşan (her biri için bir okuma, yazma ve yürütme kombinasyonuyla) POSIX izinleri uygulanır. POSIX izinlerinin mirasını kontrol etmenin bir yolu yoktur: Yeni öğeler her zaman, kullanıcının oluşturduğu her bir kullanıcıya aittir, grup ataması, içinde bulundukları klasörden miras alınır ve erişim, umask tarafından belirlenir (hemen hemen her zaman: sahibi tam erişime sahip, grup ve diğerleri salt okunur + klasörler için çalıştır). Yani POSIX izinleri yapmaya çalıştığınız şey için işe yaramaz.

Dosyalarda uygulanan bir erişim kontrol listesi (ACL) de olabilir. Bu, her biri bir kullanıcı veya grup için geçerli olan erişim kontrol girişlerinin (ACE) bir listesidir, erişim türlerini (ayrıntılı olarak) belirtir, izin verilip verilmediğini veya reddedilip alınmadığını ve ACE'nin de kopyalanıp kopyalanmayacağını belirtir. klasörün içinde oluşturulan öğeler. Bu son bit, bunu sizin için yararlı kılan kısımdır; İstediğiniz grubu, istediğiniz erişim türlerini ve tam mirasını belirten klasörde bir ACE oluşturmanız gerekir.

OS X'deki chmod, ACE'leri + a, -a, etc izinleri seçenekleriyle değiştirebilir. Ne istediğinizi anlarsam, bunu ACE oluşturmak için kullanırsınız (grup adınız ve klasör yolunuz değiştirilir):

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

Kalıtımın "canlı" olmadığını, yani ACE'yi atamadan önce oluşturulan öğelere uygulanmadığını ve başka bir yerde oluşturulan ve daha sonra klasöre taşındığını unutmayın. -R ( chmod -R +a ...) kullanarak onu mevcut içeriğe uygulayabilirsiniz . Klasöre taşınan öğelere miras almayı zorlamanın bir yolunu (Apple'ın sunucu yöneticisi araçları hariç) bilmiyorum.


Harika bir açıklama için teşekkürler. Yine de denedim ve yine de kullanıcı okuma / yazma, herkes okuma izinleriyle yeni bir dosya oluşturdu. Üst klasör (açık havada) kullanıcım (jhicks) sahibi olarak ve grup olarak _www ile 775 izne ayarlanır. Kendimi _www grubuna ekledim. drwxrwxr-x + 13 jhicks _www 442B Kas 16 09:47 açık havada Komutunuzu şöyle koştum: chmod + a "grup: _www izin verilenler listesi, add_file, arama, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, rearittattr, readextattr, writeextatt_, directory_inherit "açık havada
Jeremy Hicks

ls -lyalnızca POSIX izinlerini gösterir (izinlerden sonraki "+" bir ACL olduğunu gösterir). ls -leACL'leri de göstermek için kullanın .
Gordon Davisson

Grup adında boşluk varsa, sınırlayıcı olarak kullanabilirsiniz. Örneğin, "grup: boşluk içeren grubum: izin ver"
Doug Richardson

chmod +a ...Komutu takip ettikten sonra, klasörde bir abc.txt oluşturdum . Başka bir kullanıcıya geçildi ve TextEdit ile düzenleyin, dosya Kilitli olarak gösterilir ve düzenlenemez.
ohho

Bununla biraz oynama yapıyorum bence + ai ile mirasa zorladığınızı düşünüyorum
Robin

4

-R@ Gordon'un komutuna şöyle eklemeyi deneyin :

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

-ROpsiyon irade (belirtildiği gibi burada ):

Yinelenme: Yalnızca dosyaların kendileri yerine dosyalara bağlı dosya hiyerarşileri modunu değiştirin.

Dosya hiyerarşilerini değiştirmek, aradığınız şey gibi görünüyor (yeni dosyalar, dizinler vb. İçin).

Ayrıca , sizinkiyle benzer bir durumu kapsayan (paylaşılan bir dizine ilişkin olanlar hariç), ön tarafa dizilmiş bu Apple.SE gönderisine de bakabilirsinizsudo .


4

Bu (-R) çoğu insanın yapmaya çalıştığı şey değildir; çoğu zaman ACL'yi en üstteki dizinde değiştirmeyi ve içerdiği tüm nesneleri bu alt ağacın kökünde belirledikleri ACL'ye göre bayrakları miras almaya zorlamak için sihirli bir şey yapmayı tercih ederlerdi. Nesnelerdeki ACL'ler bu devralınan ACE'leri politikaya göre sıralayacağından bu çok daha zarif.

Ve evet, bunu yapmak için bir python betiği yazmak zorunda kaldım, uygun bir şey de bulamadım.


2
Paylaşmak ister misiniz (örneğin bir özlemde ? Sakıncası yoksa, bunun güzel bir jest olduğunu düşünüyorum.
myhd


0

Mac'te PathFinder'ı kullanmayı deneyin , ACL ve POSIX'i ayarlamayı kolaylaştırır. WordPress'i bir Mac Sunucusunda barındırıyorsanız define('FS_METHOD', 'direct');, wp-config.php dosyasını da ayarlamanız gerekir, böylece eklentileri kurmak ve yükseltmek FTP detaylarını sormaz.

Bu nedenle, temel olarak varsayılan POSIX izinlerini saklar ve ACL'ye _www (grup değil) kullanıcısını ekler, sonra da ACL penceresinde İzni Yay öğesine tıklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.