লিনাক্স উবুন্টুতে পিএইচপি শেল_এক্সেক () অনুমতি


13

আমি লিনাক্স সার্ভার ব্যবহার করে একটি পিএইচপি অ্যাপ্লিকেশন বিকাশ করছি। আমার সমস্যাটি shell_exec()এক্সেপ ফাইলটি কল করতে কার্যকর হচ্ছে এটি কাজ করছে না (আসলে এক্সিপ নয়, এটি লিনাক্স এক্সিকিউটেবল ফাইলের মতো)

echo shell_exec("whoami");

আমি ডিমন পেয়েছি

echo shell_exec("ls")

আমি কিছু ফাইল নাম পেয়েছি কিন্তু

echo shell_exec("php -v")

আমার কাছে কিছুই নেই, একটি ফাঁকা পৃষ্ঠা

echo shell_exec("php ....bla bla bla")

একটি ফাঁকা পৃষ্ঠাও।

এই সমস্ত কমান্ড যদি আমি টার্মিনালে টাইপ করি (ব্যবহারকারী হু) কাজ করবে works আমি বেশ কয়েক ঘন্টা গুগল অনুসন্ধান করেছি, লোকেরা বলে যে অনুমতিের কারণে। আমার লিনাক্স নিয়ে অভিজ্ঞতা নেই। পিএইচপি তে আমার প্রোগ্রামটি সম্পাদন করতে আমার কী করতে হবে?

উত্তর:


10

অ্যাপাচি ব্যবহারকারীর www-dataনির্দিষ্ট কিছু অ্যাপ্লিকেশন ব্যবহার করে বিশেষাধিকার প্রদান করা দরকার sudo

  1. কমান্ড চালান sudo visudo। প্রকৃতপক্ষে আমরা ফাইলটি সম্পাদনা করতে চাই terminal এটি করতে, টার্মিনাল etc/sudoersব্যবহার করে, সম্পাদনা করার জন্য এটি ফাইলটিকে sudo visudoনকল (অস্থায়ী) করে sudoers
  2. ফাইলটির শেষে, নিম্নলিখিতটি যুক্ত করুন: restart-আমরা ধূমপানের phpজন্য কমান্ড এবং আপনার প্রশ্নের অন্য ক্রিয়াকলাপের জন্য কমান্ডটি ব্যবহার করতে চাইলে ,

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php

(এটি ধরে নেওয়া হচ্ছে যে আপনি সুপার ইউজার (মূল) সুবিধাগুলি ব্যবহার করে চালনা করতে চান restartএবং phpকমান্ডগুলি ব্যবহার করতে পারেন phpnd এবং আপনি কমান্ডটি usr/bin/পথে ব্যবহার করেন )

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

www-data ALL=NOPASSWD: ALL

3. সম্পাদন করা sudoers ফাইল (পরে দ্বারা visudoআমরা টেম্প ফাইল সম্পাদনা sudoersসংরক্ষণ করুন, যাতে এবং লিখতে টেম্প ফাইল (visudo) প্রস্থান sudoersফাইল। ( wq!)

এটি এখন, আপনার স্ক্রিপ্টের ভিতরে exec()বা shell_execনিম্নলিখিত পদ্ধতিতে ব্যবহার করুন xxx.phpকমান্ডটি পিএইচপি স্ক্রিপ্টে ব্যবহারের sudoআগে ব্যবহার করতে ভুলবেন না।

উদা: -

exec ("sudo /etc/init.d/smokeping restart 2>&1");

অথবা

shell_exec("sudo php -v"); 

সুতরাং আপনার সমস্যায়, step no (2.)আমি যুক্ত হিসাবে আপনি যে কমান্ডগুলি ব্যবহার করতে চান তা যুক্ত করুন এবং আপনার পিএইচপি স্ক্রিপ্টটি যা চান তা পরিবর্তন করুন।

আপনার /programming//a/22953339/1862107 এর মতো একই সমস্যা এখানে


এই প্রশ্নটি sudo ব্যবহার সম্পর্কে নয়।
tricasse

এটি এত খারাপভাবে শব্দ করা হয়েছে
বার্নি চেম্বারস

5

পিএইচপি বাইনারি পুরো পথ নির্দিষ্ট করার চেষ্টা করুন .. উদাহরণস্বরূপ, /usr/bin/php

যদি আপনি এটি জানেন না, এটি ব্যবহার করে এটি সন্ধান করুন: which php


প্রতিধ্বনি শেল_এক্সেক ("/ usr / bin / php -v"); কাজ করে না
এনগোহো 91

আপনি যখন বলেন 'কাজ করে না' আপনি কী পাবেন? অর্থাৎ কোন ত্রুটি? আপনার পিএইচপি / এপাচি ত্রুটির লগগুলিতে কিছু আছে? পৃষ্ঠাটি ফাঁকা থাকলে, উত্স উত্স আপনাকে কাজ করার জন্য কিছু দেয়? দুর্ভাগ্যক্রমে 'কাজ করে না' শব্দটি আমাদের সাথে কাজ করার কিছু দেয় না ...
কেইরান হলোয়ে

@ ngoaho91 - সাধারণত লগ হয় /var/log/httpd/error*
slm

: ডি আমি খালি পৃষ্ঠা পেয়েছি, দেখার মতো কিছুই নেই। পিএইচপি / অ্যাপাচি ত্রুটি লগ ফাইলটি কোথায়?
ngoaho91

@ এনগোহো91 - এটি লিনাক্সের ডিস্ট্রো কী? সেন্টস, উবুন্টু?
slm

4

আপনি সাধারণত , এবং whoami, এর মতো অ্যাপ্লিকেশনগুলির পুরো পথ নির্দিষ্ট করতে চান । যদি আপনি নিশ্চিত না হন যে কোনও প্রোগ্রামের অবস্থান কী (সম্পূর্ণ পাথ) তবে আপনি এটির মতো খুঁজে পেতে পারেন:lsphp

$ type php
php is /usr/bin/php

তারপরে আপনার স্ক্রিপ্টে এটি নির্দিষ্ট করুন।

<?php
    echo shell_exec("/usr/bin/php ....bla bla bla");
?>

আমি আপনার আদেশ চালাচ্ছি। টাইপ পিএইচপি => পিএইচপি হ'ল / ইউএসআর / বিন / পিএইচপি। তবে পুরো পাথ কমান্ড এখনও আমাকে একটি ফাঁকা পৃষ্ঠা ফিরিয়ে দেয়।
ngoaho91

আপনি যদি এটি করেন তবে echo shell_exec("/usr/bin/php somefile.php 2>&1"):?
slm

প্রতিধ্বনি শেল_এজেক ("/ usr / bin / php index.php 2> & 1") => / usr / bin / php: স্থান পরিবর্তন ত্রুটি: / usr / bin / php: প্রতীক X509_free, সংস্করণ OPENSSL_1.0.0 ফাইল libcrypto এ সংজ্ঞায়িত করা হয়নি। so.1.0.0 লিঙ্ক সময় রেফারেন্স সহ
ngoaho91

ঠিক আছে, ওয়েব সার্ভার (অ্যাপাচি) সাধারণত অন্য একজন ব্যবহারকারী হিসাবে চলছে, না hu। সুতরাং আপনি নিশ্চিত স্ক্রিপ্ট যে করতে হবে phpরান প্রয়াস করছে ভালো সেট করা হয়: chmod 755 somescript.php। এটি আপনার .phpফাইলটি কার্যকর করতে এবং পড়তে সক্ষম হতে অ্যাপাচি যেভাবে চলছে সেই ব্যবহারকারীর অনুমতি দেবে ।
slm

1
@ এনগোহো 91 - এখন সবকিছু ঠিকঠাক হওয়া উচিত, ত্রুটিটি আমাকে বলে যে ডব্লু / আপনার অ্যাপাচি / পিএইচপি সেটআপে কিছু ভুল আছে। freetutorialssubmit.com/php-relocation-error/2221
SLM

2

আপনার php.ini কি উপলব্ধ কমান্ড সেটকে সীমাবদ্ধ করে?

এটি আমার কাছ থেকে /etc/php5/php.ini

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
; http://php.net/safe-mode-exec-dir
safe_mode_exec_dir =

না, আমার আইনি আপনার মতো
ngoaho91

2

শেল_এক্সেক সমস্যাগুলি কীভাবে ডিবাগ করা যায়

ঠিক আছে, এখানে আমাদের একটি সমস্যা রয়েছে: কিছু জিনিস টার্মিনালে কাজ করে এবং পিএইচপি এর শেল_এক্সেক (বা এক্সিকিউটি, স্পন, যাই হোক না কেন) তে কাজ করে না। আসুন ভাবুন: আপনি এবং পিএইচপি এর মধ্যে পার্থক্য কী? এখানে তিনটি রয়েছে:

পিএইচপি এইচটিটিপি সার্ভারের বিধি থেকে কার্যকর করা হয়

প্রকৃতপক্ষে, আপনার টার্মিনালটি yournameব্যবহারকারী থেকে চলছে এবং পিএইচপি থেকে কার্যকর করা হয়েছে www-data। সুতরাং, প্রথম ধারণাটি হ'ল www-dataব্যবহারকারীর কাছ থেকে টার্মিনাল খোলা এবং একই কমান্ডটি ব্যবহার করা। তাই ....

  • /etc/passwdফাইল খুলুন , www-dataব্যবহারকারীর সাথে লাইন সন্ধান করুন এবং এটির লগইন শেল (শেষটি) থেকে /bin/false(বা যাই হোক না কেন) এ পরিবর্তন করুন /bin/bash
  • খুলুন www-dataএর টার্মিনাল:su www-data
  • পিএইচপি-ভি বা যা কিছু আপনি পিএইচপি থেকে চালাতে পারবেন না চেষ্টা করুন। যদি এটি কাজ না করে - আপনি দুর্দান্ত লগগুলি দেখতে পাবেন এবং সমস্যাটি ডিবাগ করতে সক্ষম হবেন।
  • /etc/passwdআপনার কাজ শেষ হয়ে যাওয়ার পরে ফাইলটি ফিক্স করতে ভুলবেন না

পিএইচপি পিএইচপি থেকে কার্যকর করা হয়

পিএইচপি হ'ল ভৌতিক বিষয় এবং এপাচি / এনগিনেক্স এবং পিএইচপি.আইএনই কনফিগারেশনে অনেকগুলি বিকল্প রয়েছে যা আপনার প্রচেষ্টাটি ভেঙে দিতে পারে।

এটি ডিবাগ করা আরও কিছুটা জটিল। এখানে দুটি বিকল্প রয়েছে:

  • ব্রাউজারে লগগুলি সক্ষম করুন এবং সমস্যাটি দেখুন। ব্রাউজারে ত্রুটি দেখতে আপনার php.ini, চালু display_errorsএবং অন্যান্য সমস্ত পতাকা সম্পাদনা করুন । তারা আপনি সেগুলি পড়তে এবং ডিবাগ করতে পারেন।

  • প্রাপ্ত করুন www-dataএর শেল (প্রথম অধ্যায় দেখুন) এবং ভালো কিছু চালানো

echo '<?php shell_exec("php -v"); ?>' | php

যা কনসোলে একই পিএইচপি কোডটি কার্যকর করবে এবং আপনি ত্রুটিগুলি এবং ডিবাগ দেখতে সক্ষম হবেন।

পিএইচপি SELinux / apparmor থেকে কার্যকর করা হয়

সেলিনাক্স এবং অ্যাপারমোর এমন সুরক্ষা বিষয় যা অ্যাপ্লিকেশনগুলিকে নির্দিষ্ট ক্রিয়া করতে নিষেধ করে (উদাহরণস্বরূপ, অন্যান্য অ্যাপ্লিকেশন বা কিছু নির্দিষ্ট অ্যাপ্লিকেশন তৈরি করা)। হতে পারে এটি আপনার সার্ভারে সক্ষম হয়েছে।

চেক করতে - সেলিনাক্স / অ্যাপমর্ম অক্ষম করুন এবং সমস্যা আছে কিনা তা পরীক্ষা করুন।

ঠিক করতে - উপযুক্ত ম্যানুয়াল পড়ুন এবং আপনার মামলার জন্য অনুমতিমূলক নিয়মগুলি ঠিক করুন।


0

আমার জন্য সহজ উপায়টি ছিল php.ini এর ভিতরে যাওয়া এবং যে লাইনটি দিয়ে শুরু হয়েছিল তা মন্তব্য করা

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