Çalıştırdığınızda , belirli bir kullanıcıyı 1 ve (LDAP, NIS veya başka bir şey olabilir 2 ) arar ve bulunan tüm grupları gösterir.groups username
/etc/passwd
/etc/group
Öte yandan, groups
komutu herhangi bir argüman olmadan çalıştırdığınızda, sadece kendisinin 3'e ait olduğu tüm grupları listeler - ki bu listelenenle aynı olmayabilir/etc/group
. (Bir açıklama için aşağıya bakın.) Aslında, yapılan tek aramalar /etc/group
GID'leri grup adlarına çevirmek içindir.
Her işlemde (diğer şeylerin yanı sıra) bir "gerçek grup kimliği" (birincil GID), "etkili bir grup kimliği" (EGID) ve "ek grup" kimlikleri (ikincil GID'ler) içeren bir dizi kimlik bilgisi bulunur . Varsayılan olarak, bir işlem kimlik bilgilerini üst öğesinden devralır; ancak, kök (UID 0) olarak çalışan veya bu özelliğe sahip CAP_SETUID
işlemlerin isteğe bağlı kimlik bilgileri ayarlamasına izin verilir.
Özellikle, Linux'ta oturum açtığınızda (tty, X11 veya SSH üzerinden), oturum açma işlemi (/ bin / login, gdm, sshd) UID, birincil GID ve ikincil GID'lerinizi belirlemek için kullanıcı adınızı arar . Kişisel bir makinede, bu sadece uygun satırları passwd
ve group
dosyaları (veya NIS, LDAP, vb.) Okumak anlamına gelir .
Daha sonra, oturum açma işlemi oturumunuza başlamadan önce 4'ü bu kimlik bilgilerine geçirir ve bundan sonra başlattığınız her işlem aynı UID ve GID'lere sahip olacaktır - sistem /etc/group
artık 5'i kontrol etmemektedir ve yapılan değişiklikleri almaz.
Bu şekilde, /usr/bin/groups
işlem , veritabanında bulunduğunuzun söylediklerine değil, oturum açtığınızda yaptığınız gruplara ait olacaktır .
Not: Yukarıdaki açıklama neredeyse tüm Unix'ler için de geçerlidir; Windows NT ailesine (UIDs ve Gıd'ler tüm "SID" denir hariç, kimlik bilgileri "süreç simge" olarak adlandırılır hayır "birincil grup" yoktur ve CAP_SETUID
olan SeCreateTokenPrivilege veya SeTcbPrivilege ); ve diğer birçok çok kullanıcılı işletim sistemi için de geçerlidir.
Bir kullanıcının gruplarını aramak için 1 getpwuid () ve getgrouplist () kullanılır.
2 Linux'ta glibc, bu bilgileri nerede arayacağınızı /etc/nsswitch.conf
belirlemek için kullanır .
3 groups
kendi kimlik bilgilerini almak için getgid (), getegid () ve getgroups () yöntemlerini kullanır.
4 setuid (), setgid (), initgroups () ve ilgili.
5 istisna tabii ki yükselmiş (çalıştırmak çeşitli araçlar olduğu setuid gibi) su
, sudo
, sg
, newgrp
, pkexec
, vb. Bu su $USER
, güncellenmiş grup listesiyle bir kabuk oluşturacağı anlamına gelir .