Eklemek güvenli mi. PATH’E Nasıl olur?


49

İnsanların diğer yanıtlarda , geçerli çalışma dizinini (' .') $PATHortam değişkeninize eklemenin kötü bir fikir olduğunu söylediklerini gördüm , ancak sorunu özellikle ele alan bir soru bulamadım.

Peki neden .yoluma eklememeliyim ? Tüm uyarılara rağmen yine de yaparsam, neye dikkat etmeliyim? Sona eklemek, baştan daha güvenli midir?


Yanıtlar:


39

Makinedeki tek kullanıcı sizseniz, ne yaptığınızı bildiğiniz sürece sorun olmaz. Genel endişe, şu anki dizininizi içeri alarak PATH, komutları sabit bir liste olarak görememenizdir. Geçerli dizininizden bir komut dosyası / program çalıştırmanız gerekiyorsa ./, adını hazırlayarak her zaman açıkça çalıştırabilirsiniz (sisteme "Bu dosyayı şu anki dizimden çalıştırmak istiyorum").

Diyelim, şimdi tüm dosya sisteminizde tüm bu küçük komut dosyalarına sahipsiniz; Bir gün, yanlış olanı çalıştıracaksın. Bu nedenle, PATHönceden tanımlanmış bir statik yol listesi olarak sahip olmanız tamamen düzen ve kendini potansiyel bir problemden kurtarmakla ilgilidir.

Eklemek gidiyoruz Ancak .adresinden Müşteri PATH, ben listenin (sonuna kadar ekleme öneririz export PATH=$PATH:.). En azından, sistem genelinde ikili dosyaları bu şekilde geçersiz kılmayacaksınız.

Eğer sistemde bir kök konum ve sistem diğer kullanıcıların hesaplarına maruz varsa sahip .de PATHbüyük bir güvenlik riski oluşturuyor: yapabilecekleriniz cdbir şeyi veya komut dosyasını yanlış yazmış çünkü bazı kullanıcının dizine ve istemeden sadece orada kötü niyetli çalıştırmanızı sistem genelinde bir ikili ile aynı ada sahip.


1
+ Temel teoriyi kabul edin ve sistemdeki tek kullanıcı siz olsanız bile sorunların hala var olabileceğinden bahsedin. Her iki cevap da mükemmel puanlar getiriyor. Dizinleri başka bir kullanıcıyla paylaştığınız zaman, kök olsanız da olmasanız da, yüksek riskli olduğunu ekleyeceğim.
Jander

6
makinedeki tek kullanıcı olarak bile: güvenilmeyen bir katranı her çıkardığınızda lsmevcut dizininize yerleştirebilirsiniz. Daha lssonra ayıklanan dosyaları incelemek için çalıştırın ve kötü amaçlı kod zaten çalıştırdınız.
lesmana

35

Risk, birisinin şu anki durumunuzda bulunan dizinde kötü amaçlı bir çalıştırılabilir dosya koymasıdır.

En kötü durum şu durumlarda olur:

  • Kötü niyetli komut sınırsız hasar gücüne sahip olduğundan root olarak giriş yaptınız
  • .PATH'inizin başında standart komutlar siz fark etmeden geçersiz kılınabilir (genellikle lsbunlardan biri listeden gizlenebilir).

Düzenli bir kullanıcı olarak giriş yaptıysanız ve .PATH'inizin sonunda elinizde olursa, risk çok daha düşüktür, ancak hala var:

  • Birisi sizi sık sık yanlış yazıp bir komut yazıp buluyor olabilir.
  • Birisi yüklenmemiş olanın adına sahte bir komut yükleyebilir.

Makinenin tek kullanıcısı olsanız bile, her durumda riskin hala orada olduğunu unutmayın. Örneğin, tehlikeye atılmış bir siteden indirilen bir arşivi çıkarırsanız kötü amaçlı yazılımlar yüklenir.


15
sl3. noktanın ne sıklıkta olduğunu görmek için yükleyin .
Ürdün

veya alias l=`ls`.
Anko

Kötü niyetli olmak zorunda değil. Ben bekliyoruz lslisteleyen bir dizin almak için ama indirmek bazı proje olabilir lsbaşka bir şeye kısayol olarak kendi kök proje klasöründe komut. lsMuhtemelen kötü bir örnektir, ancak kesinlikle edüzenleme, dhata ayıklama, myapmak, binşa etmek için hayal edebiliyorum . Dünyada bunlardan bazılarına sahibim. Eğer myazmayı umarsam, make'in başlatmasını (kısayolum), myürütmek için çağırılan bazı yerel komut dosyalarını değil .
gman

@gman Sağ. Kötü niyetli olmayan bir komutun istemeden de olsa ters etkileri olabilir. Unix uygulamasının başlangıcından bu yana, yüksek yanlış yazma riski nedeniyle tek harf komutlarının / diğer adların kaşlarını çattığını unutmayın. Nadir standart olanlar wve [.
jlliagre

3

Eğer koyarak, her zaman yazdıklarınıza çok dikkatli olsa bile .adresinden Müşteri PATHhatta sonunda, bazı programlar için geçerli dizini değiştirmek için hâlâ güvensiz /tmp(dünya yazılabilir olan) ve aynı zamanda fiilen yüklü olmayan araçları çalıştırmak deneyebilirsiniz, bu yüzden ne olduğunu varsayılan /tmp. Bu olursa, bu bir saldırı vektörüdür.

Kaçınmanın çok dezavantajı olmadığını da Not .içinde PATHçünkü ./kullanarak (bu karakterler ardışık tuşları ve Shift gerekmez QWERTY, gibi klavyelerde özellikle) yazıp kolaydır ./tuş vuruşlarını böylece potansiyel olarak da tamamlanmasını yardımcı olacaktır tasarruf sonunda.

Geçerli dizinden komutları gerçekten yazabilmek istiyorsanız, modern kabukları (onunla birlikte zsh gibi command_not_found_handler) güvenli bir şekilde yapmak için özellikler sağlayabilir, örneğin, işleyiciye istediğiniz tüm güvenlik denetimlerini eklemeden önce komut yürütüldü.

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.