Yanlış programı çalıştırabilirsiniz. Birisi kendi programını çalıştırmanızı sağlayabilir.
-execdir
Eylem dosya (lar) bulundu içeren dizinden komutu çalıştırır. Ne zaman $PATH
göreli gibi yolları içeren .
veya başlamaz şey/
, -execdir
bir 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 PATH
ortam değişkeni mutlak yoludur, bu hata dizin arama ve olsanız bile, ortaya çıkmaz -execdir
dan 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 $PATH
ama 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, $PATH
hangi dizinde olursa olsun programları çalıştırmak istiyor .cd
./
- Alice'in çılgınlığı Havva
/home/eve/shared
Alice ile paylaştı .
- Alice,
.c
Havva'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 find
birlikte 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!-execdir
wc
wc
wc
(Kurnaz olan Eve, wc
senaryosunu 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.
find
göreli bir dizin içerdiğinde -execdir
iş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 foo
içinde --appears $PATH
ve çalıştırmak find
ile -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 find
kullanmanıza izin vermez -execdir
.
Ancak, göreceli yollara, özellikle .
de sizin $PATH
iç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 find
Alice basitçe cd
için s ~eve/shared/blah
ve çalışır wc *.c
. Eğer blah
Eve içeren wc
senaryoyu, do_evil
Alice olarak çalışır.