Ustawienie domyślnej nazwy użytkownika i grupy dla plików w katalogu

13

Korzystając z tego pomocnego posta, jestem w stanie ustawić domyślną grupę i uprawnienia do plików w folderze.

Mam problem z ustawieniem domyślnego właściciela (Teamlead UID 1234).

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

Z tym:

[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

Tak więc przypisano odpowiednią grupę, ale nowy plik ma własność użytkownika, który go utworzył. Chciałbym, aby nowo utworzone pliki miały teamlead: właściciel / grupa web_prod.

Wygląda na to, że setfaclmożna go również użyć do ustawienia domyślnego użytkownika. Z istniejącym folderem acl config (powyżej):

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

Teraz, aby utworzyć plik jako inny użytkownik. Spodziewam się, że będzie mieć teamlead: własność web_prod.

[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

Nowy plik nadal ma własność właściciela tworzącego plik, a nie identyfikator użytkownika 1234 (teamlead).

Czy to, czego szukam, jest w ogóle możliwe, czy też sposób, w jaki to robię, jest zły?

programista
źródło

Odpowiedzi:

18

Za pomocą setfacl możesz ustawić domyślne uprawnienia, ale nie domyślnego właściciela / grupy dla nowo tworzonych plików.

Aby uzyskać nowe pliki będące własnością określonego użytkownika, potrzebujesz setuid bit, który działa jak bit setgid w katalogach. Niestety nie jest to zaimplementowane.

Z setfacl możesz zrobić coś, co jest prawie równoważne w większości scenariuszy: Możesz ustawić ACL jak default:user:teamlead:rwx. W ten sposób nazwany użytkownik może zapisywać nowe pliki, nawet jeśli ktoś jest ich właścicielem.

Michael Suelmann
źródło
Zaktualizuj tę odpowiedź za pomocą polecenia, aby zastosować „default: user: teamlead: rwx” do directory ”/ foo”
user319862
10

Zawsze tworzony jest nowy plik należący do użytkownika, który uruchomił proces tworzenia pliku. (Dokładnie efektywny identyfikator użytkownika.) Nie można tego zmienić, ponieważ umożliwienie użytkownikom tworzenia plików należących do innych użytkowników stanowiłoby lukę w zabezpieczeniach, podobnie jak pozwalanie użytkownikom innym niż root na rozdawanie plików .

Cokolwiek próbujesz zrobić, nie musisz tego robić. Listy ACL są wystarczające, aby zapewnić, że cokolwiek będzie trzeba później odczytać plik, będzie miało wystarczające uprawnienia. Pozostaw plik należący do użytkownika, który go utworzył.

Gilles „SO- przestań być zły”
źródło
„Listy ACL są wystarczające, aby mieć pewność, że cokolwiek będzie trzeba później odczytać plik, będzie miało wystarczające uprawnienia”. Fałszywe. Grupa nowego pliku będzie domyślną grupą użytkownika. Jeśli współpracujący użytkownicy mają różne grupy domyślne, nie będziesz mieć dostępu do swoich plików. Potrzebujesz setgid, aby grupa folderu nadrzędnego „przylegała” do wszystkich dzieci.
bviktor
@bviktor Możesz osiągnąć ten sam efekt dzięki ACL.
Gilles 'SO - przestań być zły'
Jak określić właściciela i grupę nowych plików za pomocą ACL?
bviktor 27.04.17
@bviktor Właścicielem jest ten, kto tworzy plik, co się nie zmienia. Grupa, która jest właścicielem pliku z tradycyjnymi uprawnieniami, nie ma znaczenia. Lista ACL dla nowych plików jest domyślną listą ACL katalogu, podobnie jak grupa będąca właścicielem nowych plików jest grupą posiadającą katalog z semantyką BSD ( g+s).
Gilles 'SO - przestań być zły'
@Gilles nope. Grupą nowych plików będzie „początkowa grupa logowania” twórcy, a nie grupa folderu nadrzędnego. Opisane zachowanie (tzn. Nowy plik pobiera grupę katalogu macierzystego) wymaga ustawienia setgid na rodzicu. Grupa jest bardzo istotna, ponieważ gdy użytkownicy współpracują, nie mogą uzyskać dostępu do plików innych osób, jeśli grupa jest inna. Chyba że twoje pliki są dostępne na całym świecie, co nie jest najlepszym pomysłem.
bviktor
1

Jeśli chcesz, aby nowe pliki były tworzone z nową grupą, musisz zmienić grupę podstawową.

W tym celu możesz użyć usermod i parametru -g

   -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.

na przykład

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
sinkmanu
źródło
0

W systemie Linux musisz mieć sgid na katalogu macierzystym, aby dziedziczyć grupę plików. (Chociaż nie potrzebujesz sgid w katalogu na systemach BSD.)

jirib
źródło
Pytanie dotyczy przypisania własności do nowo tworzonych plików. Grupa jest już poprawnie przypisana.
koder