Varsayılan olarak dünya yazılabilir dizinleri nelerdir?


14

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:


16

Sadece FHS zorunlu yaygın dünya çapında yazma olan dizinleri vardır /tmpve /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/mailveya /var/spool/mailbazen 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 /tmpdizinlere. 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

8

/tmp,, /var/tmpve /var/lockvarsayılan olarak dünya çapında yazılabilir. Daha eski uygulamalarla uyumluluk için sağlanan /usr/tmp→ gibi semboller olabilir /var/tmp.

/tmpve /var/tmpdü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/lockherhangi 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, 1varlı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.


1
Modern sistemlerde, bu uyumluluk /var/lock/run/lock
sembollerinden

2

/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


"Sanırım saldırı ilk satırdan önce dosyayı oluşturmak gerektirir" - Gerçekten. Dosya zaten yoksa, ilk satır dosyayı çalışan kullanıcı (muhtemelen kök) olarak oluşturur ve farklı bir kötü amaçlı kullanıcının ikinci satırdan önce dosyayı değiştirme izinleri olmaz. Dosya zaten varsa, 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/shadowilk satırdan önce olduğu gibi bir şey yapmış olabilir , böylece önemli bir sistem ikili dosyasının üzerine yazılır.
HVD

2

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
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.