উত্তর:
আসুন ধরে নেওয়া যাক আপনার কাছে myscript
নিম্নলিখিত ফাইল রয়েছে:
#!/bin/bash
echo "Hello, World!"
আপনি যদি এই ফাইলটিকে এক্সিকিউটেবল বানান এবং এটি দিয়ে চালনা করেন ./myscript
তবে কার্নেলটি দেখতে পাবে যে প্রথম দুটি বাইট রয়েছে #!
, যার অর্থ এটি একটি স্ক্রিপ্ট-ফাইল। এর পরে কার্নেল বাকী রেখাটি দোভাষী হিসাবে ব্যবহার করবে এবং ফাইলটিকে তার প্রথম আর্গুমেন্ট হিসাবে পাস করবে। সুতরাং, এটি চলে:
/bin/bash myscript
এবং বাশ ফাইলটি পড়ে এবং এতে থাকা কমান্ডগুলি কার্যকর করে।
সুতরাং, স্ক্রিপ্টটি "চালনা" করার জন্য বাশ (বা আপনার স্ক্রিপ্টের যে কোনও অনুবাদক প্রয়োজন) এর জন্য কেবল ফাইলটি পড়তে পারা দরকার।
সুতরাং, স্ক্রিপ্টগুলির জন্য, এক্সিকিউট বিট এটি সম্পাদন করতে কিছুটা সুবিধাজনক করে তোলে। যতক্ষণ বাশ কার্যকর করা যায় ততক্ষণ আপনি স্ক্রিপ্ট ফাইলের সাথে বাশকে সর্বদা আর্গুমেন্ট হিসাবে চালাতে পারেন, বা ব্যাশটিকে ইন্টারেক্টিভভাবে চালাতে পারেন এবং কমান্ডগুলি কার্যকর করতে আপনার টার্মিনালে লাইন স্ক্রিপ্ট লাইনটি অনুলিপি করতে পারেন।
আপনি "শ ব্যবহার করে শেল স্ক্রিপ্ট চালাচ্ছেন" "sh ব্যবহার করে শেল স্ক্রিপ্ট চালাচ্ছেন না" তা নিশ্চিত করুন।
এতে ফাইল অনুমতি দ্বারা এটি প্রভাবিত হবে না file.sh
:
sh file.sh
আপনি কার্যকর করছেন sh
(যা প্রোগ্রামটির সমাধান করে /bin/sh
), যা file.sh
এর কোডটি পড়ে এবং কার্যকর করে।
আপনি যদি সত্যই স্ক্রিপ্টটি নিজে চালিত করেন তবে ফাইল অনুমতিগুলি কার্যকর হবে :
./file.sh
নোট করুন যে ফাইল অনুমতিগুলি নন-লিনাক্স ফাইল সিস্টেমগুলি যেমন FAT দ্বারা সমর্থিত নয়। সুতরাং আপনি চালনা chmod -x file.sh
করলেও ফাইলটির এটির পূর্বের অনুমতি থাকবে।
এক্সিকিউট করার অনুমতি ফাইল সিস্টেম দ্বারা প্রয়োগ করা হয়। তবে প্রোগ্রামগুলি ফাইলের বিষয়বস্তু পড়ে কোডটি "কার্যকর" করতে পারে, যা "এক্সিকিউট" -এ ফাইল সিস্টেমের অনুমতিকে বাইপাস করে।
bash
) কল করে এটি কার্যকর করতে পারে - যাতে আপনাকে তাদের read
অনুমতিও নিতে হবে away
If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
কিন্তু কার্যকর কার্যকর অনুমতি যাচাই করে বিভিন্ন ব্যবহারকারীকে কীভাবে অনুমতি দেওয়া হয়? এবং আমি আপনার দ্বিতীয় পয়েন্ট পেয়েছি। আপনার অর্থ হ'ল স্ক্রিপ্টের তাদের পড়ার অনুমতি কেড়ে নেওয়া যাতে তারা এমনকি এটি ব্যাশের মাধ্যমে প্রক্রিয়া করতে না পারে। রাইট?
sudo chmod g+x myfile.sh
ফাইলের গ্রুপের জন্য এক্সিকিউট এক্সিকিউটিস যুক্ত করতে টার্মিনালের মতো কিছু কল করবেন । দেখুন ফাইলের অনুমতি টিউটোরিয়াল । একসাথে বেশ কয়েকটি ব্যবহারকারীর জন্য অনুমতি পরিচালনা করতে আপনি গোষ্ঠী ব্যবহার করবেন, উদাহরণস্বরূপ গোষ্ঠী পরিচালনা করা ।
এটিকে এভাবে ভাববেন না। আমি কি এই ফাইলটি কার্যকর করতে পারি? এটিকে এভাবে ভাবুন: এই ফাইলটি কে কার্যকর করতে পারে?
কম্পিউটার যদি আপনার হয় এবং ফাইলটি আপনার হয় তবে আমি নিশ্চিত যে আপনি এটি কার্যকর করতে পারেন। আপনি chmod এবং chown এবং ফাইল অনুমতিগুলির মতো কমান্ডগুলি আরও দেখতে চাইতে পারেন ।
আমি আশা করি এটি সাহায্য করবে.
exec
লিনাক্স কার্নেলের প্রাপ্ত syscall সঙ্গে ব্যর্থ EACCES
ফাইলটি এক্সিকিউটেবল নয়
আপনি যখন এটি করতে পারেন sh myprog.sh
(যা কেবলমাত্র ফাইলগুলি বোঝায় এবং ব্যাখ্যায় তা হ'ল), প্রোগ্রামটি ./myprog.sh
কাজ করতে পারে না বলে চালানোর চেষ্টা করছেন , যেহেতু আপনি এটি করেন:
exec
সিস্টেম কল অন ব্যবহার করে./myprog.sh
exec
: যেমন এ ব্যাখ্যা লিনাক্স কার্নেল সিস্টেম কল /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on যে সময়টাতে প্রথম লাইন অফ এ-pyt / 40938801 # 40938801এটি দিয়ে যাচাই করা যেতে পারে main.c
:
#define _XOPEN_SOURCE 700
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
char *argv[] = {"myprog", NULL};
char *envp[] = {NULL};
int ret;
ret = execve("myprog.sh", argv, envp);
perror("execve");
printf("%d\n", errno);
printf("%d\n", EACCES);
}
এবং myprog.sh
:
#!/bin/sh
echo worked
যদি myprog.sh
মৃত্যুদন্ড কার্যকর না হয় তবে এতে main
ব্যর্থ হন:
execve: Permission denied
13
13
উবুন্টু 17.10, এ পরীক্ষিত gcc -std=c99
।
পজিক্স 7 উল্লেখ করেছে যে:
Fexecve () বাদে এক্সিকিউটিভ ফাংশনগুলি ব্যর্থ হবে যদি:
[EACCES] নতুন প্রক্রিয়া চিত্রের ফাইলের উপসর্গের তালিকাভুক্ত ডিরেক্টরিটির জন্য অনুসন্ধানের অনুমতি অস্বীকার করা হয়েছে, বা নতুন প্রক্রিয়া চিত্র ফাইলটি কার্যকর করার অনুমতি অস্বীকার করে।
আরও যুক্তি এখানে পাওয়া যাবে: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the