Bir dosya iki kullanıcıya ait olmak istiyor. Nasıl? Sabit bağlantı başarısız


32

İki setuid programı /usr/bin/barve /usr/bin/baztek bir yapılandırma dosyasını paylaşın foo. Yapılandırma dosyasının modu, 0640hassas bilgileri tutar. Bir program bar:bar(kullanıcı çubuğu olarak, grup çubuğu ); diğer olarak baz:baz. Kullanıcıları değiştirmek bir seçenek değildir ve grupları değiştirmek bile tercih edilmez.

Tekli yapılandırma dosyasını /etc/bar/foove olarak bağlamak istiyorum /etc/baz/foo. Ancak, bu başarısız olur çünkü dosyanın bildiğim kadarıyla root:barveya kendisine ait olması gerekir root:baz.

Potansiyel çözüm: yeni bir grup oluşturun barbazüyeleri vardır barve baz. Let fooaittir root:barbaz.

Bu bana oldukça ağır elli bir çözüm gibi görünüyor. Yapılandırma dosyasını fooiki program arasında paylaşmanın daha basit ve daha basit bir yolu yok mu?

Şimdilik, dosyanın aynı iki kopyasını saklıyorum. Bu işe yarar, ancak açıkçası yanlıştır. Ne doğru olurdu?

Bilgi için: Unix grupları konusunda deneyimim az ve setgid yok (2).


Soru genellikle aşamalı. Özel durumumda, iki program Exim4 ve Dovecot, şifreleri ve TLS sertifikalarını paylaşabilen mail işleme programları oluyor.
saat

8
Bunun için Ubuntu (& bence Debian) çözümü ssl-certgruptur, ki bu da sizin barbazgrubunuzdur. Standart, ssl-certgruba ait olan tüm özel anahtarları ayarlamak ve bu gruba erişmesi gereken programlarla ilişkili UID'leri bu gruba koymaktır.
saat

1
@ abligh: İlginç. Sistemim Debian 8 jessie. Görünüşe göre, ssl-certkurulumda postinst betiği, konuştuğunuz grubu oluşturan bir paket var . Farkında değildim ssl-cert. Apache2 (ana bilgisayarıma yüklü) önerir ssl-cert . Çeşitli Exim ve Dovecot paketler olmayan ama Postfix (benim ana bilgisayarda yüklü değil) bağlıdır üzerinde ssl-cert. Apache nedeniyle, ana bilgisayarımın bir ssl-cert grubu var, ancak bu grubun henüz üyesi yok. Tavsiye için teşekkürler.
thb 17.16,

5
Programları setuid değil setgid yap. Setuid programları kötü bir fikir çünkü tehlikeye atılırlarsa, ikili bir truva atı oluşturarak değiştirilebilir. (İstisna: setuid kökü, çünkü orada bir seçeneğiniz yok.)
Gilles 'SO-' A

1
Mu wiki.dovecot.org/HowTo/EximAndDovecotSASL özel durumu çözmek?
MvG

Yanıtlar:


50

ACL'leri kullanarak dosyanın her iki gruptaki kişiler tarafından okunmasını sağlayabilirsiniz.

chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file

Şimdi hem barve bazgruplar dosyayı okuyabilir.

Örneğin, burada bin: bin 616 modlu bir dosyaya ait dosya var.

$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo

+Araçlar yüzden ona bir göz atalım ACL seti var.

$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---

Çizgiyi görebiliriz group:sweh:r--: bu, gruptaki insanların swehokuyabileceği anlamına gelir .

Hey bu benim!

$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)

Ve evet, dosyayı okuyabilirim.

$ cat foo
data

23

Bu ifadeleri tekrar gözden geçirmek isteyebilirsiniz:

Potansiyel çözüm: üyeleri olan yeni bir grup barbaz oluşturun barve baz. Let fooaittir root:barbaz.

Bu bana oldukça ağır elli bir çözüm gibi görünüyor. Yapılandırma dosyasını fooiki program arasında paylaşmanın daha basit ve daha basit bir yolu yok mu?

Yeni bir grup oluşturmak neden bu kadar zor oluyor? Bunu yapmak ACL'lere göre aşağıdaki avantajlara sahiptir:

  • Eğer komutlarla varsayımsal olarak bu ifadelerle olmasına rağmen /usr/bin/barve /usr/bin/baz, bu iki program bir yapılandırma dosyası paylaşabilmesi alakalıdır. Bu, programların doğal olarak ilişkili olduğunu göstermektedir. Onlar için yeni bir grup oluşturmak, aslında var olan ve davranışı tetiklemesi gereken bir ilişkiyi (ortak yapılandırma dosyasını okuma izinleri gibi) açıklıyor gibi görünmektedir.
  • Bu problemi gruplar aracılığıyla çözmek her Unix'e taşınabilir ; bu, aynı mekanizmaya, aynı şekilde çalışan herhangi bir Unix veya Unix benzeri sisteme güvenebileceğiniz anlamına gelir. ACL'ler çok daha karmaşıktır ve taşınabilirlik bir sorun olabilir.

Şahsen ACL'leri burada ağır elli bir çözüm olarak görüyorum ve daha basit, geleneksel Unix yolu olarak gruplandırıyorum.


16

Bunun Erişim Kontrol Listeleri (EKL'ler) için tipik bir kullanım olacağını düşünüyorum. Her iki kullanıcıyı (veya grupları) config dosyasının ACL'sine ekleyin:

/etc/foo  root:root rw-------  # Traditional Unix ownership and permission for foo
$ setfacl -m user: bar: rw- / etc / foo # Kullanıcı çubuğunun foo okumasını ve yazmasını sağlar
$ setfacl -m user: baz: rw- / etc / foo # Kullanıcı bazının foo okumasına ve yazmasına izin verir.

Önce acl paketini kurmanız gerekebilir.


3

Dosyanın modunu 0660(veya 0440yazmak gerekli olmasa bile ) ve sahipliğini yapın bar:baz. Böylece bir işlem kullanıcı izinleri, diğeri grup izinleri sayesinde dosyaya erişebilir. Bu, ACL'lerin yapmadığı dosya sistemlerinde bile çalışır.


2

Bunu henüz söylenmediğinden beri göndereceğim. Muhtemelen istediğin şey olmasa da, benzer bir sorusu olan diğer insanlar için cevap olabilir.

"Yeni" "bulut" yolu, tüm konfigürasyonların bir konfigürasyon yönetim sistemi tarafından ( şef , kukla veya sorumlu kişi ) ele alınmasını sağlamaktır. O zaman her ikisi de tek bir dosyanın konfigürasyon yönetim sisteminden birer kopyası olduğu için sunucuda iki ayrı fakat aynı dosyaya sahip olmanız önemli değildir.

Bu şekilde yapmanın temel avantajları, konfigürasyonunuzun versiyonlanmış olmasıdır (tüm konfigürasyonlarınızla birlikte) ve yeni bir aynı veya neredeyse aynı sunucuyu dağıtmanın otomatikleştirilebilecek kadar kolay hale gelmesidir.

(Kayıt için, konfigürasyon yönetimi kullanmadığınız için, @ drg'nin cevabında olduğu gibi grup sistemiyle giderdim).

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.