এখানে একটি বড় ভুল ধারণা রয়েছে। আসুন এই বিষয়গুলি পরিষ্কার করা যাক।
প্রথমত, আপনি যে সীমাবদ্ধতাটি উল্লেখ করেছেন, যেমনটি বলা হয়েছে, সত্য নয় :
যাইহোক, যখন কোনও স্ক্রিপ্ট (একটি টেক্সট ফাইল যা সে-ব্যাং লাইন দিয়ে শুরু হয়; অর্থাত্ একটি লাইন যা দিয়ে শুরু হয় #!
) কিছু শেল (বাশ) দেওয়া হয়, এটি সেই লাইনের (যেমন, /usr/bin/perl
) নামযুক্ত এক্সিকিউটেবল চালাবে এবং সংযোগটি সংযুক্ত করবে স্ক্রিপ্ট ফাইলটির স্ট্যান্ডিনের কাছে নির্বাহযোগ্য, যা সেই ড্রাইভে নাও থাকতে পারে content
আশ্চর্যজনকভাবে এটি কার্যকর করার সক্ষমতাnoexec
ব্যাখ্যা করে মনে হচ্ছে , সত্ত্বেও । আমি মনে করি সেখানকার প্রশ্নকর্তা এটি প্রথমে সমস্ত ভুল পেয়েছিলেন এবং এটি তার বা তার দোষ ছিল না! প্রশ্নের একটি ভুল অনুমিতি উত্তরে অন্য একটি ভুল অনুমানের কারণ ঘটেছে।
তাহলে কী হয়েছে?
1. বাইন্ড মাউন্ট নির্দিষ্ট
কিছু প্রসঙ্গ পাওয়ার জন্য আসুন দেখুন যখন আপনি কেবল পঠনযোগ্য হিসাবে মাউন্ট বাঁধতে চেষ্টা করেন তখন কী ঘটে। এই প্রশ্নটি আছে: কেন বাইন্ড মাউন্টগুলির জন্য পঠনযোগ্য বিকল্পটির প্রতি শ্রদ্ধা জানায় না? উপসংহারটি হ'ল:
কাঙ্ক্ষিত ফলাফল অর্জন করতে একজনকে দুটি কমান্ড চালাতে হবে:
mount SRC DST -o bind
mount DST -o remount,ro,bind
মাউন্ট (ইউজন-লিনাক্স> = 2.27) এর নতুন সংস্করণগুলি যখন রান হয়ে যায় তখন স্বয়ংক্রিয়ভাবে এটি করে
mount SRC DST -o bind,ro
আপনি যখন noexec
পরিবর্তে ব্যবহার করার চেষ্টা করবেন তখন আপনার ro
দুটি কমান্ডের প্রয়োজন! আমার কুবুন্টুতে আমার util-linux 2.27.1-6ubuntu3.3
এবং এই আদেশটি রয়েছে:
mount SRC DST -o bind,noexec
উপেক্ষা করুন noexec
, আমার পুনঃআমার পরিমাণ প্রয়োজন। মাউন্টিংয়ের মাধ্যমে থাকলে এটি একই /etc/fstab
। আপনি পরীক্ষা করতে পারেন। যে কোনও সময় mount
আসল বিকল্পগুলি কী তা প্লেইন কমান্ড দিয়ে পরীক্ষা করুন।
আমি বাজি ধরে জিজ্ঞাসাকারী ভেবেছিলাম মাউন্টটি noexec
বিকল্পের সাথে রয়েছে, তবে আসলে তা ছিল না। তিনি বা তিনি noexec
মাউন্টপয়েন্টের মধ্যে থেকে কোনও স্ক্রিপ্ট কার্যকর করতে সক্ষম হন । এটা আজব ছিল, তাই প্রশ্ন।
তারপরে উত্তর লেখক এটিকে ব্যাখ্যা করলেন, যেন এটি শেল যা শেবাং পড়ে, তাকে অন্য কোনও এক্সিকিউটেবল বলে ডাকে এবং noexec
স্ক্রিপ্টটির জন্য চিন্তা করে না । যদি মাউন্টপয়েন্টটি সত্যই ছিল noexec
তবে এটি একটি যুক্তিসঙ্গত জল্পনা ছিল।
কিন্তু ...
২. এটি একটি প্রচলিত পৌরাণিক কাহিনী যা শেলগুলি শেবাংগুলি পড়ে; কার্নেল করে
পড়ুন কিভাবে #! শেবাংয়ের কাজ? এবং সেখানে উত্তরগুলির মধ্যে একটি উত্তর দেখুন যা মূলত পৌরাণিক কাহিনীটি অনুসরণ করেছিল, তারপর এটি সংশোধন করা হয়েছিল।
সুতরাং আপনার যদি:
- বিকল্প
/mnt/foo/
সহ একটি মাউন্টপয়েন্ট noexec
,
- একটি স্ক্রিপ্ট
/mnt/foo/script.py
যা অন্যথায় সম্পাদনযোগ্য (যেমন: অনুরোধ করা chmod -x …
হয়েছিল),
#!/usr/bin/python
স্ক্রিপ্টের প্রথম লাইনের মতো একটি শেবাং
এবং আপনি এটি এভাবে চালান
/mnt/foo/script.py
তারপর আপনার লিনাক্স কার্নেল তোমার কারনে দেওয়া হবে না noexec
। এটি অন্যান্য প্রশ্নে ঘটত যদি মাউন্টটি আসলে noexec
সেখানে ছিল ; তবে আমি বিশ্বাস করি এটি ছিল না।
৩. তবুও, স্ক্রিপ্টটি "চালনা" করার দুটি উপায় রয়েছে
মন্তব্য থেকে:
"এবং এটি কার্যকর করার চেষ্টা করবে" কীভাবে? এটিকে সরাসরি চালিয়ে বা দোভাষীকে দিয়ে?
এটি সরাসরি চালানোর অর্থ:
/mnt/foo/script.py
এটি noexec
উপরে বর্ণিত হিসাবে সম্মান করবে । এক্সিকিউটেবল হয় script.py
।
দোভাষীর কাছে এটি পাঠানোর অর্থ:
python /mnt/foo/script.py
এই ক্ষেত্রে এক্সিকিউটেবল হয় python
। foo/
মাউন্ট করা হয়েছে কিনা তা বিবেচ্য নয় noexec
; এটি script.py
আদৌ কার্যকরযোগ্য কিনা তা বিবেচ্য নয়; শেবাং কী তা বিবেচ্য নয়। পয়েন্টটি script.py
কার্যকর করা হয়নি, এটি পড়েছে ।
ব্যবহারকারী যতক্ষণ কোনও ফাইল পড়তে এবং সঠিক দোভাষীটি চালাতে পারে, ততক্ষণ দুলীর কাছে ফাইলটি রোধ করার কোনও উপায় নেই; তবে এটি চালিত ফাইল নয়।