এক কথায়, "না"।
লিনাক্স আসলে এক্সিকিউটেবল এবং স্ক্রিপ্টগুলির মধ্যে পার্থক্য করে না; #!
শুরুতে একটি উপায় কার্নেল কি প্রোগ্রাম ইনপুট নির্ণয় করা চালানোর জন্য বলতে কিন্তু এটা একমাত্র উপায় একটি স্ক্রিপ্ট সম্পাদন করতে পারে না।
সুতরাং, উদাহরণস্বরূপ, যদি আমার কাছে স্ক্রিপ্ট থাকে
$ cat x
#!/bin/sh
echo hello
তাহলে আমি কমান্ড দিয়ে এটি চালাতে পারি
$ ./x
এটি কার্নেলটিকে এটি ব্যবহার করে #!
চালিত করতে এবং তার /bin/sh x
পরিবর্তে কার্যকরভাবে চালিত করবে ।
তবে আমি এই বৈকল্পিকগুলির মধ্যেও চালাতে পারি :
$ sh ./x
$ bash ./x
$ cat x | sh
$ cat x | bash
$ sh < x
অথবা এমনকি
. ./x
এমনকি যদি কার্নেল exec
স্তরটিতে সাইন ইন করতে প্রয়োগ করার চেষ্টা করেও আমরা কেবলমাত্র পরামিতি হিসাবে স্ক্রিপ্টের সাহায্যে দোভাষী চালিয়ে এটি এড়াতে পারি।
এর অর্থ হ'ল স্বাক্ষরকারী কোডটি দোভাষীর মধ্যেই থাকতে হবে। এবং কোন ব্যবহারকারী স্বাক্ষরকারী প্রয়োগকারী কোড ছাড়া শেলটির নিজস্ব অনুলিপি তৈরি করতে বাধা দেবে ?
এর স্ট্যান্ডার্ড সমাধানটি সাইন ব্যবহার করা নয়, তবে বাধ্যতামূলক অ্যাক্সেস কন্ট্রোলগুলি (ম্যাক) ব্যবহার করার জন্য SELinux
। ম্যাক সিস্টেমের সাহায্যে প্রতিটি ব্যবহারকারীকে স্তর সঞ্চালন ও সংক্রমণের জন্য ঠিক কী অনুমোদিত তা আপনি নির্দিষ্ট করতে পারবেন। সুতরাং, উদাহরণস্বরূপ, আপনি বলতে পারেন যে "সাধারণ ব্যবহারকারীরা যে কোনও কিছু চালাতে পারে তবে ওয়েব সার্ভার এবং সিজিআই প্রক্রিয়াগুলি কেবল /var/httpd
ডিরেক্টরি থেকে স্টাফ অ্যাক্সেস করতে পারে ; বাকি সমস্ত কিছুই প্রত্যাখ্যান করা হয়"।