আপনি ভুল প্রোগ্রাম চালাতে পারেন। কেউ আপনাকে তাদের প্রোগ্রামটি চালাতে পারে।
-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
এটি এলিস হিসাবে চালায়।