GID, güncel, birincil, tamamlayıcı, etkili ve gerçek grup kimlikleri?


22

Aşağıdaki bağlantılar bu kavramları farklı bağlamlarda tartışmaktadır. Tanımlarını okudum, ancak hala bunların nasıl bir ilişki içinde olduklarını veya bazılarının aynı olup olmadığını söyleyemiyorum.

İşte kafamın kaynağının bir örneği:

Göre man idben yazarsanız, idben dedikleri almalısınız etkili ve gerçek grup kimlikleri.

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

Bununla birlikte, Wikipedia , birincil ve ek kimlikleri idayırt etmenin sonucunu ifade eder . Ayrıca, Ara arasında ayırım primer vs tamamlayıcı ve etkili vs gerçek grup kimlikleri. Bu kavramların birbirleriyle ilişkisi nedir?

Ayrıca, birincil grup kimliği = grup kimliği = geçerli grup kimliği doğru mu?


Soru belirsiz: Sağladığınız bağlantılar çok fazla bilgi veriyor. Peki ya sen anlamadın mı?
psusi

Yanıtlar:


24

Burada iki farklı ayrım yapıyorsunuz:

  1. Arasında gerçek ve etkili grup kimlikleri
  2. Arasında birincil ve ek kullanıcının gruplarına

İlk ayrım, işlemlerin nasıl yürütüldüğü ile ilgilidir . Normalde, bir komut / program çalıştırdığınızda, kullanıcı haklarınızla çalıştırılır. Kullanıcının birincil grubu ile aynı gerçek grup kimliğine sahiptir . Bu, bazı görevleri başka bir özel grubun üyesi olarak gerçekleştirmek için bir işlemle değiştirilebilir. Bunu yapmak için, programlar etkin grup kimliklerini setgiddeğiştiren işlevi kullanır .

İkinci ayrım kullanıcıları ifade eder . Her kullanıcının birincil grubu vardır . Kullanıcı başına sadece bir tane var ve komutun çıktısında gid olarak geçiyorid . Bunun dışında, her kullanıcı birkaç ek gruba ait olabilir - ve bunlar idçıktının sonunda listelenir .

[Düzenle] :

Manpage'in idbiraz yanıltıcı olduğu konusunda hemfikirim . Muhtemelen bilgi belgesinin sağladığı açıklamanın soyulmuş bir versiyonu olması nedeniyledir. Daha net görmek için çalıştırın info coreutils "id invocation"( idkılavuzun sonunda önerildiği şekilde ).


@Rozcietrzewiacz teşekkürler. Bu çok yardımcı oldu. Bunu varsayabilir miyim? anki grup kimliğinin = birincil grup ?
Amelio Vazquez-Reina

1
Genel olarak hayır. Geçerli "gerçek" grup newgrpkomut kullanılarak değiştirilebilir - kılavuzun ikinci paragrafına ilk linkinizde bakın!
rozcietrzewiacz 07:11

18

Çekirdek görünümü

Kavramsal olarak, bir sürecin üyesi olduğu üç grup grup vardır. Her küme, aşağıdakilerden birinin alt kümesidir.

  1. İşlemin varsayılan grubu olan ve bu işlem tarafından oluşturulan dosyaların ait olacağı tek grup.
  2. Grup bir dosyayı açmak için izin istediğinde kontrol edilen grup kümesi.
  3. Ekstra ayrıcalıklarla çalışan bir işlemin oluşturduğu grup kümesi.

Tarihsel nedenlerden dolayı, bu kümeler sırasıyla:

  1. etkili bir grup kimliği (egid);
  2. etkili grup kimliği artı ek grup kimlikleri ;
  3. yukarıdakilerin tümü artı gerçek grup kimliği ve kaydedilmiş grup kimliği .

Normalde, bir program tek bir kullanıcı kimliğine sahiptir. Yürütülebilir setuid mod biti ayarlanmışsa, programın iki kullanıcı kimliği vardır: Etkin kullanıcı kimliği, dosya izinleri, kullanıcı başına sınırlamalar, işlemin kök olarak çalışıp çalışmadığını belirleyen kullanıcı kimliğidir. Süreç, her zaman ekstra ayrıcalıklarına ihtiyaç duymuyorsa veya iki kök dışı kullanıcı arasında geçiş yapması gerekiyorsa, etkili ve gerçek kullanıcı kimlikleri arasında geçiş yapabilir.

Aynı mekanizma grup için de var. Gruplar için, sistem tasarlanırken mevcut olmayan ek bir özellik vardır: bir işlem herhangi bir sayıda gruba üye olabilir; bunlar ek grup kimlikleridir.

Kullanıcı veritabanı görünümü

Bir kullanıcının kimliği doğrulandıktan sonra, giriş işlemi, kullanıcının kabuğunu başlatmadan hemen önce (veya kullanıcının istediği programı) bu kullanıcıya geçer. İstediğiniz kullanıcıya geçmeden (ve kök ayrıcalıklarını kaybetmeden) hemen önce oturum açma işlemi istenen gruplara geçer.

Erken unix versiyonlarında, bir işlem sadece tek bir grupta olabilirdi. Bu grup, kullanıcının veritabanında depolanan kullanıcının birincil grup kimliğidir (genellikle /etc/passwd). Bu grup, kabuk veya oturum açma işlemi tarafından başlatılan diğer programların gerçek ve etkili grup kimliği olur.

Günümüzde, bir işlem birden fazla grupta olabilir, böylece kullanıcılar da birden fazla grupta olabilir. Grup veritabanı (genellikle /etc/group) her grup için bir kullanıcı listesi içerir. Bu gruplar, giriş işlemi tarafından başlatılan program için ek grup kimlikleri haline gelir.


Teşekkürler. Cevabınızı anlamada bazı sorularım var. unix.stackexchange.com/questions/466742/…
Tim

1

Buradaki diğer mükemmel cevaplar, ama hala benim gibi kafam karıştıysa, işte başka bir yaklaşım. Lütfen bu konunun sadece bir öğrencisi olduğumu, bir usta değil olduğumu , bu nedenle bu cevabın devam eden bir çalışma olduğunu ve en azından henüz katı bir cevap olarak değerlendirilmeyeceğini unutmayın. Bu cevabı v0.2 olarak düşünün.

Gruplar aynı anda basit ve karmaşıktır.

Aşağıda kullanılan kimliklerin anahtarı:

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

Kullanıcı ve Grup Kimliği adları:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

İşlemler nasıl kimlik kazanır:

1) Giriş kimlik doğrulamasını kullanıcı adı ve iadeler LuIDve LgIDgelen /etc/passwd.

2) İlk süreç etkili = real = login, yani

EuID=RuID=LuID 
EgID=RgID=LgID

3) Çatallaşmış çocuk devralır RuID, EuID, RgID, ve EgID, (& muhtemelen kaydedilmiş ve ek), ancak,

  • S u id bit (ler) yürütülecek yeni programın dosyasına ayarlanmışsa, dosyadan etkin bir şekilde ayarlayın:

    EUID = fuid

  • S g id bit (ler) yürütülecek yeni programın dosyasına ayarlanmışsa, dosyadan etkin bir şekilde ayarlayın:

    Egid = FGIH'ların her biri

Not: Temel dosya sisteminin intihar ve nosuid mount seçenekleri de geçerlidir.

4a) eğer s u kimliği kullanıldı sete EuIDsonra, EuIDgeçici olarak değiştirilebilir (örneğin) kökünden döndürüldüğünü, ancak ilk orijinal değeri kaydedilir mi OuIDistenirse daha sonra restore böylece.

4b) IF ler g id kullanıldı sete EgIDsonra, EgIDgeçici olarak değiştirilebilir (örneğin) kökünden döndürüldüğünü, ancak ilk orijinal değeri kaydedilir mi OgIDistenirse daha sonra restore böylece.


Bir dosya oluşturulduğunda:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

Okumak için açmak için:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

Yazmaya açmak için:

(Same as above but write bit set to allow writing.)

Yürütmeye açmak için:

(Same as above but execute bit set to allow execution.)

Bir mesajın gönderilmesi gerektiğinde:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

Kaynaklar: man kimlik bilgileri

Ekstra: İşte / etc / group dosyanızı güzel şekilde yazdırmanız için bir yardımcı program:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'
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.