Відповіді:
Щоб виконати сценарій, вам потрібно ввести повний шлях до сценарію, якщо сценарій не присутній в одному з каталогів, перелічених у вашій $PATHзмінній середовища. Як правило (і за замовчуванням) .(поточний каталог) немає у вашому $PATH, тому вам потрібно ввести його ./scriptдля виконання.
Тому що поточний каталог не на вашому шляху. Це функція безпеки. Якби це було на вашому шляху, хтось може потенційно скинути зловмисну копію загальної команди, і коли ви знаходитесь в цьому каталозі замість запуску справжнього судо, ви б запустили підробку. Це було б погано.
.були після /usr/bin/, це не витіснило б реальне sudo. Це для того, щоб ви не випадково додавали програми на свій шлях, але справа не в першу чергу про витіснення існуючих.
sudoя б використав lsі rm. Набагато більше шансів називатися.
lsне запитає ваш пароль, і якщо користувач може використовувати sudoпароль цікаво ...;)
slякий робить погані речі, потім викликає ls, а потім видаляє себе. Ви не можете перекрити системні інструменти, але ви можете "помилитися"
cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". Не потрібно знати пароль.
echo $PATH
Ви повинні мати поточний каталог (одну крапку) на своєму шляху, щоб це працювало.
Ви можете додати його у свій шлях, якщо хочете, скориставшись наступними командами.
ш / баш:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
runnable file => executable file:?