Dodałem użytkownika do grupy, ale uprawnienia grupy do plików nadal nie mają wpływu

17

Zmieniłem uprawnienia do pliku ( chmod g+w testfile), a uruchomienie ls -l testfiledaje:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

Następnie dodałem użytkownika do tej grupy („ / etc / group ” ma user1:x:1000:user2wiersz), ale nie mogę edytować tego pliku jako użytkownik2. Dlaczego tak jest?

tshepang
źródło
Zobacz także: unix.stackexchange.com/questions/18796/…
Stéphane Gimenez

Odpowiedzi:

28

user2 musi się wylogować i zalogować ponownie. Uprawnienia grupy działają w ten sposób:

  • Gdy się zalogujesz, twoje procesy będą miały członkostwo w grupie głównej wymienionej w /etc/passwd, a także we wszystkich grupach, w których wspomniany jest użytkownik /etc/group. (Dokładniej, pw_gidpola w getpw(your_uid), plus wszystkie grupy , z których Twój użytkownik jest jawnym członkiem . Beyond /etc/passwdi /etc/groupinformacje mogą pochodzić z innych rodzajów baz danych użytkownika, takich jak NIS lub LDAP). Główną grupą staje Proces jest efektywny identyfikator grupy a pozostałe grupy stają się dodatkowymi identyfikatorami grup .
  • Gdy proces wykonuje operację wymagającą członkostwa w określonej grupie, na przykład dostęp do pliku , grupa ta musi być albo efektywnym identyfikatorem grupy, albo jednym z dodatkowych identyfikatorów grupy procesu.

Jak widać, zmiana w członkostwie w grupie użytkowników obowiązuje tylko wtedy, gdy użytkownik się zaloguje. Na uruchomienie procesów jest już za późno. Więc użytkownik musi się wylogować i ponownie zalogować. Jeśli to zbyt duży problem, użytkownik może zalogować się do osobnej sesji (np. Na innej konsoli lub za pomocą ssh localhost).

Pod maską proces może tylko utracić uprawnienia (identyfikatory użytkowników, identyfikatory grup, możliwości). Jądro uruchamia initproces (pierwszy proces po rozruchu) jako root, a każdy proces jest ostatecznie potomkiem tego procesu¹. loginProces (lub sshd, lub część swojego menedżera pulpitu, loguje się w) nadal działa jako root. Częścią jego zadania jest upuszczenie uprawnień roota i przełączenie do odpowiedniego użytkownika i grup.

Jest jeden wyjątek: wykonywanie programu setuid lub setgid . Ten program otrzymuje dodatkowe uprawnienia: może działać w ramach różnych podzbiorów członkostwa procesu nadrzędnego oraz dodatkowego członkostwa w użytkowniku lub grupie, która jest właścicielem pliku wykonywalnego setxid. W szczególności setuid root ma uprawnienia roota, dlatego może robić wszystko; w ten sposób programy lubią sui sudomogą wykonywać swoją pracę.

¹ Czasami zdarzają się procesy, które nie pochodzą od init (initrd, udev), ale zasada jest taka sama: startuj jako root i tracisz uprawnienia z czasem.
² Z wyjątkiem wielopoziomowych ram bezpieczeństwa, takich jak SELinux.

Gilles „SO- przestań być zły”
źródło
1
Pamiętaj, że jeśli używasz graficznego interfejsu użytkownika, samo wylogowanie się i ponowne zalogowanie do okna terminala nie spowoduje zresetowania członkostwa w grupie. Miałem ten problem i muszę także wylogować się z sesji GUI: þ
user394
3
@ user394 Wylogowanie i ponowne zalogowanie powoduje zresetowanie członkostwa w grupie. Jeśli zamkniesz tylko okno terminala, nie wylogujesz się.
Gilles „SO- przestań być zły”
10

Może być konieczne wylogowanie się użytkownika 2 i ponowne zalogowanie się (lub po prostu spróbuj zalogować się, aby utworzyć nową sesję logowania). Sprawdź dane wyjściowe, id --groupsaby wyświetlić identyfikatory grup numerycznych dla użytkownika.

jsbillings
źródło
1

sudo su $(whoami)

Zasadniczo to samo obejście ssh localhost, ale możliwe do użycia bez zainstalowanego serwera ssh.

Tak długo, jak masz root. Ale jeśli właśnie dodałeś nową grupę i zmieniłeś uprawnienia, prawdopodobnie tak.

RGD2
źródło
Chociaż jest to odpowiedź o wiele mniej wyczerpująca pod względem informacyjnym niż odpowiedź zaakceptowana, czasami chcesz wiedzieć, jak zbudować zegar, a czasem po prostu chcesz wiedzieć, która jest godzina. Ta odpowiedź pomogła mi z trikiem, który może działać, dopóki nie wyloguję się i nie zaloguję ponownie. Dzięki.
Benjamin Staton,
0

Istnieją przypadki, w których wylogowanie użytkownika nie pomaga - jeśli używasz dyrektywy ssh ControlMaster dla hosta. Jeśli dodasz swoje konto do grupy, wylogujesz się i zalogujesz ponownie w ramach tego samego połączenia ControlMaster, sesja nadal nie wyświetli żadnego nowego członkostwa. Będziesz musiał siłą zerwać połączenie Master

ssh -O exit hostname

przed ponownym zalogowaniem.

Tagwint
źródło