Czy zawsze będzie para takich samych UID i GID?

11

Muszę zmienić własność pliku / katalogu za pomocą. chmodZnam tylko nazwę użytkownika właściciela, ale chcę jednocześnie zmienić domyślną nazwę grupy. Na tym etapie nie jest ustalana nazwa grupy, więc umieszczam to samo co nazwa użytkownika

chown -R username:username path_to_dir

Polecenie może być uruchamiane dla różnych systemów / użytkowników, więc moim zmartwieniem jest to, czy linux zawsze ma parę nazwa użytkownika (użytkownik): nazwa użytkownika (grupa) LUB w pewnym momencie ta domyślna nazwa_grupy może dawać błąd.

Chociaż zacząłem znajdować GID od użytkownika należy

id username | tr '(=)' ':' | awk -F: '{print $3}

Ale dla wiedzy chcę wiedzieć. Do tej pory analizy /etc/passwd /etc/groupstylko kilku użytkowników, takich jak „zamknij, zatrzymaj, zsynchronizuj, opeartor”, wszyscy użytkownicy wymienili również w grupach.

EDYCJA 1: id -gn nazwa użytkownika jest również dobrą opcją

Akaks
źródło
3
W drugim przykładzie szukałeś id -g username?
user1686
1
Lub id -gn usernamektóra drukuje nazwę zamiast ID.
Cristian Ciupitu
W Linuksie istnieje również wiele „grup urządzeń” - np. dysk, mem, kmem, audio, wideo itp. - które nie mają odpowiedniego użytkownika.
Baard Kopperud

Odpowiedzi:

20

Nie ma gwarancji, że nazwa grupy = usernamebędzie istnieć.

Najczęstszym scenariuszem jest to, że administratorzy systemu używają w systemie Linux tworzenia nowego użytkownika lokalnie w systemie, bez wyraźnej specyfikacji grupy, co oznacza, że ​​grupa zostanie utworzona domyślnie tak samo jak nazwa użytkownika i przypisze użytkownika do domyślny identyfikator GID nowej grupy.

Nie oznacza to, że inny administrator systemu wykona tę procedurę, a jeśli wrzucisz inne usługi nazewnictwa do miksu, takie jak NIS lub LDAP, grupa przypisana jako domyślna prawdopodobnie nie będzie taka sama jak nowy GID z nazwą grupy taką samą jak nazwa użytkownika.

Dlatego nie powinieneś polegać na tym, że nazwa użytkownika = nazwa grupy

Karlson
źródło
Może również zależeć nie tylko od lokalnych zasad administratora, ale także od narzędzi zawartych w różnych dystrybucjach. Wiele witryn akceptuje tylko wartości domyślne używane przez dostarczone narzędzia. Chociaż większość dystrybucji, z których korzystałem przez lata, zawiera useraddskrypt, który domyślnie tworzy grupę o tej samej nazwie, nie wszystkie mają. Ostatnim razem, gdy go używałem (wiele, wiele lat temu), skrypt tworzenia użytkownika w slackware domyślnie miał jedną grupę, do usersktórej wszyscy użytkownicy zostali członkami. docs.slackware.com/slackbook:users sugeruje, że nadal tak może być.
Jules
11

Chociaż idiom grupy prywatnej użytkownika jest często używany w nowoczesnych systemach Linux, * nix tak naprawdę nie wymaga unikalnej grupy podstawowej dla każdego użytkownika i całkiem możliwe jest, że kilka kont użytkowników ma wspólną grupę podstawową, taką jak userslub staff.

Nawet w przypadkach, w których wymuszony jest idiom UPG, nie ma szczególnego powodu, że numeryczny GID konkretnego UPG powinien być równy UID właściciela, chociaż większość narzędzi do tworzenia kont spróbuje przypisać UID i GID w kolejności, jeśli są dostępny. Identyfikatory można łatwo ominąć, jeśli użytkownicy i / lub grupy muszą zostać spójni w wielu systemach (na przykład w celu uwzględnienia wcześniej istniejących udziałów NFS).

steeldriver
źródło
6

Jak Ramesh domyślnie wskazał, UID i GID są równe dla zwykłych użytkowników. Jednak nie zawsze tak jest, więc nie wolno zakładać takiego założenia, ponieważ może to spowodować spustoszenie w systemie. Przypisywanie uprawnień do plików / folderów niewłaściwej grupie jest nieco nieuporządkowane, prawda?

Krótka odpowiedź: nie, UID nie zawsze jest równy GID. Mimo to /etc/passwdzawiera zarówno UID, jak i GID domyślnej grupy w tym samym wierszu, więc raczej łatwo jest je wyodrębnić.

Erathiel
źródło
„domyślnie UID i GID są równe dla zwykłych użytkowników” - w rzeczywistości to stwierdzenie jest prawdziwe tylko wtedy, gdy dodasz „w niektórych popularnych dystrybucjach Linuksa”. Tak, Ubuntu i in. zrób to w ten sposób, ale uważam, że wspólna grupa „użytkowników” jest bardziej domyślna.
jstarek
Tak, jeśli chcemy być w 100% precyzyjni, masz rację. Prawdopodobnie musielibyśmy dodać kilkanaście różnych „jeśli”, aby nigdy nie pominąć żadnego wyjątku. Wszystkie moje dystrybucje oparte na Debianie (LMDE, Crunchbang, czysty Debian) zachowują się w ten sposób, podobnie jak jeden CentOS 6.5. Pamiętaj, że ponieważ nie muszę dodawać ogromnej liczby użytkowników, zwykle używam adduserraczej niż, useradda domyślne ustawienia /etc/adduser.confsą ustawione na, USERGROUPS=yesco tworzy grupę dla każdego nowego użytkownika. Grupy te zazwyczaj (choć nie zawsze) mają ten sam identyfikator GID, co identyfikator UID użytkownika, dla którego zostały utworzone.
Erathiel
2

Z tego linku widzę poniższe informacje.

Identyfikator użytkownika (UID) to unikalna dodatnia liczba całkowita przypisana każdemu użytkownikowi przez system operacyjny podobny do systemu Unix. Każdy użytkownik jest identyfikowany w systemie za pomocą swojego identyfikatora UID, a nazwy użytkowników są zwykle używane tylko jako interfejs dla ludzi.

Identyfikatory UID są przechowywane wraz z odpowiadającymi im nazwami użytkowników i innymi informacjami specyficznymi dla użytkownika w /etc/passwdpliku, który można odczytać za pomocą polecenia cat w następujący sposób:

cat /etc/passwd

Trzecie pole zawiera identyfikator UID, a czwarte pole zawiera identyfikator grupy (GID), który domyślnie jest równy UID dla wszystkich zwykłych użytkowników.

EDYTOWAĆ

Jednak, jak zauważa @Karlson, nie jest prawdą, że UID będzie domyślnie równy GID.

Instrukcja jest prawdziwa tylko wtedy, gdy żadne zwykłe grupy nie są dodawane osobno i żadne grupy nie są jawnie określone w żadnym utworzeniu użytkownika . Domyślnie gid dla następnego dodanego użytkownika = max(gid) + 1. Nie ma żadnej korelacji między UID i GID wymaganym przez dowolny system * NIX, w niektórych przypadkach po prostu się pokrywają.

Więcej referencji

http://www.thegeekstuff.com/2009/06/useradd-adduser-newuser-how-to-create-linux-users

Ramesh
źródło
Ostatnie stwierdzenie jest całkowicie fałszywe. UID = GID tylko w przypadku, gdy nowy użytkownik jest tworzony w systemie lokalnym, a GID nie jest jawnie przypisany do istniejącej grupy.
Karlson
Nie, nie jest to całkowicie nieprawda, ponieważ wyraźnie mówi „domyślnie”. Będziemy wdzięczni za wyjaśnienia.
Erathiel
1
@Erathiel Domyślnie GID jest równy GID przypisywanemu podczas tworzenia użytkownika. Jeśli użytkownik jest tworzony lokalnie i bez podania GID w -gflagi na useraddprogram utworzy grupę dla Ciebie i chyba przesunięcie GID działo się to będzie = UID. Jeśli jednak metoda tworzenia nie jest znana, nie można polegać na tym, że tak się stanie:uid=123456(ME) gid=777(ABC) groups=777(ABC)
Karlson
W niektórych systemach useradd tworzy również grupę o tej samej nazwie dla konta. Zależy od smaku Linuksa.
Pete
@Karlson, nigdy nie wspominałem, że zawsze będzie równy. Jest wyraźnie określone, że domyślnie jest on równy UID dla wszystkich zwykłych użytkowników .
Ramesh