Yanıtlar:
Bir komut dosyasını yürütmek için, komut dosyası ortam değişkeninizde listelenen dizinlerden birinde yoksa , komut dosyasının tam yolunu yazmanız gerekir $PATH
. Genellikle (ve varsayılan olarak) .
(geçerli dizin) sizin içinizde olmadığından$PATH
, ./script
yürütmek için yazmanız gerekir.
Çünkü geçerli dizin yolunuzda değil. Bu bir güvenlik özelliğidir. Yolunuzdaysa, birisi ortak bir komutun kötü amaçlı bir kopyasını bırakabilir ve örneğin gerçek sudo'yu çalıştırmak yerine bu dizinde olduğunuzda, sahte olanı çalıştırırsınız. Bu kötü bir şey olurdu.
.
sonra olduğu sürece /usr/bin/
, gerçek olanın yerini alamazdı sudo
. Yanlışlıkla yolunuza program eklemediğinizden emin olmaktır, ancak esas olarak mevcut olanların yerine geçmemekle ilgili değildir.
sudo
, ben kullanırım ls
ve rm
. Daha çok çağrılabilir.
ls
şifrenizi sormayacak ve kullanıcı sudo
şifreyi kullanabilirse ilginç ...;)
sl
ki kötü şeyler yapan bir senaryo koyuyorum , sonra çağırıyor ls
, sonra kendini siliyor . Sistem araçlarını geçersiz kılamazsınız, ancak 'yazım hatası' yapabilirsiniz
cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"
. Parolayı bilmenize gerek yok.
echo $PATH
Bunun çalışması için geçerli dizinin (tek bir nokta) yolunuzda olması gerekir.
Aşağıdaki komutlarla isterseniz yolunuza ekleyebilirsiniz.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
runnable file => executable file
?