Belirli bir dizindeki yeni dosyalar için varsayılan grubu ve izinleri belirtme


15

Birden fazla kullanıcı tarafından paylaşılan bir proje olduğu belirli bir dizin var. Bu kullanıcılar bu dizine erişmek ve dosyaları değiştirmek / oluşturmak için SSH kullanır.

Bu proje yalnızca belirli bir kullanıcı grubuna yazılabilir olmalıdır: hadi buna "grubum" diyelim. Bir SSH oturumu sırasında, geçerli kullanıcı tarafından oluşturulan tüm dosyaların / dizinlerin varsayılan olarak "grubum" grubuna ait olması ve grup tarafından yazılabilir izinlere sahip olması gerekir.

İzin sorununu şu şekilde çözebilirim umask:

$ cd project
$ umask 002
$ touch test.txt

"Test.txt" dosyası artık grup tarafından yazılabilir, ancak yine de varsayılan grubuma ("mislav", kullanıcı adımla aynı) ait ve "grubum" a ait değil. chgrpİstenen grubu ayarlamak için özyinelemeli olabilir , ancak umask bir oturum sırasında varsayılan izinleri değiştirdiği gibi bazı grup örtük olarak ayarlamak için bir yol olduğunu bilmek istedim.

Bu özel dizin çalışan bir kopyası ile paylaşılan bir git repo olduğunu ve istediğim git checkoutve git resetişlemleri çalışma kopyasında oluşturulan yeni dosyalar için doğru maske ve grup ayarlayın. İşletim sistemi Ubuntu Linux.

Güncelleme: Bir meslektaşım POSIX ACL'nin getfacl / setfacl'sine bakmam gerektiğini söylüyor ancak umask 002şu anki oturumda bir araya getirilen çözüm benim için yeterince iyi ve çok daha basit.

Yanıtlar:


19

Belirli bir dizin altındaki tüm dosyaların grup haklarını devralması için dizininizde setgid bitini kullanmanız gerekir. Bu bağlantıya bakın .

 $ mkdir test
 $ sudo chown raphink.staff test
 $ ls -lhd test
     drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
 $ sudo chmod g+s test # Set the setgid bit
 $ ls -lhd test
     drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
 $ touch test/foo
 $ ls -lh test
     total 0
     -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

Teşekkürler. Bunu googling ile bulamadığım ilginç
mislav

6

Bunu mevcut bir klasörle yapmak istiyorsanız, setgid bitinin tüm alt klasörler için de etkinleştirildiğinden emin olmanız gerekir. Ancak, dosyalarda buna ihtiyacınız yoktur ve muhtemelen dosyalarda da istemezsiniz. Tüm alt klasörler için özyinelemeli olarak nasıl ayarlanacağı aşağıda açıklanmıştır.

find /path/to/base/dir -type d -exec chmod g+s {} +

4

Kaynağı geri bulamıyorum, ancak setgidsizin durumunuz olduğunu düşündüğüm çıplak git depoları için bu sorunu çözmek için kullanılıyor, bazı durumlarda sorunlara neden olabilir.

Git tüm bunları core.sharedRepositorybayrakla halledebilir . Aynı sorunu yaşadım ve şu şekilde çözdüm:

Varsayarsak repogroupsizin grubudur ve sahip cdRepo dizine:

İlk olarak paylaşılan bayrağı şu şekilde değiştirin group:

git config core.sharedRepository group 

Not: burada groupgrup adını değil, anahtar kelimeyi kullanmalısınız . Bu seçenek ile çıplak depo oluşturmaya eşdeğerdir --shared=group.

Ardından tüm depo için grubu değiştirin:

chgrp -R repogroup .

Varolan dizinlerin grup yazılabilir ( g+w) olduğundan ve varolan yürütülebilir dosyaların da grup yürütülebilir ( g+X) olduğundan emin olmak için aşağıdakileri de yapmanız gerekir:

chmod -R g+wX .

Bunu yaptıktan sonra git shared=group, hem mevcut hem de yeni dosyalar için bayrağa saygı duyacak ve aşağıdaki grup izinleriyle ilgilenecektir, bu nedenle bir daha asla umaskveya öğesine ihtiyacınız olmayacak chgrp.

Geri bulursam kaynağı bir yorum yazacağım.


3

* Nix tarafına gelince fazla uzman değilim, ama aradığınız şeyin setgid olduğunu düşünüyorum.

Buraya bakın .


1

ACL kullanmadan Linux / UNIX'te üst dizin izinlerini devralmak zordur. ancak varsayılan dosya izinlerini atamanın bir yolu var, aşağıdaki bağlantıyı kontrol edin

Üst dizin izinlerini devralabilir misiniz?

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.