চালান ./script.sh বনাম স্ক্রিপ্ট.শ - অনুমতি অস্বীকৃত


43

আমি যখন চালানোর চেষ্টা করি তখন ./script.shপেয়েছিলাম Permission deniedতবে যখন আমি চালাই তখন bash script.shসবকিছু ঠিক থাকে।

আমি কি ভুল করছি?


আপনি শেবাং লাইনের সামগ্রী এবং এর আউটপুটও অন্তর্ভুক্ত করতে প্রশ্নটি সম্পাদনা করতে পারেন getfacl script.sh?
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

উত্তর:


49

ভুল পসিক্স অনুমতিগুলি

এর অর্থ আপনার কাছে এক্সিকিউট করার অনুমতি বিট সেট নেই script.sh। চলমান অবস্থায় bash script.sh, আপনার কেবল পড়ার অনুমতি দরকার script.sh। দেখুন "বাশ স্ক্রিপ্ট.শ" এবং "./script.sh" চালানোর মধ্যে পার্থক্য কী? আরও তথ্যের জন্য.

আপনি এটি চালিয়ে যাচাই করতে পারেন ls -l script.sh

আপনার এমনকি নতুন বাশ প্রক্রিয়া শুরু করার দরকারও পড়তে পারে না। অনেক ক্ষেত্রে, আপনি কেবল আপনার বর্তমান ইন্টারেক্টিভ শেলটিতে স্ক্রিপ্ট কমান্ড চালাতে source script.shবা চালাতে পারেন . script.sh। আপনি সম্ভবত একটি নতুন বাশ প্রক্রিয়া শুরু করতে চান যদি স্ক্রিপ্টটি বর্তমান ডিরেক্টরি পরিবর্তন করে বা অন্যথায় বর্তমান প্রক্রিয়ার পরিবেশ পরিবর্তন করে।

অ্যাক্সেস কন্ট্রোল তালিকা

যদি পসিক্স অনুমতি বিটগুলি সঠিকভাবে সেট করা থাকে তবে অ্যাক্সেস কন্ট্রোল লিস্টটি (এসিএল) আপনাকে বা আপনার গ্রুপটিকে ফাইল চালানো থেকে বিরত রাখতে কনফিগার করা হয়েছে। যেমন POSIX অনুমতিগুলি পরীক্ষা শেল স্ক্রিপ্টটি সম্পাদনযোগ্য কিনা তা নির্দেশ করে।

$ ls -l t.sh
-rwxrwxrwx+ 1 root root 22 May 14 15:30 t.sh

যাইহোক, ফাইল ফলাফল কার্যকর করার চেষ্টা এখানে:

$ ./t.sh
bash: ./t.sh: Permission denied

getfaclকমান্ড কারণে দেখায়:

$ getfacl t.sh
# file: t.sh
# owner: root
# group: root
user::rwx
group::r--
group:domain\040users:rw-
mask::rwx
other::rwx

এই ক্ষেত্রে, আমার প্রাথমিক গোষ্ঠীটি domain usersএসিএলকে সীমাবদ্ধ রেখে বাতিল করা অনুমতিগুলি কার্যকর করেছে sudo setfacl -m 'g:domain\040users:rw-' t.sh। এই বিধিনিষেধটি নিম্নলিখিত আদেশগুলির মধ্যে যে কোনও একটি দ্বারা উঠানো যেতে পারে:

sudo setfacl -m 'g:domain\040users:rwx' t.sh
sudo setfacl -b t.sh

দেখা:

ফাইলসিস্টেমটি noexec বিকল্পের সাথে মাউন্ট করা হয়েছে

পরিশেষে, স্ক্রিপ্টটি চালাতে না পারার জন্য এই নির্দিষ্ট ক্ষেত্রে কারণটি হ'ল স্ক্রিপ্টটিতে থাকা ফাইল-সিস্টেমটি noexecবিকল্পটি মাউন্ট করা হয়েছিল । এই বিকল্পটি পজিক্স অনুমতিগুলি ওভাররাইড করে যে ফাইল সিস্টেমের কোনও ফাইল কার্যকর হতে বাধা দেয়।

এটি mountসমস্ত মাউন্ট করা ফাইল সিস্টেমের তালিকা চালিয়ে চেক করা যেতে পারে ; মাউন্ট অপশনগুলি ফাইল সিস্টেমের সাথে সম্পর্কিত এন্ট্রিগুলিতে প্রথম বন্ধনীতে তালিকাভুক্ত করা হয়, যেমন

/dev/sda3 on /tmp type ext3 (rw,noexec)

আপনি স্ক্রিপ্টটিকে অন্য একটি মাউন্ট করা ফাইল সিস্টেমে স্থানান্তর করতে পারেন বা ফাইলসস্টেমটিকে পুনরায় সঞ্চালনের অনুমতি দিতে পারেন:

sudo mount -o remount,exec /dev/sda3 /tmp

দ্রষ্টব্য: আমি /tmpএখানে উদাহরণ হিসাবে ব্যবহার করেছি যেহেতু বিকল্পগুলির সেটটি মাউন্ট করার জন্য সুরক্ষার ভাল কারণ রয়েছে/tmpnoexec,nodev,nosuid


2
আমি chmod 777 সেট করেছি এবং এখনও এই ত্রুটি রয়েছে।
পিয়োটার স্টাপ

2
পার্টিশনে আমার কোন এক্সিকিউট ছিল না।
পাইওটার স্টাপ

সুতরাং আমি কোন অভিশাপ পেয়েছি এবং এটি fstab তালিকাভুক্ত নয়। আমার নন-টিএমপি পার্টিশনগুলিতে কেন এটি করছে?
ডেরিক

1
এটি / etc / fstab এ নেক্সেক বিকল্প ছিল।
ব্যবহারকারী 208145

আমি যুক্ত করতে চাই যে স্ক্রিপ্টযুক্ত ফোল্ডারটি "এক্সিকিউটেবল" কিনা তা পরীক্ষা করাও বুদ্ধিমানের কাজ (যাতে এটিতে এক্স পতাকা রয়েছে বা না)। যদি এটি না হয় তবে স্ক্রিপ্টটি কেবলমাত্র রুট ব্যবহারকারী দ্বারা কার্যকর করা যাবে।
লেটোকটারেন

30

চেষ্টা

chmod 755 script.sh

এটি ফাইলটি কার্যকর করতে সক্ষম করে। তারপরে চেষ্টা করুন,

./script.sh

আশা করি এটি কার্যকর হবে।


2
ইয়েলকমের ইউএন্ডএল-তে আমি কনভেনশন অনুসারে পুনরায় ফর্ম্যাট করি, তবে এটি পূর্বের উত্তরে খুব কমই যুক্ত করে।
আরচেমার

8
কখনও কখনও, সংক্ষিপ্ত উত্তরটি সবচেয়ে ভাল হয় :)
সামিরা কুমারসিংহ

1

আমার উইন 7 এ অ্যাডমিনের সাথে চলমান সিএমডি; আমার কাছে .sh ফাইলগুলি সাইগউইন /৪ / বিন / ব্যাশের সাথে যুক্ত রয়েছে তবে এটি সেন্টিমিডি দ্বারা অবরুদ্ধ করা হয়েছিল। উপরোক্ত পরামর্শগুলির মধ্যে কোনওটিই সহায়তা করেনি (chmod, setfacl, মাউন্ট)।

নীচের সমাধানটি কাজ করেছে, এটি যখনই ফোল্ডার / ফাইল উইন 7-এ অ্যাডমিনের অ্যাক্সেসযোগ্য হয়ে যায়, যা প্রায়শই থাকে) এটি অ্যাডমিন স্লেজ-হাতুড়ি এসি-ফিক্সার:

  Start > run cmd as Admin
  c:\> script.sh
    Access is denied.

  cmd> chmod 0777 script.sh c:\cygwin64\bin\bash.exe
  cmd> script.sh
    Access is denied.

  > assoc .sh
  .sh=bash

  > ftype bash
  bash=C:\cygwin64\bin\bash.exe -- "%1" %*

  > bash
  $ FILE=c:/cygwin64/bin/bash.exe
  $ FILE=${FILE////\\} # s,/,\,g

  # Compare these permissions using accesschk by Mark Russinovich 2015
  $ accesschk.exe -lq  $FILE 
  $ accesschk.exe -lq c:/windows/system32/cmd.exe
  # [large output not shown]

  # === Solution: Change windows acl for bash ===
  $ takeown /F $FILE /A > /dev/null
  $ icacls $FILE /t /q /c /reset
  $ icacls $FILE /t /q /c /grant    :r Everyone:F
  $ icacls $FILE /t /q /c /setowner Administrators  
  # ====

  cmd> script.sh
    OK .. invokes bash
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.