পিএইচপি স্ক্রিপ্ট বাশ স্ক্রিপ্ট চালাতে পারে না। sh: অনুমতি অস্বীকার করা হয়েছে


14

আমি পিএইচপি থেকে একটি .sh স্ক্রিপ্ট কার্যকর করার চেষ্টা করছি, তবে এটি কার্যকর হচ্ছে না।

আমি ত্রুটিযুক্ত লগগুলি পরীক্ষা করেছি এবং আমি 'শ: অনুমতি অস্বীকার' ত্রুটি পেয়েছি। কোন ব্যবহারকারী পিএইচপি এর অধীনে চলছে তা আমি যাচাই করেছি এবং এটি অ্যাপাচি ব্যবহারকারীর অধীনে করা হয়েছে।

আমি অ্যাপাচি ব্যবহারকারীর কাছে .sh এর মালিকানা পরিবর্তন করার চেষ্টা করেছি, তবে কোনও ফলাফল নেই।

আমি প্রথমে ভেবেছিলাম কারণ স্ক্রিপ্টটি www / dir এর বাইরে ছিল, যদিও আমি স্ক্রিপ্টটি একই ডিরেক্টরিতে রেখেছি তবুও ত্রুটিটি দেওয়া হচ্ছে।

SUDOers তালিকায় অ্যাপাচি ব্যবহারকারীকে যুক্ত করা ছাড়া কি এর কোনও সমাধান আছে?

আমি যদি 'php filename.php' কমান্ড ব্যবহার করে পুট্টি থেকে এটি চালু করি তবে sh স্ক্রিপ্টটি ঠিক আছে।


3
এটি কি শেল স্ক্রিপ্ট বা পিএইচপি ফাইল? আপনার শেষ অনুচ্ছেদটি সে সম্পর্কে পরিষ্কার নয়। এছাড়াও, আপনি কি xফাইলটিতে অনুমতিগুলি নির্বাহ ( ) নির্ধারণ করেছেন? আপনি কি শেবাং লাইনে স্ক্রিপ্ট ইন্টারপ্রেটারকে নির্দিষ্ট করেছেন?
ড্যানিয়েল বেক

এটি পিএইচপি থেকে চালানো বাশ স্ক্রিপ্ট। হ্যাঁ আমি এটিকে একটি এক্সিকিউটেবল করেছিলাম এবং আমি স্ক্রিপ্ট ইন্টারপ্রেটার নির্দিষ্ট করেছিলাম। যখন আমি পুটি থেকে পিএইচপি স্ক্রিপ্টটি কার্যকর করি এবং ব্যাশ স্ক্রিপ্টটি ডেকে ডাকা হয় এবং সঠিকভাবে চলে It তবে আমি যদি ওয়েব ব্রাউজার থেকে পিএইচপি স্ক্রিপ্টটি চালিত করি তবে এটি ব্যাশ স্ক্রিপ্টটি চালাতে ব্যর্থ হয় এবং এটি এই ত্রুটিটি করবে কারণ এটি অ্যাপাচি ব্যবহারকারী হিসাবে চালাচ্ছে এবং আমি পুট্টিতে ব্যবহার করি না এমন ব্যবহারকারী হিসাবে।
রবিন প্রেস্তো

1
ব্যবহার করে দেখুন chmod 775 yourscript.sh। যে দেব r-x(পড়া এবং চালানো) যে ফাইলে "অন্যান্য" ব্যবহারকারীদের অনুমতি।
Rhyuk

আমি এটা চেষ্টা করেছি. ভাগ্য নেই .. আগামীকাল পর্যন্ত সঠিক কারণটি আমি জানতে পারি না। আমার অবস্থান থেকে লগগুলিতে আমার অ্যাক্সেস নেই। আমি আপনাদের কাছে ফিরে আসব। আপনার সাহায্যের জন্য ধন্যবাদ। :)
রবিন প্রেস্টো

উত্তর:


10

নিম্নলিখিত পরামর্শ ব্যবহার করে দেখুন:

  • পরীক্ষা কমান্ডের নীচে চালানোর চেষ্টা করুন, এবং এটি কার্যকর হয়েছে কিনা তা পরীক্ষা করুন:
    • php -r "echo exec('whoami');"
  • নিশ্চিত হয়ে নিন যে সমস্ত অভিভাবক ডিরেক্টরি এবং ফাইলগুলিতে কমপক্ষে r-xফ্ল্যাগের অনুমতি রয়েছে:
    • chmod 755 dir; chmod 755 file
  • ফাইলটির মালিক আপনার অ্যাপাচি ব্যবহারকারী তা নিশ্চিত করুন ।
    • +sফাইলটিতে একটি পতাকা (সুডো) যুক্ত করার চেষ্টা করুন (প্রস্তাবিত নয়):
      • chmod u+s file,
  • আপনার পিএইচপি একটিতে চলমান না তা নিশ্চিত করুন safe_mode
  • স্ক্রিপ্টটি আপনার অ্যাপাচি রুটের ভিতরে রয়েছে তা নিশ্চিত করুন:
    • অন্যথায়, স্ক্রিপ্টটি এর ভিতরে নিয়ে যান,
    • বা আপনার অ্যাপাচি কনফিগারেশনে ডিরেক্টরিটি যুক্ত করুন,
    • বা আপনার এই ডিরেক্টরি যুক্ত করুন include_path, যেমন:
      • php.ini ফাইল: include_path ".:/usr/local/lib/php:/your/dir"
      • বা .htaccessফাইল:php_value include_path ".:/usr/local/lib/php:/your/dir"
  • আপনার শেলটি /bin/shআপনার অ্যাপাচি ব্যবহারকারীর কাছে বৈধ (যেমন ) হিসাবে সেট করা আছে কিনা তা পরীক্ষা করুন (উদাহরণস্বরূপ চেক করুন finger:)।
  • আপনার php.iniব্যবহার না করে তা নিশ্চিত করুন : ফাংশনের disable_functionsজন্যexec
  • যদি সেলইনাক্স ব্যবহার করে থাকেন বা selinux-utilsইনস্টল করে রেখেছেন (সুরক্ষা-বর্ধিত লিনাক্স সিস্টেম), @ টনিন উত্তরে বর্ণিত বর্ণনা getenforce/ setenforceকনফিগারেশন পরীক্ষা করুন ।

সমস্যা সমাধান:

  • আপনি যদি নিজের php.iniবা httpd.confফাইল পরিবর্তন করেন তবে ওয়েব সার্ভারটি পুনরায় আরম্ভ করতে ভুলবেন না,
  • অতিরিক্ত তথ্যের জন্য আপনার অ্যাপাচি ত্রুটি লগটি পরীক্ষা করুন।
  • আপনার সক্ষম php.iniত্রুটি (সব ধরনের display_error, error_reportingইত্যাদি)।

1
এটাই ছিল আমার সমস্যা .. পিতামাতার ডিরেক্টরিতে মৃত্যুদণ্ডের অধিকার ছিল না ... এটি এখন কাজ করে! ধন্যবাদ! :)
রবিন প্রেস্টো

এখনও আমার জন্য ভাগ্য নেই :( কোন পরামর্শ? `` `[মূল @ কিউই টিএমপি] # ls -ld /; ls -ld / tmp; ls -ld / tmp / ঘুম; গ্রেপ '^ অন্তর্ভুক্ত_পাথ = \ | ^ নিরাপদ_মোড =' /etc/php.ini dr-xr-xr-x। 27 রুট রুট 4096 সেপ্টেম্বর 3 12:31 / drwxrwxrwt। 4 রুট রুট 4096 সেপ্টেম্বর 3 15:45 / টিএমপি- rwxr-xr-x। 1 রুট রুট 24 সেপ্টেম্বর 3 15:39 / টিএমপি / স্লিপ সেফ_মোড = অফ অন্তর্ভুক্ত_পাথ = "/ টিএমপি: / হোম / কিউই বিল্ড" `` `
পাইহেন্টগি

1
আরগ, সেটেনফোর্স এটি সমাধান করেছে। ওএমজি
পাইহেন্টাগি

13

এই জাতীয় সমস্যা আপনার ব্যবহৃত ওএস এবং এটি কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে। কিছু লিনাক্স ডিস্ট্রো (মূলত যারা সেন্টস বা ফেডোরার মতো আরএইচইএল ভিত্তিক থাকে) ডিফল্টরূপে সক্রিয় SELinux নিয়ে আসে। নিম্নলিখিত কমান্ডগুলি সহ এটি পরীক্ষা করা যায় এবং অস্থায়ীভাবে পরিবর্তিত হতে পারে:

root@ls:~# /usr/sbin/getenforce 
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce 
Permissive

আপনার সাথে বর্তমান কনফিগারেশনটিতে আরও একটি সম্পূর্ণ দর্শন থাকতে পারে:

root@ls:~# /usr/sbin/sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted

এই পরিবর্তনটি সম্পাদনা করে স্থায়ী করা যেতে পারে /etc/selinux/configফাইল এবং সেট SELINUXপরিবর্তনশীল permissiveবা disabled

তবে, এই ধরণের সমস্যা সমাধানের সঠিক উপায় হ'ল আপনি যদি সত্যিই এই পরিস্থিতিতে থাকেন তবে /var/log/audit/audit.logলগ ফাইলটি পরীক্ষা করা । এতে সেলিনাক্স নিয়ম সম্পর্কিত সমস্ত ইভেন্ট থাকবে। তারপরে আপনার সম্ভবত আপনার স্ক্রিপ্টটি সঠিক প্রসঙ্গ দেওয়া উচিত, অর্থাৎ অ্যাপাচি / পিএইচপি ব্যবহারকারী দ্বারা চালিত হওয়ার জন্য অনুমোদিত being সেলিনাক্স সুরক্ষা প্রসঙ্গটি যাচাইয়ের সাথে এটি করা হয় ls -Z:

root@ls:~# ls -alZ /var/www/cgi-bin/
drwxr-xr-x  root root system_u:object_r:httpd_sys_script_exec_t .
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t ..

এটি প্রতিটি ফাইল / ডিরেক্টরিতে ব্যবহারকারী, ভূমিকা এবং ধরণের তালিকাবদ্ধ করে। এখানে httpd_sys_script_exec_tটাইপটি সিজিআই ডিরেক্টরিতে ফাইলগুলি httpd দ্বারা সম্পাদন করার অনুমতি দেয়। আপনার শেল স্ক্রিপ্ট সম্ভবত একই ধরণের হওয়া উচিত।

আপনি কমান্ডটিতে audit.logলাইনগুলিও খাওয়াতে পারেন audit2allow। এটি আপনাকে সেলিনাক্সকে খুশি করতে প্রয়োজনীয় পরিবর্তনগুলি আউটপুট করে। তবে সাধারণত প্রস্তাবিত পরিবর্তনগুলি সেলইনাক্স নীতিতে নিজেই করা উচিত যা আপনার ক্ষেত্রে আপনার কী করা উচিত নয় (তবুও, এই আউটপুটটি যা চলছে তাতে কিছুটা ক্লু দিতে পারে)।

নীচের পৃষ্ঠাটিতে অনুরূপ সমস্যা এবং এটি সমাধানের বিভিন্ন উপায় বর্ণনা করা হয়েছে: http://sheltren.com/stop-disabling-selinux


বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ! হায়, আমি যেমন উল্লেখ করেছি যে আগামীকাল পর্যন্ত আমার রুট অ্যাক্সেস থাকতে পারে না। তাই আমিও তোমার কাছে ফিরে আসব! :) এবং হ্যাঁ, আমি সেন্টস ব্যবহার করছি।
রবিন প্রেস্টো

আপনার উত্তরটি আমি খুব পছন্দ করেছিলাম! দুর্ভাগ্যক্রমে আমি আপনার বাছাই করিনি কারণ প্রয়োগকারী অক্ষম ছিল এবং সমস্যা ছিল না। যদিও আমি আপনার উত্তর থেকে অনেক কিছু শিখেছি, তাই আপনাকে ধন্যবাদ। আমি যথেষ্ট খ্যাতি পেলে আপনাকে ভোট দিয়ে দেব :)
রবিন প্রেস্টো

কোনও উদ্বেগ নেই, আপনি আমার পোস্ট থেকে শিখেছেন জানতে পেরে আনন্দিত!
টনিন

যদি getenforced সমস্যা হয়, তবে হ্যাক কী চলছে তা সত্যই স্পষ্ট নয়। এটা আমার দিন বাঁচায়!
pihentagy

1

সুতরাং আমি গুগলে অনুরূপ সমস্যা অনুসন্ধানের পরে এখানে এসেছি। আমি বাদ দিতে ভেবেছিলাম যে সেলইনাক্স সম্পর্কে মন্তব্যটি আমাকে সঠিক দিকে নির্দেশ করেছে।

আমার নিজের ক্ষেত্রে, আমি একটি শুল্ক কমান্ড ব্যবহার করে একটি কাস্টম গিট ডিপ্লোয় স্ক্রিপ্ট ব্যবহার করছিলাম। কমান্ডটি বেসে ঠিকঠাক কাজ করে তবে তারপরে গিটে "অনুমতি অস্বীকার" এবং "রিপোজিটরি নয়" রয়েছে। এটি সত্যিই অদ্ভুত ছিল এবং আমি এই উত্তরে হোঁচট খাওয়ার আগে পর্যন্ত একাধিক সংশোধন করেছিলাম।

root@ls:~# /usr/sbin/setenforce Permissive আমার জন্য সমস্যা সমাধান।


0

আমার পরিস্থিতি কিছুটা আলাদা, তবে গুগল আমাকে এখানে এনেছে, তাই আমি ভেবেছিলাম ভাগ করে নিই ...

আমার সার্ভারটি ডেবিয়ান স্থিতিশীল চলছে এবং শেল স্ক্রিপ্টটি একবার চালানোর চেষ্টা করছে তখন অনুমতিগুলি স্বয়ংক্রিয়ভাবে 64৪৪ এ পরিবর্তিত হয় এবং স্ক্রিপ্টটি চালানোর পরবর্তী প্রচেষ্টা পেয়ে যায় Permission denied। এটি আমার জন্য সাম্বা সার্ভারের সমস্যা হিসাবে পরিণত হয়েছিল এবং আমি এখনও অবধি প্যাটার্নটি লক্ষ্য করিনি।

উইন্ডোজ সম্পাদক থেকে সাম্বা পার্টিশনে ফাইল সংরক্ষণ করার সময় কিউএ স্ট্রেঞ্জের অনুমতি পরিবর্তন হয়map archive = noএক দশক ধরে সাম্বা শেয়ার ব্যবহার করার পরেও বিকল্পটি সম্পর্কে আমি জানতাম না ।

উইন্ডোজ ডেস্কটপে নোটপ্যাড ++ ব্যবহার করার জন্য উমাস্কটি সেট আপ হওয়ার কারণে লক্ষ্যযুক্ত ফাইলগুলির অনুমতিগুলি 7575৫ এর পরিবর্তে 7575৫ এ পরিবর্তিত হবে।


-7

অ্যাপাচি দিয়ে পিএইচপি-তে রুট কমান্ডগুলি চালাচ্ছি

আমার একটি ওয়েব অ্যাপ্লিকেশন রয়েছে যা পিএইচপি ফাংশনের মধ্যে শেল কমান্ডগুলি রুট হিসাবে সম্পাদন করা দরকার, এবং আপনি মনে করেন যে এটি বেশ সোজা হয়ে যাবে ... তবে সমস্ত বিবরণ পেতে আমার কয়েকটি গুগল লাগল, তাই এখানে আমার হাতের নোটগুলি এখানে রয়েছে এটা। এটি অ্যাপাচি চলমান একটি লিনাক্স সিস্টেমে রয়েছে এবং আমরা কমান্ডগুলি চালাতে "শেল_এক্সেক" এর মধ্যে "সুডো" ব্যবহার করব।

প্রধান জিনিস হ'ল / ইত্যাদি / সুডোর ফাইল সম্পাদনা করা এবং সাধারণত আপনি (রুট হিসাবে) এটি করতে "ভিসুডো" কমান্ডটি ব্যবহার করতে পারেন।

নিশ্চিত হোন যে অ্যাপাচি কমান্ড চালাতে পারে এবং পাসওয়ার্ডের প্রয়োজন হয় না:

apache  ALL=(ALL)       NOPASSWD: ALL

তারপরে আপনার এই লাইনটি মন্তব্য করতে হবে:

#Defaults    requiretty

যদি আপনি এটি না করেন তবে আপনি এই ত্রুটিগুলি দেখতে পাবেন / var / লগ / সুরক্ষিত: "দুঃখিত, সুডো চালানোর জন্য আপনার একটি টিটি থাকতে হবে"। এখন আপনি যেতে প্রস্তুত, এবং পিএইচপি কোড সহজ:

$ ফলাফল = শেল_এক্সেক ('সুডোর তারিখ');


5
এটি একটি ভয়ানক ধারণা। যদি আপনার অ্যাপাচি ইনস্টল আপস হয়ে যায় বা আপনি যে অ্যাপ্লিকেশনটি চালাচ্ছেন তা করে ... আপনার হ্যাকার খুব সহজেই সিস্টেমে সম্পূর্ণ অ্যাক্সেস পান। ডান জিনিস স্ক্রিপ্ট উপর অনুমতি পরিবর্তন করা হয়, না কিছু খোলা ছেড়ে
মজুর গিক

2
অ্যাপাচি ব্যবহারকারীর / ভূমিকার সমস্ত অনুমতি দেওয়ার সাথে সুস্পষ্ট সুরক্ষা উদ্বেগের কারণে আমি এই উত্তরে একটি ডাউনওয়োট জারি করতে বাধ্য বোধ করি।
রামহাউন্ড

@JourneymanGeek এটা না "যদি", এটা যখন ইনস্টল আপোস পায়।
মাইকেল হ্যাম্পটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.