Linux'taki grup izinlerini devralmak için yeni dosyalar alma


87

Bir Linux sunucusundaki izinlerle ilgili bir sorun yaşıyorum. Ben BSD alışkınım. Bir dizinin bir gruba ait olması durumunda, kendisine ait olan kullanıcı www-data gibi değildir, içinde oluşturulan dosyalar bu gruba ait olur. Bu önemlidir çünkü dosyaların web sunucusu tarafından okunabilmesini istiyorum (root olarak çalıştırmayacağım) fakat kullanıcı hala yeni dosyaları dizine koyabilir. Kullanıcıları www verisine koyamam çünkü o zaman diğer tüm web sitelerini okuyabilirler.

Web sunucusunun tüm web sitelerini okumasını, kullanıcıların kendilerini değiştirmelerini istiyorum.

İzinleri şu anda klasörlerde böyle ayarlanır ...

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Bu şekilde çalışmak için izinlerin BSD'deki standart davranışıdır. Linux'un bunu yapmasını nasıl sağlayabilirim?


2
ACL kullanabilir misiniz?
slm

Yanıtlar:


128

Setgid bit işlevselliğini tanımladığınız gibi görünüyor, burada bir dizinin ayarlandığı zaman, içinde oluşturulan tüm yeni dosyaları gruplarını üst dizinde ayarlanan gruba ayarlamaya zorlar.

Örnek

$ whoami
saml

$ groups
saml wheel wireshark

izinleri + sahipliğini içeren bir dizin ayarla

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

bu dizinde bir dosya olarak saml olarak dokunun

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

Bu, yaklaşık olarak istediğiniz gibi görünmesini sağlar. Tam olarak tanımladığınız şeyi gerçekten istiyorsanız, bunu elde etmek için Erişim Kontrol Listeleri işlevselliğine başvurmanız gerekeceğini düşünüyorum (ACL'ler).

ACL

Dizinde oluşturulan dosyalardaki izinler üzerinde biraz daha denetim somedirsahibi olmak istiyorsanız, bunun gibi varsayılan izinleri ayarlamak için aşağıdaki ACL kuralını ekleyebilirsiniz.

önce

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

izinleri ayarla

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Dikkat +sonunda, bu dizin uygulanmış EKL'lerini anlamına gelir.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

sonra

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Varsayılan izinlerin ( setfacl -Rdm) ayarlanmasına dikkat edin, böylece izinler r-xvarsayılan olarak ( g:apache:rx) olur ( ). Bu, herhangi bir yeni dosyayı yalnızca rbitlerini etkinleştirmeye zorlar .


İstediğim işlevselliği sağlıyor gibi görünüyor, teşekkürler.
John Tate,

Bu benim de benzer problemimi çözüyor gibi görünüyor. Ancak, son cümleyi tam olarak anlamadım: "Bu, herhangi yeni bir dosyayı yalnızca r bitlerini etkinleştirmeye zorlar." X izni neden etkin değil? Varsayılan olarak etkinleştirmenin bir yolu var mı?
yaobin

1
@ yaobin Bu bir güvenlik meselesi olduğunu düşünüyorum, gerçekten varsayılan olarak çalıştırılabilir bir dosya olmasını istemezsiniz
cdarken

Bu işe yaramıyor unzipmu?
datasn.io

@ datasn.io - man sayfasına bakınız unzip. Özellikle de -Xanahtar.
slm

37

TP: DR; yeni dosyaları kapsayıcı klasör grubunun miras almasını sağlamak için şunu yapın :

$ chmod g+s somefolder

Not: kabul edilen cevabında ima edildiği gibi, bu sadece bir pasajdır.


3
setgid, yeni dosya ve klasörlerin doğru gruba sahip olacağı anlamına gelir , ancak dosyaları ağaca taşıdığınızda doğru sahibinin yapılandırılmayacağını unutmayın. ACL yaklaşımı bununla baş eder (genel olarak).
Chris Morgan

@ ChrisMorgan onunla nasıl başa çıkıyor? Kabul edilen cevabın çözümleri benim durumumda taşınan dosyalar için hiçbir şey yapmadı.
Dan M.

@DanM .: dosya modları ile miras alınmayan izinleri siz belirlersiniz; ancak ACL'lerde, devralınan izinleri belirlersiniz (çocuklar çocuklar bunu geçersiz kılan kendi ACL'lerini belirtebilirler), çalışma zamanında kontrol edilirler .
Chris Morgan

@ ChrisMorgan evet. Bunu nasıl yaptın? ACL formunu kullanan çözüm kabul edilmiş cevap çalışmıyor.
Dan M.

10

Slm'nin cevabını tamamlayıcı olarak, bir ext2 / 3/4 dosya sisteminde, bsdgroupsbölümdeki mount seçeneğini kullanarak tanımladığınız BSD davranışını çoğaltabileceğinizi unutmayın . Gönderen mount(1)adam sayfası:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
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.