Yanlış programı çalıştırabilirsiniz. Birisi kendi programını çalıştırmanızı sağlayabilir.
-execdirEylem dosya (lar) bulundu içeren dizinden komutu çalıştırır. Ne zaman $PATHgöreli gibi yolları içeren .veya başlamaz şey/ , -execdirbir dosya bulunduğunda bir dizin de çalıştığınız aynı adı taşıyan bir yürütülebilir içerebilecek (veya başka bir dizin kendisine göre çözümlenir) nedeniyle güvensiz koşmak. Bu potansiyel olarak güvenilir olmayan yürütülebilir dosya daha sonra çalıştırılır.
Bu, başka bir kullanıcı tarafından çalıştırmaya çalıştığınız program yerine zarar vermenize veya veri güvenliğini ihlal etmenize neden olabilecek programlarını çalıştırmanıza neden olmak için kasten kullanılabilir. Ya da, daha az sıklıkla, sorun meydana getirmeye çalışan biri olmasa bile, yanlış programın yanlışlıkla çalıştırılmasına neden olabilir.
Senin her şeyin Eğer PATHortam değişkeni mutlak yoludur, bu hata dizin arama ve olsanız bile, ortaya çıkmaz -execdirdan ing olduğu içerdiği PATH. (Bunun işe yarayıp yaramadığını kontrol ettim.) Eğer göreli dizinlerinizin olmadığını düşünüyorsanız $PATHama hala bu hatayı alıyorsanız, lütfen sorunuzu çıktısını içeren ayrıntılarla güncelleyin echo "$PATH".
Somut bir örnek.
Neyin yanlış gidebileceğine bir örnek olarak varsayalım:
- Alice
.onun içindedir, çünkü isimlerinin başına geçmek için uğraşmaksızın, $PATHhangi dizinde olursa olsun programları çalıştırmak istiyor .cd./
- Alice'in çılgınlığı Havva
/home/eve/sharedAlice ile paylaştı .
- Alice,
.cHavva'nın onunla paylaştığı dosyalarda istatistik (satır, kelime, bayt) istiyor .
Alice koşar:
find ~eve/shared -name \*.c -execdir wc {} \;
Ne yazık ki Alice için Havva kendi senaryosunu oluşturdu, adını verdi wc, yürütülebilir ( chmod +x) ayarladı ve gizlice altındaki dizinlerden birine yerleştirdi /home/eve/shared. Havva'nın senaryosu şöyle:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Alice, Havva'nın paylaştığı dosyaları çalıştırmak için findbirlikte kullandığında ve Havva'nın özel senaryosuyla aynı dizindeki dosyalara ulaştığında , Havva'nın Alice'in tüm ayrıcalıklarıyla çalışır!-execdirwcwcwc
(Kurnaz olan Eve, wcsenaryosunu sistem için bir sarıcı olarak yaptı wc, bu yüzden Alice bir şeyin yanlış gittiğini bile bilmiyor, yani do_evilçalıştırıldı. )
Bunu nasıl findönler.
findgöreli bir dizin içerdiğinde -execdirişlem yapmayı reddederek bu güvenlik sorununun oluşmasını önler$PATH .
find özel duruma bağlı olarak iki tanılama mesajı sunar.
İçindeyse ., $PATH(gördüğünüz gibi) diyor ki:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Muhtemelen .dava için özel bir mesajı vardır , çünkü özellikle yaygındır.
Dışında bir göreli yol ise ., --say fooiçinde --appears $PATHve çalıştırmak findile -execdir, diyor:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Hiç göreceli yollara sahip olmamak daha iyidir $PATH.
Dizini otomatik olarak değiştiren bir yardımcı program kullanıldığında, .veya diğer göreli yollara sahip olma riski $PATHözellikle artar, bu nedenle bu durumda findkullanmanıza izin vermez -execdir.
Ancak, göreceli yollara, özellikle .de sizin $PATHiçinizde doğası gereği risklidir ve yine de en iyi şekilde önlenir. Yukarıdaki örnekte yer alan kurgusal durumu ele alalım. Yerine çalışan varsayalım findAlice basitçe cdiçin s ~eve/shared/blahve çalışır wc *.c. Eğer blahEve içeren wcsenaryoyu, do_evilAlice olarak çalışır.