Dosyalara ve dizinlere ayrıcalıklı erişim, aslında sadece olmamak root
ya da olmamak gibi yeteneklerle belirlenir . Uygulamada, root
genellikle tüm olası yetenekler vardır, ancak hepsinin / çoğunun düşürülebileceği ya da bazılarının diğer kullanıcılara (süreçleri) verilebileceği durumlar vardır.
Kısaca, erişim kontrolünün ayrıcalıklı bir süreç için nasıl çalıştığını zaten açıkladınız. İşte farklı yetenekler aslında onu nasıl etkiliyor:
Buradaki temel yetenekCAP_DAC_OVERRIDE
, "dosya okuma, yazma ve izin denetimlerini atlama" işlemlerini atlayabilen bir işlemdir. Bu, herhangi bir dosyaya okuma ve yazmanın yanı sıra, dizin okuma, yazma ve erişmeyi de içerir.
Aslında yürütülebilir olarak işaretlenmemiş dosyaları çalıştırmak için geçerli değildir. İçinde commentgeneric_permission
( fs/namei.c
), dosyalar için erişim kontrol etmeden önce, diyor
Okuma / yazma DAC'leri her zaman geçersiz kılınır. Yürütülebilir DAC'ler, en az bir yürütme biti ayarlanmış olduğunda geçersiz kılınır.
Ve x
eğer dosyayı çalıştırmaya çalışıyorsanız , kod ayarlanmış en az bir bit olup olmadığını kontrol eder . Yanlışlıkla rastgele veri dosyalarını çalıştırmayı ve hata veya tuhaf sonuçlar almayı önlemek için bunun yalnızca bir kolaylık özelliği olduğunu düşünüyorum.
Her neyse, izinleri geçersiz kılabilirseniz, yalnızca çalıştırılabilir bir kopya oluşturabilir ve çalıştırabilirsiniz. Bir sürecin setuid dosyaları için teoride bir fark yaratabilir rağmen (dosya izinlerini (geçersiz kılma yeteneğine sahip oldu CAP_DAC_OVERRIDE
), ancak diğer ilgili yetenekleri yoktu ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Fakat sahip CAP_DAC_OVERRIDE
düzenleme verir /etc/shadow
yaklaşık eşit yüzden ve bunun gibi şeyler Zaten sadece tam kök erişime sahip olmak.)
Ayrıca CAP_DAC_READ_SEARCH
herhangi bir dosyayı okuma ve herhangi bir dizine erişme, ancak yürütme veya bunlara yazma imkanı da yoktur. ve CAP_FOWNER
bir sürecin izinleri ve dosya grubunu değiştirmek gibi genellikle sadece dosya sahibi için ayrılan şeyler yapmasına izin verir.
Dizinlerdeki yapışkan biti geçersiz kılmak sadece altta belirtilmiştir CAP_FOWNER
, bu yüzden bunu CAP_DAC_OVERRIDE
görmezden gelmek için yeterli olmaz. (Size yazma izni verirdi, ancak genellikle yapışkan dizinlerde zaten buna sahipsiniz ve +t
sınırlıyorsunuz.)
(Özel aygıtların burada "dosyalar" olarak sayıldığını düşünüyorum. En azından generic_permission()
yalnızca dizinler için bir tür kontrol var, ancak bunun dışında kontrol etmedim.)
Elbette, yeteneklerin bile dosyaları değiştirmenize yardımcı olmayacağı durumlar vardır:
/proc
ve içindeki bazı dosyalar /sys
gerçekten gerçek dosyalar olmadığından
- SELinux ve kökü sınırlandırabilecek diğer güvenlik modülleri
chattr
değişmez +i
ve sadece +a
ext2 / ext3 / ext4 üzerindeki bayrakları ekleyin , her ikisi de kök dizinini durdurur ve ayrıca dosya adlarını vb. önler.
- sunucunun kendi erişim denetimini yapabileceği ağ dosya sistemleri, örneğin
root_squash
NFS , kökün kimseyle eşleşmiyor
- Fuse, sanırım her şeyi yapabilir
- salt okunur bağlamalar
- salt okunur aygıtlar
capabilities(7)
man sayfasında yansıtılmamış görünmesi şaşırtıcı - bir hata raporu doldurmayı düşünün!