Bir süper kullanıcı işlemi, parola dosyasındakilerle eşleşmeyen bir işlemin gerçek kullanıcı kimliğini ve grup kimliğini değiştirebilir mi?


11

APUE kaynağından

Bir sürecin gerçek kullanıcı kimliği ve gerçek grup kimliği gerçekte kim olduğumuzu tanımlar. Bu iki alan, oturum açtığımızda şifre dosyasındaki girişimizden alınır. Normalde, bir oturum açma işlemi sırasında bu değerler değişmez, ancak bir süper kullanıcı işleminin bunları değiştirmesi için yollar vardır.

Süper kullanıcı işlemi, bir işlemin gerçek kullanıcı kimliğini ve gerçek grup kimliğini değiştirebilir, böylece gerçek kullanıcı kimliği ile gerçek grup kimliği arasındaki ilişki parola dosyasındaki ile eşleşmez mi? Örneğin, kullanıcı parola dosyası başına Timbir grubun üyesi değilse ocean, bir süper kullanıcı işlemi, bir işlemin gerçek kullanıcı kimliğini ve gerçek grup kimliğini sırasıyla Timve oceandeğiştirebilir mi?


5
Burada önemli bir açıklama: süper kullanıcı ayrıcalıklarıyla çalışan bir işlem , başka bir işleminkini değil , kendi UID ve GID'sini değiştirme yeteneğine sahiptir .
filbranden


Kullanıcı Bilgisi veritabanı tamamen kullanıcı arazisidir. Çekirdek, kullanıcı veya grup veritabanını değil, yalnızca UID ve GID değerlerini dikkate alır.
德里克 薯条 德里克

Yanıtlar:


15

Evet, bir süper kullanıcı işlemi gerçek kullanıcı kimliğini ve gerçek grup kimliğini istediği değere değiştirebilir. Değerler /etc/passwdve /etc/shadowdeğerler ayarlanmalıdır ne için yapılandırma, ancak olası değerler bir sınırlama vardır.

Düzenleme # 1

Bu, gibi programların logindosyalardan değerleri okuyacağı anlamına gelir , bu nedenle dosyalar yapılandırma dosyaları veya giriş dosyalarıdır. Bir programın neler yapabileceği konusunda kısıtlama değildirler. Süper kullanıcı işlemi çekirdeğe herhangi bir değer iletebilir ve çekirdek herhangi bir dosyayı denetlemez.

Bir program arayabilir

setgid (54321);
setuid (12345);

ve herhangi bir dosyada kimliğin hiçbirinden bahsedilmemiş olsa bile bu işe yarar.


9

Parola dosyası ve grup dosyası okunmaz, gerçek kullanıcı kimliğini ve gerçek grup kimliğini ayarlamak için yalnızca oturum açma işlemi tarafından okunur.

Çekirdekte bu dosyalardan bahseden hiçbir şey yok. Oturum açma dosyaları açmak, işlemek ve iki kimliği ayarlamak zorundadır. Bu kimlikleri başka bir yerden almak farklı yazılabilir. Örneğin, ağa bağlı bir veritabanından.

CAP_SETUID özelliğine sahip herhangi bir işlem bu kimlikleri ayarlayabilir, kök bu özelliğe sahiptir.

Unix'teki güvenlik modeli, çekirdekte uygulanmış ve yükseltilmiş yeteneklerle (örn. Kök olarak) çalışan süreçte uygulanır.


O Notu /etc/passwdve /etc/groupayrıca tarafından okunur ls, psve ihtiyaçları kullanıcı / grup kimliklerinden / olarak kullanıcı / grup isimleri çevirmek için herhangi bir diğer program. (Bunu, bu ayrıntıları saklamanın alternatif yöntemlerini bildiğinden, bir kütüphane aracılığıyla yapabilirler.)


1
Onlar ( /etc/passwd, /etc/groups) ayrıca süreç kullanıcı yerine örneğin iç Sayısal kimliklerin, isimlerini veya göstermek istediğiniz süreçler tarafından okunur psve ls.
Jonas Schäfer

3

Diğer şeylerin yanı sıra, /etc/passwdkullanıcının adını kullanıcının UID'sine çevirmektir . Bob UID'sinin ne olduğunu umursamıyorsanız, bu dosyaya ihtiyacınız yoktur. Sadece rastgele bir UID / GID olarak değiştirmek istiyorsanız, ilgili sistem çağrılarını kullanın:

int setuid(uid_t uid);
int setgid(gid_t gid);

Kök işleminin sahip olduğu CAP_SETUIDve CAP_SETGID özelliklerine sahip ayrıcalıklı bir işlemin yalnızca kendi UID ve GID'sini değiştirebileceğini, çalışan başka bir işlemin değiştiremeyeceğini unutmayın.

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.