SUID, SGID ve Yapışkan Bitler, Linux'ta yürütülebilir dosyalar ve dizinler için ayarlayabileceğiniz güçlü özel izinlerdir. Bunları kullanmanın yararlarını ve olası tuzaklarını paylaşacağız.
Zaten Kullanımdalar
Güvenliği çok kullanıcılı bir işletim sistemine dönüştürmek birkaç yol sunar. Örneğin, (görünüşte) temel şifre kavramını ele alalım. Hepsinin saklanması gerekir, böylece her kullanıcı oturum açtığında, sistem yazdığı şifreyi saklanan kopyayla karşılaştırabilir. Açıkçası, şifreler krallığın anahtarları olduğundan, korunmaları gerekir.
Linux'ta depolanan şifreler iki şekilde korunur: şifrelenir ve yalnızca root
ayrıcalıklar şifreleri içeren dosyaya erişebilir. Kulağa hoş gelebilir, ancak bir sorun yaratır: root
ayrıcalıklar depolanan şifrelere erişebilir, bu erişime sahip olmayanlar şifrelerini nasıl değiştirir?
Durumunuzu Yükseltme
Genellikle Linux komutları ve programları, programı başlatan kişi ile aynı izin kümesiyle çalışır. Ne zaman root
koşar passwd
bir şifre değiştirme komutu ile çalışır root
’Nin izinleri. Bu demektir ki passwd
komutu, /etc/shadow
dosya.
İdeal olan, sistemdeki herhangi birinin programı başlatabileceği bir şemadır. passwd
program, ancak passwd
program tutma root
Yükseltilmiş ayrıcalıkları. Bu, herhangi birinin kendi şifresini değiştirmesini sağlar.
Yukarıdaki senaryo, Kullanıcı Kimliğini Ayarla bitinin (SUID
) yapar. Program ve komutları, programı başlatan kişinin izinleri yerine dosya sahibinin izinleriyle çalıştırır.
Programın Durumunu Yükseltiyorsunuz
Yine de başka bir sorun var. Kişinin başkasının şifresi ile karışması engellenmelidir. Linux, SUID
geçici olarak ödünç alınmış izinlerle uygulamaları çalıştırmasına izin veren bir programdır, ancak bu güvenlik hikayesinin yalnızca yarısıdır.
Birinin başka bir kişinin şifresiyle çalışmasını engelleyen kontrol mekanizması, passwd
işletim sistemi ve SUID şemasını değil.
Yükseltilmiş ayrıcalıklarla çalışan programlar, “tasarım gereği güvenlik” anlayışıyla oluşturulmadıkları takdirde güvenlik riski oluşturabilir. Bu, güvenlik ilk düşündüğünüz şeydir ve sonra bunun üzerine inşa edersiniz. Programınızı yazmayın ve daha sonra programınıza bir güvenlik katmaya çalışın.
Açık kaynaklı yazılımın en büyük avantajı, kaynak koduna kendiniz bakabilmeniz veya güvenilir hakem değerlendirmelerine bakabilmenizdir. İçin kaynak kodunda passwd
program, kontroller vardır, böylece programı çalıştıran kişinin root
. Birisi farklı yeteneklere izin verilir root
(veya kullanan biri sudo
).
Bu, birisinin root
.
Aşağıdakiler bunun dikkate alındığı bir örnektir. Çünkü root
herhangi bir şifreyi değiştirebilirse, programın kişinin izin değişikliğine sahip olduğu şifreleri görmek için genellikle yaptığı denetimlerle uğraşması gerekmez. İçin böylece root
, bu kontrolleri atlar ve kontrol fonksiyonundan çıkar.
Çekirdek Linux komutları ve yardımcı programlarıyla, güvenliklerini oluşturduklarından ve kodun birçok kez incelendiğinden emin olabilirsiniz. Tabii ki, henüz bilinmeyen istismar tehdidi var. Ancak, yamaların veya güncellemelerin yeni tanımlanan güvenlik açıklarına karşı hızlıca görünmesi.
Üçüncü taraf bir yazılımdır – özellikle açık kaynak olmayan herhangi bir yazılımdır – kullanmayla ilgili son derece dikkatli olmanız gerekir SUID
ile. Bunu yapma demiyoruz, ancak eğer yaparsanız, sisteminizi riske atmayacağından emin olmak istersiniz. Kendini ve onu çalıştıran kişiyi doğru şekilde yönetmeyecek bir programın ayrıcalıklarını yükseltmek istemezsiniz.
SUID Kullanan Linux Komutları
Normal bir kullanıcı tarafından çalıştırıldığında komuta yükseltilmiş ayrıcalıklar vermek için SUID bitini kullanan Linux komutlarından bazıları şunlardır:
ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd
Dosya adlarının SUID bitinin ayarlandığını gösteren kırmızı renkle vurgulandığını unutmayın.
Bir dosya veya dizindeki izinler genellikle üç karakterden oluşan üç grupla temsil edilir: rwx. Bunlar okuma, yazma ve yürütme anlamına gelir. Harfler varsa, bu izin verilir. Kısa çizgi (-
) bir mektup yerine, bu izin verilmemiştir.
Bu izinlerden üç grup vardır (soldan sağa): dosyanın sahibi, dosya grubunun üyeleri ve diğerleri için. Ne zaman SUID
bit bir dosyada ayarlanırsa, “s” sahibinin yürütme iznini temsil eder.
Eğer SUID
biti yürütülebilir özellik olmayan bir dosyada ayarlanır, büyük “S” bunu belirtir.
Bir örneğe bakalım. Normal kullanıcı dave
türleri passwd
komut:
passwd
passwd
komut istemleri dave
yeni şifresi için. Biz kullanabilirsiniz ps
çalışan işlemlerin ayrıntılarını görmek için komut.
Kullanacağız ps
ile grep
farklı bir terminal penceresinde ve passwd
süreci. Biz de kullanacağız -e
(her işlem) ve -f
ile (tam biçim) seçenekler ps
.
Aşağıdaki komutu yazıyoruz:
ps -e -f | grep passwd
İki satır bildirildi, ikincisi grep
İçinde “passwd” dizesi olan komutları arama işlemi. Bizi ilgilendiren ilk çizgi bu, çünkü bu passwd
süreç dave
başlattı.
Görebiliyoruz passwd
işlem, root
başlattı.
SUID Bit'in Ayarlanması
Değiştirmek kolaydır SUID
ısırmak chmod
. u+s
sembolik mod SUID
biraz ve u-s
sembolik mod SUID
bit.
SUID biti ile ilgili bazı kavramları göstermek için, htg
. Kök dizininde dave
kullanıcı, ve sahip değil SUID
bit kümesi. Yürütüldüğünde, gerçek ve etkili kullanıcı kimliklerini (UID) görüntüler.
Gerçek UID programı başlatan kişiye aittir. Etkin kimlik, programın başlatılmış gibi davrandığı hesaptır.
Aşağıdakileri yazıyoruz:
ls -lh htg
./htg
Programın yerel kopyasını çalıştırdığımızda, gerçek ve etkili kimliklerin her ikisinin de dave
. Yani, normal bir program gibi davranıyor.
Hadi kopyalayalım /usr/local/bin
dizinini kullanarak diğerlerini kullanabilirsiniz.
Aşağıdakileri kullanarak şunu yazıyoruz: chmod
ayarlamak SUID
seçin ve ayarlandığını kontrol edin:
sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg
Böylece program kopyalanır ve SUID biti ayarlanır. Tekrar çalıştıracağız, ancak bu sefer kopyayı /usr/local/bin
Klasör:
htg
Buna rağmen dave
programı başlattığınızda, etkin kimlik root
kullanıcı. Yani, eğer mary
programı başlatır, aşağıda gösterildiği gibi aynı şey olur:
htg
Gerçek kimlik mary
ve etkili kimlik root
. Program kök kullanıcının izinleriyle çalışır.
İLİŞKİLİ: Linux'ta chmod Komutu Nasıl Kullanılır
SGID Bit
Küme Grubu Kimliği (SGID
) bit çok benzer SUID
bit. Ne zaman SGID
bit çalıştırılabilir bir dosyada, etkin grup dosya grubuna ayarlanır. İşlem, dosyayı başlatan kişinin izinlerinden ziyade, dosya grubunun üyelerinin izinleriyle çalışır.
Tweaked bizim htg
böylece etkili grubu da gösterir. Grubunu değiştireceğiz htg
kullanıcı olmak için program mary
Default varsayılan grubu, mary
. Biz de kullanacağız u-s
ve g+s
ile sembolik modlar chown
kaldırmak için SUID
bit ve ayarlamak SGID
.
Bunu yapmak için aşağıdakileri yazıyoruz:
sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg
Görebilirsiniz SGID
bit, grup izinlerinde “s” ile gösterilir. Ayrıca, grubun mary
ve dosya adı şimdi sarı renkle vurgulanır.
Programı çalıştırmadan önce hangi grupları oluşturalım? dave
ve mary
ait olmak. Kullanacağız id
ile komut -G
(gruplar) seçeneği, tüm grup kimliklerini yazdırmak için. Sonra, htg
olarak programla dave
.
Aşağıdaki komutları yazıyoruz:
id -G dave
id -G mary
htg
İçin varsayılan grubun kimliği mary
1001 ve etkin grubun htg
programı 1001'dir. dave
, sitedeki üyelerin izinleriyle çalışıyor mary
grubudur. Sanki aynı dave
katılmıştı mary
grubudur.
Haydi uygulayalım SGID
bir dizine bit. İlk olarak “work” adlı bir dizin oluşturacağız ve ardından grubunu “geek” olarak değiştireceğiz. Daha sonra SGID
dizin üzerinde.
Kullandığımızda ls
dizinin ayarlarını kontrol etmek için, -d
(directory) seçeneğini seçerek dizinin içeriğini değil dizinin ayrıntılarını görürüz.
Aşağıdaki komutları yazıyoruz:
sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work
SGID
bit ve “geek” grubu ayarlanır. Bunlar, içinde oluşturulan tüm öğeleri etkiler work
dizin.
Girmek için aşağıdakileri yazıyoruz work
dizininde “demo” adlı bir dizin oluşturun ve özelliklerini kontrol edin:
cd work
mkdir demo
ls -lh -d demo
SGID
bit ve “geek” grubu otomatik olarak “demo” dizinine uygulanır.
İle bir dosya oluşturmak için aşağıdakileri yazalım touch
komutunu verin ve özelliklerini kontrol edin:
touch useful.sh
ls -lh useful.sh
Yeni dosya grubu otomatik olarak “geek” olarak ayarlanır.
İLİŞKİLİ: Linux'ta chown Komutu Nasıl Kullanılır
Yapışkan Bit
Yapışkan parça adını tarihsel amacından alır. Yürütülebilir bir dosyada ayarlandığında, çalıştırılabilir öğeye ait metin bölümlerinin takas halinde tutulması gerektiğini belirterek yeniden kullanımlarını hızlandırır. Linux'ta, yapışkan bit yalnızca bir dizini etkiler – bir dosyaya ayarlamak mantıklı olmaz.
Yapışkan biti bir dizine ayarladığınızda, kullanıcılar yalnızca bu dizinde kendilerine ait olan dosyaları silebilir. Dosyalar üzerinde hangi dosya izinlerinin birleşimi ayarlanmış olursa olsun, başkasına ait dosyaları silemezler.
Bu, herkesin ve başlattığı işlemlerin paylaşılan dosya depolama alanı olarak kullanabileceği bir dizin oluşturmanıza olanak tanır. Dosyalar korunur, çünkü yine kimse başkalarının dosyalarını silemez.
Şimdi “paylaşılan” adlı bir dizin oluşturalım. Kullanacağız o+t
ile sembolik mod chmod
bu dizindeki yapışkan biti ayarlamak için. Daha sonra bu dizindeki izinlerin yanı sıra bu dizindeki izinlere de bakacağız. /tmp
ve /var/tmp
dizinleri.
Aşağıdaki komutları yazıyoruz:
mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp
Yapışkan bit ayarlanırsa, “diğer” dosya izinleri kümesinin yürütülebilir biti “t” olarak ayarlanır. Dosya adı da mavi renkle vurgulanır.
/tmp
ve /var/tmp
klasörler, sahip, grup ve diğerleri için tüm dosya izinlerine sahip iki dizin örneğidir (bu nedenle yeşil renkle vurgulanır). Geçici dosyalar için paylaşılan konumlar olarak kullanılırlar.
Bu izinlerle, herkes teorik olarak her şeyi yapabilmelidir. Ancak, yapışkan bit onları geçersiz kılar ve hiç kimse ona ait olmayan bir dosyayı silemez.
Hatırlatmalar
Aşağıdakiler, ileride başvurmak üzere yukarıda ele aldığımız konuların hızlı bir kontrol listesidir:
-
SUID
yalnızca dosyalarda çalışır. - Basvurabilirsin
SGID
dizinlere ve dosyalara. - Yapışkan biti yalnızca dizinlere uygulayabilirsiniz.
- Eğer “
s
“,“g
“Veya“t
”Göstergeleri, büyük harf, yürütülebilir bit (x
) ayarlanmadı.