Standart bir Linux dosya sisteminde, bu yaygın dizinlerden hangileri varsayılan olarak dünya tarafından yazılabilir ?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
Neden dünyaya yazılabilirler? Bu bir güvenlik riski oluşturuyor mu?
Standart bir Linux dosya sisteminde, bu yaygın dizinlerden hangileri varsayılan olarak dünya tarafından yazılabilir ?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
Neden dünyaya yazılabilirler? Bu bir güvenlik riski oluşturuyor mu?
Yanıtlar:
Sadece FHS zorunlu yaygın dünya çapında yazma olan dizinleri vardır /tmp
ve /var/tmp
. Her iki durumda da, bunun nedeni, herkes tarafından yapılabilecek geçici dosyaları depolamak içindir.
Ayrıca /dev/shm
, tmpfs (RAM tarafından desteklenen dosya sistemi) olarak, işlemler arasında paylaşılan orta boyutlu verilere hızlı erişim veya yalnızca yeniden başlatma sırasında yok edileceği garanti edilen dosyalar oluşturmak yaygındır .
Ayrıca bir /var/mail
veya /var/spool/mail
bazen başka biriktirici dizinleri de olabilir. Bunlar postayı işlenmeden önce geçici olarak tutmak için kullanılır. Kullanılan araçlara bağlı olarak her zaman dünya tarafından yazılamazlar. Öyle olduğunda, bunun nedeni dosyaların cinler tarafından işlenmesi için kullanıcı araçları tarafından oluşturulabilmesidir.
Bu dizinlerin tümü genellikle yapışkan bit ( t
) ayarına sahiptir, yani yalnızca bir dosyanın veya dizinin sahibi dosyadaki dosyaları taşıyabilir veya silebilir.
Herhangi bir kullanıcı olarak çalışan herhangi bir program bu dizinlerde dosya oluşturabilir ve kendi verileri için güvenlik kadar doğru olanı yapmak program oluşturmaktır. Potansiyel olarak dosya sistemini dolduran birinden başka genel bir güvenlik sorunu yoktur, ancak bir programın yanlış yapması için çok fazla kapsam vardır.
Olmuştur bazı hareketler hizmete özel doğru /tmp
dizinlere. Bunlar, gelebilecek potansiyel hatalardan bazılarını önler, bu nedenle programın dizini nasıl kullandığı konusunda hatasız olması hayati değildir.
Dünyada yazılabilir dizinleri sisteminizde şu şekilde bulabilirsiniz:
find / -maxdepth 3 -type d -perm -777
/tmp
,, /var/tmp
ve /var/lock
varsayılan olarak dünya çapında yazılabilir. Daha eski uygulamalarla uyumluluk için sağlanan /usr/tmp
→ gibi semboller olabilir /var/tmp
.
/tmp
ve /var/tmp
dünya tarafından yazılabilir çünkü bunlar herhangi bir kullanıcı tarafından herhangi bir geçici depolama için kullanılmalıdır. /var/lock
herhangi bir kullanıcı olarak çalışan herhangi bir işlemin merkezi bir konumda kilit dosyaları oluşturabilmesi için dünya çapında yazılabilir.
Güvenlik riski var mı? Hayır, ama evet.
Bu dizinlerin tüm izinleri olan 1777
öncü ile, 1
varlık yapışkan bit . Bu, herkes bu yazılabilir dizinlerde bir dosya oluşturabilirken, yalnızca sahibi kendi dosyalarını silebilir (ve elbette kök kullanıcı da).
Olası güvenlik riski, güvenli olmayan geçici dosya oluşturma işleminden kaynaklanabilir. Bu dizinler herkes için ücretsiz olduğundan, kullanıcıların oluşturdukları dosyaların kötü niyetli bir kullanıcı tarafından eklenmiş olabilecek mevcut bir dosyayı veya işaret bağlantısını açmak yerine gerçekte yeni dosyalar olmasını sağlamak için önlem almaları gerekir. Dosyalar open(…, O_EXCL)
veya gibi uygun teknikler kullanılarak oluşturulursa, bu mkstemp(3)
tür risklerden kaçınılır.
/tmp
Risklidir, çünkü güvenle kullanmak için ekstra kod eklemeniz gerekir. Açıkçası bu göz ardı edilir.
Yeni bir örnek Steve Kemp tarafından verilmiştir. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html
./mgmt/tools/SysAPI.cc: tmp = fopen("/tmp/shadow", "w"); ./mgmt/tools/SysAPI.cc: system("/bin/mv -f /tmp/shadow /etc/shadow");
Siz (saldırgan) ikinci satırdan önce / tmp / shadow değiştirirseniz, herkesin parolasını değiştirirsiniz. (Sanırım saldırı, ilk satırdan önce dosyayı oluşturmanızı ve dosyayı dünya çapında yazılabilir hale getirmenizi gerektirir).
Linux üzerindeki Systemd, birçok sistem hizmeti için / tmp'yi yalıtarak bu tür güvenlik açıklarının azaltılmasına olanak tanır. ("IPC soketleri ve diğer iletişim ilkellerinin konumu olarak yanlış / tmp kullanan" olanlar hariç).
Fedora Linux'ta - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp
Sistem açıklaması - http://0pointer.de/blog/projects/security.html
fopen
üzerine yazar ancak izinleri sıfırlamaz, böylece kötü niyetli kullanıcı yine de değişiklik yapabilir. Ayrıca, kötü niyetli bir kullanıcı ln -s /bin/bash /tmp/shadow
ilk satırdan önce olduğu gibi bir şey yapmış olabilir , böylece önemli bir sistem ikili dosyasının üzerine yazılır.
Yazılabilir dünya dizinlerini bulmak için şunu kullanabilirsiniz:
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Dosyalar için türü olarak değiştirin f
Şunlar için şunu yazın: l
Yapışkan biti ayarlamak için:
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
/var/lock
/run/lock