दिलचस्प पोस्ट
त्रुटि 403 हो रही है: एक्सेस कॉन्फ़िगर नहीं है। कृपया अपने प्रोजेक्ट के लिए एपीआई सक्रिय करने के लिए Google डेवलपर कंसोल का उपयोग करें एक प्रतिनिधि उद्देश्य-सी में कैसे काम करता है? प्रोग्रामेटिक रूप से टेबलरेग को टेबल लेआउट में काम नहीं कर रहा है रेल 3 और 4 में "पसंद में जोड़ें" लागू करें .NET 4.0 में परिवर्तन तोड़ते हैं फ़ाइल सहेजें पर Intellij reformat Django ImageField पर प्रोग्राम की बचत करना सी # सूचीदृश्य कॉलम चौड़ाई ऑटो कौन से एंड्रॉइड आईडीई बेहतर है – एंड्रॉइड स्टूडियो या एक्लिप्स? एंड्रॉइड टुकड़े और एनीमेशन पांडस / पाप्लोट में स्कैटर प्लॉट: श्रेणी के अनुसार कैसे साजिश की जाए मैं गिटहब जैसे अद्भुत ताज़ा पृष्ठ परिवर्तन कैसे करूं? JavaFx में एक पुनर्क्रमित-सक्षम तालिका दृश्य कैसे बनाएं एफ # मान प्रतिबंध त्रुटियों को समझना एएसपी.नेट एमवीसी – सेट कस्टम IIdentity या IPrincipal

sudo in php exec ()

मुझे नहीं पता कि सौदा यहाँ क्या है …

इसलिए मैं एक sudo osascript myscript.scpt चलाने के लिए चाहता हूं: sudo osascript myscript.scpt

यह टर्मिनल में ठीक काम करता है, लेकिन जब मैं इसे PHP के exec() के द्वारा निष्पादित नहीं करता; कुछ नहीं हुआ। कंसोल कहते हैं

 no tty present and no askpass program specified ; TTY=unknown ; … 

मैंने अपना शोध किया, और ऐसा लगता है कि मुझे sudo कमांड के लिए पासवर्ड याद नहीं है I मैंने इसके चारों ओर जाने के लिए कुछ अलग तरीकों की कोशिश की, जिनमें शामिल हैं:

  • %admin ALL=(ALL) ALL लेखन %admin ALL=(ALL) ALL /etc/sudoers
  • और proc_open() बजाय exec()

जिनमें से कोई भी काम करने लगते हैं, फलस्वरूप मुझे क्रैज़ चलाते हैं!

तो मूल रूप से, क्या एक सरल टर्मिनल कमांड को निष्पादित करने के लिए PHP का एक स्पष्ट तरीका है?

संपादित करें: स्पष्ट करने के लिए, myscript.scpt एक सरल सेपस्क्रिप्ट है जो कि ऑनस्क्रीन यूआई (एक बड़ी परियोजना के लिए) बदलता है। सिद्धांत रूप में, बस osascript myscript.scpt पर्याप्त होना चाहिए, हालांकि सिस्टम से कुछ प्रतिक्रिया osascript myscript.scpt लिए आवश्यक किसी कारण के लिए sudo है। अगर sudo किसी भी तरह समाप्त हो सकता है, मुझे नहीं लगता कि मुझे इस अनुमति समस्या होगी।

वेब के समाधान से एकत्रित समाधान "sudo in php exec ()"

अगर किसी को अभी भी यह आवश्यकता है आप सादा पाठ फ़ाइल लिख सकते हैं, कहते हैं ~ ./। Sudopass / sudopass.secret , वहाँ रूट पासवर्ड के साथ। मान लें कि रूट पासवर्ड '12345' है आप ~ ./ sudopass / sudopass.secret केवल '12345' के साथ अपनी सामग्री के रूप में बना सकते हैं:

 12345 

और फिर आप निम्न करते हैं:

 exec('sudo -u root -S {{ your command }} < ~/.sudopass/sudopass.secret'); 

केवल नियंत्रित वातावरण में इसका उपयोग करना याद रखें।

ऐसा लगता है कि आपको पासवर्ड रहित सुडो स्थापित करने की आवश्यकता है। प्रयत्न:

 %admin ALL=(ALL) NOPASSWD: ALL 

निम्न पंक्ति (visio के माध्यम से / etc / sudoers में) को भी टिप्पणी दें, अगर यह है:

 Defaults requiretty 

php: बास कंसोल बनाया गया है, और यह 1 स्क्रिप्ट को निष्पादित करता है, जो दूसरे को सुडो कहते हैं, नीचे देखें:

 $dev = $_GET['device']; $cmd = '/bin/bash /home/www/start.bash '.$dev; echo $cmd; shell_exec($cmd); 
  1. /home/www/start.bash

     #!/bin/bash /usr/bin/sudo /home/www/myMount.bash $1 
  2. myMount.bash:

     #!/bin/bash function error_exit { echo "Wrong parameter" 1>&2 exit 1 } .......... 

ओसी, आप मूलभूत स्तर के बिना स्क्रिप्ट से स्क्रिप्ट को चलाने के लिए, /etc/sudoers.d/mount फ़ाइल को बनाने और संशोधित करने के लिए चाहते हैं:

 www-data ALL=(ALL:ALL) NOPASSWD:/home/www/myMount.bash 

chmod को न भूलें:

 sudo chmod 0440 /etc/sudoers.d/mount 

मुझे लगता है कि आप उपयोगकर्ता के लिए विशिष्ट एक्सेस और आदेश को इस तरह से visudo साथ ला सकते हैं:

 nobody ALL = NOPASSWD: /path/to/osascript myscript.scpt 

और php के साथ:

 @exec("sudo /path/to/osascript myscript.scpt "); 

nobody उपयोगकर्ता एपाचे nobody चल रहा है।

sudo visudo कमांड चलाएँ तो सेट करें -%sudo ALL=(ALL:ALL) से %sudo ALL=(ALL:ALL) NOPASSWD: ALL यह %sudo ALL=(ALL:ALL) NOPASSWD: ALL काम करेगा।

मैंने हाल ही में एक प्रोजेक्ट प्रकाशित किया है जो PHP को वास्तविक बैश खोल के साथ प्राप्त करने और उसके साथ बातचीत करने की अनुमति देता है। इसे यहां प्राप्त करें: https://github.com/merlinthemagic/MTS खोल में एक पीटीआई (छद्म टर्मिनल डिवाइस है, जैसा कि आप में एक एसएसएच सत्र होगा), और यदि आप वांछित हैं तो रूट के रूप में खोल प्राप्त कर सकते हैं। सुनिश्चित नहीं है कि आपको अपनी स्क्रिप्ट को निष्पादित करने के लिए रूट की आवश्यकता है, लेकिन आप को sudo का उल्लेख करने की संभावना है

डाउनलोड करने के बाद आप केवल निम्नलिखित कोड का उपयोग करेंगे:

 $shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); $return1 = $shell->exeCmd('/path/to/osascript myscript.scpt'); 

कैसे sudo साथ PHP स्क्रिप्ट चलाने के बारे में, और स्क्रिप्ट के भीतर इसे छोड़कर? वह भी बाल प्रक्रियाओं के लिए अनुमतियों का ख्याल रख सकता है।