Dizindeki dosyalar için varsayılan kullanıcı adı ve grup ayarlama


13

Bu yararlı gönderiyi kullanarak bir klasörde varsayılan grup ve dosya izinleri ayarlayabiliyorum.

Varsayılan bir sahibi (teamlead uid 1234) ayarlamakta sorun yaşıyorum.

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Bununla:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Böylece doğru grup atanır, ancak yeni dosyanın dosyayı oluşturan kullanıcının mülkiyeti vardır. Yeni oluşturulan dosyaların teamlead'e sahip olmasını istiyorum: web_prod owner / group.

setfaclVarsayılan bir kullanıcı ayarlamak için de kullanılabilecek görünür . Mevcut klasör acl config ile (yukarıda):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Şimdi farklı bir kullanıcı olarak bir dosya oluşturmak için. Teamlead olmasını bekliyorum: web_prod sahipliği.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

Yeni dosya, 1234 (teamlead) uid değil, dosyayı oluşturan sahibin sahipliğine sahiptir.

Ben peşinden koştuğum şey mi, yoksa bunu yanlış yapma şeklim mi?

Yanıtlar:


18

Setfacl ile varsayılan izinleri ayarlayabilirsiniz ancak yeni oluşturulan dosyalar için varsayılan sahip / grup ayarlayamazsınız.

Yeni dosyaların belirli bir kullanıcıya ait olmasını sağlamak için dizinlerdeki setgid biti gibi çalışan bir setuid bitine ihtiyacınız olacaktır. Ne yazık ki bu uygulanmadı.

Setfacl ile çoğu senaryoda neredeyse eşdeğer bir şey yapabilirsiniz: Bir ACL gibi ayarlayabilirsiniz default:user:teamlead:rwx. Bu şekilde, adlandırılmış kullanıcı başka birisinin sahibi olsa bile yeni dosyaları yazabilir.


Lütfen bu cevabı 'default: user: teamlead: rwx' dizinini '/ foo'
user319862

10

Her zaman, dosyayı oluşturan işlemin çalıştığı kullanıcıya ait yeni bir dosya oluşturulur. (Kesin olarak, etkili kullanıcı kimliği.) Bu değiştirilemez, çünkü kullanıcıların diğer kullanıcılara ait dosyalar oluşturmasına izin vermek, root olmayan kullanıcıların bir dosya vermesine izin vermek gibi güvenlik deliği olacaktır .

Ne yaparsanız yapın, bunu yapmanız gerekmez. EKL'ler, dosyayı daha sonra okumak için gerekenlerin yeterli izinlere sahip olmasını sağlamak için yeterlidir. Dosyayı yaratan kullanıcının sahip olduğu bırakın.


"ACL'ler, dosyayı daha sonra okumak için gerekenlerin yeterli izinlere sahip olmasını sağlamak için yeterli." Yanlış. Yeni dosyanızın grubu, kullanıcınızın varsayılan grubu olacaktır. Ortak çalışma yapan kullanıcıların farklı varsayılan grupları varsa, birbirinizin dosyalarına erişemezsiniz. Üst klasörün grubunun tüm çocuklara "yapışmasını" sağlamak için setgid'e ihtiyacınız vardır.
bviktor

@bviktor ACL ile aynı etkiyi elde edebilirsiniz.
Gilles 'SO- kötü olmayı kes'

EKL içeren yeni dosyalar için sahibi ve grubu nasıl belirtirsiniz?
bviktor

@bviktor Dosyayı her kim oluşturursa değiştirmez, bu değişmez. Geleneksel izinlerde dosyanın sahibi olan grup önemsizdir. Yeni dosyalarda EKL, yeni dosyalarda sahip olan grubun BSD anlambilimine ( g+s) sahip dizinin sahip olduğu grup olduğu gibi, dizinin varsayılan ACL'sidir .
Gilles 'SO- kötü olmayı kes'

@Gilles hayır. Yeni dosya grubu, içerik oluşturucunun üst klasörün grubu değil, "ilk giriş grubu" olacaktır. Açıkladığınız davranış (yani yeni dosya üst dizin grubunu alır) üst öğe için setgid değerinin ayarlanmasını gerektirir. Ve grup çok alakalı çünkü kullanıcılar işbirliği yaptığında, grup farklıysa birbirlerinin dosyalarına erişemezler. Dosyalarınız dünyaca erişilebilir değilse, tam olarak harika bir fikir değildir.
bviktor

1

Yeni dosyaların yeni grupla oluşturulmasını istiyorsanız, birincil grubu değiştirmeniz gerekir.

Bunun için usermod ve -g parametresini kullanabilirsiniz.

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

Örneğin

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1

0

Linux'ta dosyalar grubunu devralmak için üst dizinde sgid'e sahip olmanız gerekir. (BSD sistemlerinde dizinde sgid'e ihtiyacınız olmasa da.)


Soru, yeni oluşturulan dosyalara sahiplik atamakla ilgilidir. Grup zaten doğru şekilde atanmış.
bir kodlayıcı
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.