আপনি ভুল প্রোগ্রাম চালাতে পারেন। কেউ আপনাকে তাদের প্রোগ্রামটি চালাতে পারে।
-execdirকর্ম যে ডিরেক্টরিকে ফাইল (গুলি) পাওয়া রয়েছে থেকে আপনার কমান্ড রান। যখন $PATHআপেক্ষিক পাথ থাকে, যেমন .বা যেটি দিয়ে শুরু হয় না/ , তখন -execdirএটি অনিরাপদ কারণ কোনও ফাইল যেখানে পাওয়া যায় সেই ডিরেক্টরিতে (বা অন্য কোনও ডিরেক্টরি এটির সাথে সম্পর্কিত সমাধান করা হয়েছে) তেও আপনি চেষ্টা করছেন একই নামটির একটি এক্সিকিউটেবল থাকতে পারে চালানোর জন্য. সম্ভাব্য অবিশ্বস্ত এক্সিকিউটেবল এর পরিবর্তে চালানো হবে।
এটি অন্য ব্যবহারকারীর দ্বারা আপনি তাদের প্রোগ্রাম চালানোর জন্য ইচ্ছাকৃতভাবে কাজে লাগাতে পারেন, যা আপনি চালানোর চেষ্টা করছেন এমন প্রোগ্রামের পরিবর্তে ডেটা সুরক্ষা ক্ষতি বা লঙ্ঘন করতে পারে। বা, প্রায়শই, এর ফলে সমস্যা সমাধানের চেষ্টা না করেও অনিচ্ছাকৃতভাবে ভুল প্রোগ্রামটি চালিত হতে পারে।
আপনার সবকিছু যদি PATHএনভায়রনমেন্ট ভেরিয়েবল একটি সুনির্দিষ্ট পাথ, এই ত্রুটিটি ঘটতে করা উচিত নয়, এমনকি যদি ডিরেক্টরি আপনাকে অনুসন্ধান করছেন এবং -execdirথেকে ing হয় অন্তর্ভুক্ত PATH। (আমি এটি খতিয়ে দেখেছি যে এটি কাজ করে।) যদি আপনি বিশ্বাস করেন যে আপনার কোনও আপেক্ষিক ডিরেক্টরি নেই $PATHতবে এখনও এই ত্রুটিটি পাচ্ছেন, দয়া করে আপনার প্রশ্নটি আউটপুট সহ বিশদ সহ আপডেট করুন echo "$PATH"।
একটি দৃ concrete় উদাহরণ।
কী ভুল হতে পারে তার উদাহরণ হিসাবে ধরুন:
- এলিস হয়েছে
.তার মধ্যে $PATHকারণ তিনি যাই হোক না কেন ডিরেক্টরির সে এর প্রোগ্রাম চালানোর সক্ষম হতে চায় cdসঙ্গে তাদের নাম পূর্বে লিখুন করতে বিরক্ত ছাড়াই 'থেকে ঘ ./।
- অ্যালিসের ফ্রিনিমি ইভ
/home/eve/sharedএলিসের সাথে ভাগ করে নিয়েছে ।
- ইভটি
.cতার সাথে ভাগ করা ফাইলগুলিতে অ্যালিসের পরিসংখ্যান (লাইন, শব্দ, বাইট) চায় ।
সুতরাং অ্যালিস রান করে:
find ~eve/shared -name \*.c -execdir wc {} \;
দুর্ভাগ্যক্রমে অ্যালিসের জন্য, ইভ তার নিজস্ব স্ক্রিপ্ট তৈরি করেছে, নাম দিয়েছে wc, নির্বাহযোগ্য ( chmod +x) সেট করেছে এবং এর অধীনে যে কোনও ডিরেক্টরিতে স্পষ্টতই এটি স্থাপন করেছে /home/eve/shared। ইভটির স্ক্রিপ্টটি দেখতে এমন দেখাচ্ছে:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
সুতরাং যখন এলিস ব্যবহারসমূহ findসঙ্গে -execdirচালানোর জন্য wcফাইল হবা ভাগ করেছেন, এবং এটা ইভ কাস্টম হিসাবে একই ডিরেক্টরির মধ্যে ফাইলগুলিতে পায় wcস্ক্রিপ্ট, ইভ এর wcরান - অ্যালিসের বিশেষাধিকার সব!
(কৌতুকপূর্ণ হওয়ার কারণে, ইভটি তার wcস্ক্রিপ্টটিকে সিস্টেমের জন্য একটি র্যাপার হিসাবে কাজ করেছে wc, তাই অ্যালিসও জানবে না যে কিছু ভুল হয়েছে, অর্থাৎ do_evilএটি চালানো হয়েছিল However তবে, সহজ - এবং আরও পরিশীলিত - বৈচিত্রগুলি সম্ভব)। )
কীভাবে এটি findপ্রতিরোধ করে।
findআপেক্ষিক ডিরেক্টরি থাকা অবস্থায় -execdirপদক্ষেপ নিতে অস্বীকার করে এই সুরক্ষা সমস্যাটি ঘটতে বাধা দেয়$PATH ।
find নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে দুটি ডায়গনিস্টিক বার্তা সরবরাহ করে।
যদি .এটি থাকে $PATHতবে তা (যেমন আপনি দেখেছেন) এটি বলে:
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)
.বিশেষত এটি সাধারণ হিসাবে এটির ক্ষেত্রে সম্ভবত এটির জন্য একটি বিশেষ বার্তা রয়েছে ।
একটি আপেক্ষিক ছাড়া অন্য পথ যদি ., --say fooমধ্যে --appears $PATHএবং আপনি চালাতে findসঙ্গে -execdir, এটা বলেন:
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
একেবারে আপেক্ষিক পথ না রাখাই $PATHভাল।
ঝুঁকি .বা অন্যান্য আত্মীয় পাথ $PATHযখন একটি ইউটিলিটি যা স্বয়ংক্রিয়ভাবে ডিরেক্টরি পরিবর্তন, যা কেন ব্যবহার বিশেষত অতিরিক্ত হয় findআপনি ব্যবহার দেওয়া হবে না -execdirএই অবস্থায়।
তবে আপেক্ষিক পাথগুলি বিশেষতঃ .আপনার $PATHমধ্যে অন্তর্নিহিত ঝুঁকিপূর্ণ এবং যাইহোক সত্যই সেরা এড়ানো যায়। উপরের উদাহরণে কাল্পনিক পরিস্থিতি বিবেচনা করুন। মনে করুন দৌড়ানোর পরিবর্তে findঅ্যালিস সহজেই cdছুটে যায় ~eve/shared/blahএবং চালায় wc *.c। যদি blahইভটির wcস্ক্রিপ্ট থাকে তবে do_evilএটি এলিস হিসাবে চালায়।