Anda bisa menjalankan program yang salah. Seseorang dapat membuat Anda menjalankan program mereka.
The -execdirtindakan menjalankan perintah Anda dari direktori yang berisi file (s) ditemukan. Ketika $PATHberisi jalur relatif, seperti .atau apa pun yang tidak dimulai/ , -execdirtidak aman karena direktori tempat file ditemukan (atau direktori lain yang diselesaikan relatif terhadapnya) juga bisa berisi executable dengan nama yang sama dengan yang Anda coba untuk berlari. Eksekusi yang berpotensi tidak dipercaya itu kemudian akan dijalankan.
Ini dapat dengan sengaja dieksploitasi oleh pengguna lain untuk menyebabkan Anda menjalankan program mereka, yang dapat menyebabkan kerusakan atau melanggar keamanan data, alih-alih program yang Anda coba jalankan. Atau, yang lebih jarang, itu hanya dapat mengakibatkan program yang salah dijalankan secara tidak sengaja, bahkan tanpa ada yang berusaha membuat masalah terjadi.
Jika segala sesuatu di Anda PATHvariabel lingkungan adalah path absolut, kesalahan ini seharusnya tidak terjadi, bahkan jika direktori yang Anda cari dan -execdiring dari yang terkandung dalam PATH. (Saya telah memeriksa apakah ini berfungsi.) Jika Anda yakin Anda tidak memiliki direktori relatif $PATHtetapi masih mendapatkan kesalahan ini, harap perbarui pertanyaan Anda dengan perincian termasuk output dari echo "$PATH".
Contoh nyata.
Sebagai contoh apa yang bisa salah, anggap:
- Alice memiliki
.di dalam dirinya $PATHkarena dia ingin dapat menjalankan program di direktori apa pun dia cdakan, tanpa repot-repot untuk mengawali nama mereka dengan ./.
- Hawa frenemy Alice telah berbagi
/home/eve/shareddengan Alice.
- Alice ingin statistik (baris, kata, byte) pada
.cfile yang telah dibagikan Eve dengannya.
Jadi Alice menjalankan:
find ~eve/shared -name \*.c -execdir wc {} \;
Sayangnya untuk Alice, Eve telah membuat skripnya sendiri, menamainya wc, mengaturnya executable ( chmod +x), dan menempatkannya secara sembunyi-sembunyi di salah satu direktori di bawah /home/eve/shared. Script Eve terlihat seperti ini:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Jadi ketika Alice menggunakan finddengan -execdiruntuk menjalankan wcpada file yang Hawa telah bagikan, dan itu akan ke file dalam direktori yang sama dengan wcskrip kustom Hawa, Hawa wcberjalan - dengan semua hak istimewa Alice!
(Menjadi licik, Hawa telah membuat wcskripnya bertindak sebagai pembungkus untuk sistem wc, sehingga Alice bahkan tidak akan tahu ada yang tidak beres, yaitu yang do_evildijalankan. Namun, variasi yang lebih sederhana - dan juga lebih canggih - dimungkinkan. )
Bagaimana findmencegahnya?
findmencegah masalah keamanan ini terjadi dengan menolak untuk mengambil -execdirtindakan ketika $PATHberisi direktori relatif.
find menawarkan dua pesan diagnostik tergantung pada situasi spesifik.
Jika .ada di $PATH, maka (seperti yang Anda lihat) dikatakan:
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)
Mungkin memiliki pesan khusus untuk .kasus ini karena sangat umum.
Jika path relatif selain .--say, foo--appears di $PATHdan Anda menjalankan finddengan -execdir, ia mengatakan:
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
Lebih baik tidak memiliki jalur relatif $PATHsama sekali.
Risiko memiliki .atau jalur relatif lain $PATHsecara khusus meningkat ketika menggunakan utilitas yang secara otomatis mengubah direktori, yang mengapa findtidak akan membiarkan Anda menggunakan -execdirdalam situasi ini.
Tetapi memiliki jalur relatif, khususnya ., dalam diri Anda $PATHsecara inheren berisiko dan sebaiknya dihindari. Perhatikan situasi fiksi dalam contoh di atas. Misalkan bukannya berjalan find, Alice hanya cds untuk ~eve/shared/blahdan berjalan wc *.c. Jika blahmengandung wcskrip Eve , do_eviljalankan sebagai Alice.