Linux: gruplara karşı grup kullanıcı adı


12

Linux komutunun neden olduğunu bilen var mı?

    groups 

farklı bir çıktı gösterir

    groups username 

Oturum açan kullanıcı parametre kullanıcı adı ile aynıdır. Misal:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
Bu sorunun o kadar çok kopyası var ki nereden başlayacağımı bile bilmiyorum.
user1686

Yanıtlar:


12

Ç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, groupskomutu 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/groupGID'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_SETUIDiş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ı passwdve groupdosyaları (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/groupartık 5'i kontrol etmemektedir ve yapılan değişiklikleri almaz.

Bu şekilde, /usr/bin/groupsiş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_SETUIDolan 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.confbelirlemek 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 .


3

groupstek başına süreç sahibinin mevcut grup üyeliğini verir . Bu groups <username>, işlem başladığından beri groupdb değiştiyse veya işlem sahibi değiştiğinde farklılık gösterebilir .


groupsşu anki üyeliği vermiyor , bunun yerine giriş işleminin (/ sbin / login, gdm, sshd) çağrıldığı sırada "güncel" olanı initgroups().
user1686

1

Sadece bilgisayarı yeniden başlatın ve hem gruplar hem de gruplar kullanıcı aynı sonuçları vermelidir.

Farklı olmalarının nedeni, bilgisayarı başlattığınızda üyesi olmadığınız yeni bir gruba eklenmiş olmanızdı.


Kesinlikle tüm sistemi yeniden başlatmanız gerekmez! Sadece yeni bir giriş oturumu başlatmanız yeterlidir (örneğin, yeni bir sanal konsolda, sugeçerli oturumu yeniden açmayı kullanarak , kapatarak). newgrpİşlemleri, dahil edilen yeni grupla başlatmak için de kullanabilirsiniz .
pabouk

1
Sadece her seferinde işe yarayacak basit bir hızlı çözüm sunmak istedim. Bu soruyu daha ayrıntılı olarak cevaplayan birçok başka cevap var. Bazen insanların istedikleri, benim durumumda olduğu gibi, birkaç adım atmadan çalışan basit bir çözümdür.
Alex

0

Koş updatedb, bir değişiklik olup olmadığına bak.

Groupdb değişmediğinde benim OSX makinemde aynı:

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
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.