Setuid
Setuid ve Setgid , sırasıyla "Set User ID" ve "Set Group ID"nin kısaltması olan Unix terimleridir. Setuid, bazen "suid" olarak da adlandırılır ve "setgid" , Unix tabanlı bir işletim sistemindeki dosyalara veya dizinlere atanabilen erişim izinleridir . Esas olarak, sistem kullanıcılarının belirli bir görevi gerçekleştirmek için geçici olarak yükseltilmiş ayrıcalıklarla ikili dosyaları çalıştırmalarına izin vermek için kullanılırlar.
Bir dosyada "Setuid" biti etkinleştirilmişse, aşağıdaki gibi bir listede "s" ile tanımlanır:
-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd
Bu özellik, normal kullanıcıların, normal bir kullanıcının sahip olduğu ayrıcalıklardan daha yüksek ayrıcalıklar gerektiren görevleri gerçekleştirebilmesi için gereklidir. Yükseltilmiş ayrıcalıklar gerektiren bazı görevler açık olmayabilir (örneğin, bir ağ arabirimi üzerinden kontrol paketlerini göndermesi ve dinlemesi gereken ping komutu).
Yürütülebilir dosyalardaki Setuid
Normalde bu bit, yürütülebilir dosyalar üzerinde ayarlanır. Bir ikili yürütülebilir dosyaya setuid özniteliği atandığında, normal sistem kullanıcıları bu dosyayı çalıştırabilir ve oluşturulan işlemde o dosyanın sahibi olan kullanıcıdan (genellikle root ) ayrıcalıklar elde edebilir . İşlem yönetici ayrıcalıkları kazandığında, uygulama sistem üzerinde normal kullanıcıların normalde yapamayacağı görevleri gerçekleştirebilir. Sistem, yürütülebilir dosyayı çağıran kullanıcının, ptrace, LD_LIBRARY_PATH kullanma veya ona sinyal gönderme gibi herhangi bir şekilde yeni işlemi değiştirmesini engeller (terminalin kendisinden gelen sinyaller kabul edilecektir).
Örneğin setuid biti /usr/bin/passwd dosyasında herkesin kontrollü bir şekilde şifresini değiştirebilmesi için kullanılır. Bu programı çalıştırabilmek, bir kullanıcının parola dosyasına (/etc/shadow, /etc/passwd ile karıştırılmamalıdır) yazmasına izin verir, ancak dosyaya yazma izni vermek zorunda kalmadan, bu büyük bir güvenlik açığı olur.
setuid özelliği birçok durumda çok kullanışlı olmasına rağmen, setuid özniteliği dikkatli bir şekilde tasarlanmamış yürütülebilir programlara atanırsa güvenlik riski oluşturabilir. Kullanıcılar, sürekli olarak yükseltilmiş ayrıcalıklar elde etmek veya istemeden bir Truva atı çalıştırmak için buggy programlarındaki güvenlik açıklarından yararlanabilir .
setgid özniteliği, setuid'in kullanıcı tabanlı ayrıcalıklar için yaptığı gibi, bir işlemde grup tabanlı ayrıcalıkların değiştirilmesine izin verir.
Dizinlerdeki Setuid
Bir dizindeki setgid bayrağı, dosyalardaki uygulamasından tamamen farklı bir anlama sahiptir. Setgid iznine sahip dizinler, içlerinde oluşturulan tüm dosya ve alt dizinleri, dosyayı veya alt dizini oluşturan kullanıcının grubuna değil, dizinin sahibinin grubuna ait olmaya zorlar.
Öte yandan setuid bayrağının bir dizine uygulanması durumunda hiçbir etkisi yoktur. Bunun nedeni, dizinin sahibini o dizinde oluşturulan nesnelere yayacak olsaydınız, orada bir dosya oluşturan kullanıcının dosya üzerindeki sahip izinlerini hemen kaybeder, belki de bir daha kullanmalarını veya değiştirmelerini engeller. .
Örnekler
Örnek bir ikili dosyaya (kullanıcı) SUID izinleri ekleyin
# chmod u+s /home/user/executable
Bir ikili (kullanıcı) için SUID izinlerini kaldırın
# chmod us /bin/ping
Örnek bir ikili dosyaya (grup) GUID izinleri ekleyin
# chmod g+s /home/user/executable
Örnek bir ikili (grup) için GUID izinlerini kaldırın
# chmod gs /home/user/executable
SUID özniteliklerine sahip bir ikili programın izinlerini görüntüleme
# ls -al /bin/ping
-rwsr-xr-x 1 kök kök 35712 2011 -05-03 12 :43 /bin/ping
SUID veya SGID izinlerine sahip tüm dosyaları bulun
# find / -path /proc -prune -o -type f -perm +6000 -ls
Yalnızca SUID izinlerine sahip tüm dosyaları bulun
# find / -path /proc -prune -o -type f -perm +4000 -ls
Yalnızca SGID izinlerine sahip tüm dosyaları bulun
# find / -path /proc -prune -o -type f -perm +2000 -ls
Kullanım örnekleri
SUID
4711 izinleri root'a ait bir yürütülebilir dosyada .
So-ve-so adlı bir kullanıcı dosyayı çalıştırmayı dener. Yürütülebilir dosya için izinler, yürütme iznine (471 1 ) sahip tüm kullanıcılara ayarlanmıştır , böylece falancalar dosyayı yürütebilir. Dosyanın sahibi root'tur ve SUID izni ayarlanmıştır ( 4 711), bu nedenle dosya root olarak çalışır .
Bu şekilde dosya root olarak yürütülür , yani filan, şuna tam ayrıcalıklar vermeden normalde yapamayacağı diğer dosyaları değiştirebilir . Bu ikili dosyada kullanılır . sırasıyla kullanıcı hesabı bilgilerini ve parola karmalarını depolayan y dosyasını değiştirmeniz gerekir, ancak bu dosyalar yalnızca root tarafından değiştirilebilir .
/usr/bin/passwdpasswd/etc/passwd/etc/shadow
[ falanca @ host ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ falanca @ host ~ ] $ passwd
falanca için parola değiştirme.
KILAVUZ
2071 , sahip grubu olarak "sultan" ve sahibi kullanıcı olarak "kök" olan "bitkiler" adlı bir dizin.
"Falanca" adlı bir kullanıcı öncelikle "falanca" grubuna ve ikincil olarak "sultan" grubuna aittir. "so-ve-so", "bitkiler" dizini içinde "mango" adlı yeni bir dizin oluşturur. "mango" adlı yeni dizine sahip olan grup, "sultano"yu devralır.
GUID olmadan sahip olan grup "şöyle" olurdu.
[ falanca @ host ~ ] $ grupları
falanca falan : falanca sultan
[ falanca @ host ~ ] $ stat -c "%a %U:%G %n" ~/plants/
2770 falanca:sultan /home/so-and-so/plants/
[ falanca @ ana bilgisayar ~ ] $ mkdir ~/plants/mango
[ falanca @ host ~ ] $ touch ~/plants/.mango
[ falanca @ host ~ ] $ stat -c "%U:%G %n" ~/plants/mango/
so-and -so:sultan /home/so-and-so/plants/mango/
[ falanca @ host ~ ] $ stat -c "%U:%G %n" ~/plants/.mango falanca
:sultan /home/so-and-so/plants/.mango
[ falanca @ ana bilgisayar ~ ] $ dokunma testi
[ falanca @ host ~ ] $ stat -c "%U:%G %n" ~/test
falanca:so-ve-so /home/so-and-so/test