Roze Posted February 18, 2017 Report Share Posted February 18, 2017 Kā jau iepriekš minēts, 126 exit status ir nepietiekamas permisijas .. Zem kāda lietotāja darbojas php (ja tiek vērta lapa caur http/webserveri)? Vai no komandrindas 'php konkretaisfails.php' ar neko neizdod? Proti, parasti noklusēti 'sudo' komanda pieprasa ievadīt root lietotāja paroli, ja vien nav specifiski nokonfigurēts (konfigurācija parasti /etc/sudoers), ka konkrēti sistēmas lietotāji to var izsaukt bez paroles ievades, taču, ja php darbojas zem cita lietotāja, iespējams tam nav šādu permisiju. Kā alternatīvu varētu skatīties vai nav iespējams atjaunināt pašu Raspberry programmatūru (neesmu gan lietojis Pi, attiecīgi nemāku teikt cik grūti/vienkārši tas izdarāms), jo tā fiksi pameklējot webā parādās šāda lieta https://github.com/adafruit/Adafruit_Python_DHT/commit/0db54b0482f004e0091e48cefa9b5f0b310d735b#diff-1da2860702a0965f5f60c13795e0bddf proti iespēja lasīt datus bez root tiesībām. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 18, 2017 Author Report Share Posted February 18, 2017 hmm interesanti.. apachis strādā zem lietotāja www-data, raspbians ir pārkompilēts debians un tam apdeiti sistēmai nāk diezgan regulāri.. nolaboju kodu, pēc ielejas piemēra, verot vaļā webu, parādās tukša lapa, bet no konsoles izpildot php python.php man atgrieza vērtības korektas.. <?php $out = array(); $command = 'python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12'; #$command = 'python /var/www/html/python.sh'; echo exec($command, $out, $status); foreach($out as $outputStr) echo $outputStr . "\n"; ?> <?php $out = array(); $command = 'python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12'; echo exec($command, $out, $status); foreach($out as $outputStr) echo $outputStr . "\n"; ?> šāds bija izvads konsolē pi@raspberrypi:~ $ php /var/www/html/python.php Temp=19.8* Humidity=32.6%Temp=19.8* Humidity=32.6% iespējams ka arī www-data nav tiesības izpildīt to skriptu ar root tiesībām, par to nebiju aizdomājies.. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 18, 2017 Report Share Posted February 18, 2017 Ehh, dokumentācija, liekas, nemaz nav lasīta... $command = 'python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12'; exec($command, $output, $exitCode); echo 'exit code is ', $exitCode, PHP_EOL; var_dump($output); Quote Link to comment Share on other sites More sharing options...
analgins Posted February 18, 2017 Author Report Share Posted February 18, 2017 šo to jau lasījis esmu, tā jau nav ka tikai ar acīm pārbraucu pāri, bet ja konkrētā lieta neizraisa nekādu saprotamu loģiku, tad to infu vienkārši neuzsūcu.. exite code is: 1 NULL tas no weba, bet ko tas man dod ? forši jau ir, errors parādās, bet kāpēc ? pat zvaniņš nenoskan kāpēc :( Rīt pamurgošu, kā to kodu palaist bez root tiesībām, tad jau redzēsim vai tur tas suns aprakts.. Paldies par atsaucību!! Quote Link to comment Share on other sites More sharing options...
Roze Posted February 18, 2017 Report Share Posted February 18, 2017 4 hours ago, analgins said: Iespējams ka arī www-data nav tiesības izpildīt to skriptu ar root tiesībām, par to nebiju aizdomājies.. Tev tas skripts atrodas /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py kas ir 'pi' lietotāja home direktorija .. parasti noklusētās permisijas neļauj citiem lietotājiem (kas šajā gadījumā ir www-data) piekļuvi /home/ direktorijām. Pamēģini pārcelt to Adatafruit_Python_DHT kaut kur ārpuse /home (piem /tmp /opt utt) kur būtu read/exec tiesības www-data (vai arī visiem sistēmas lietotājiem). p.s. no testēšanas viedokļa, manuprat, exec() vietā vienkāršāk ir lietot passthru() ( http://lv.php.net/passthru ), kas uzreiz izgrūž komandas outputu. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 18, 2017 Author Report Share Posted February 18, 2017 Tā ir instalācijas direktorija, pēc noklusējuma, ja pārvietošu skriptu / folderi, tad vairs nestrādās, ne tas ko tagad šeit apspriežam, ne arī mans python kods kas ģenerē RRD un vēl šo to.. Quote Link to comment Share on other sites More sharing options...
Roze Posted February 18, 2017 Report Share Posted February 18, 2017 Skan kaut kā jocīgi, ka tā ir tikai vienīgā vieta kur iespējams ielikt python skriptu, bet nu labi .. Bet pa lielam tev tad jāmaina permisijas (proti vai nu /home/pi dot pilnas read/exec tiesības visiem sistēmas lietotājiem (chmod a+rx /home/pi) vai arī jāliek www-data un pi vienā grupā un tad jāmaina grupas permisijas) vai arī teiksim var darbināt apache zem 'pi' lietotāja. Vai arī jāskatās /etc/sudoers un jāļauj www-data lietot sudo komandu. Piemēram var kaut ko šadu: www-data ALL = NOPASSWD: /var/www/html/python.sh attiecīgi ļaujot www-data izpildīt sudo /var/www/html/python.sh bez root pw ievadīšanas .. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 18, 2017 Author Report Share Posted February 18, 2017 Tā nav vienīgā vieta, proti, no github novelk paciņu, atspiež un palaiž instalu, tur arī tad tas dzīvos un sasaistīs visas biblotēkas ar GPIO piniem un to funkcijām.. Kā jau teicu, paldies, rīt pačekošu kas sanāks, tad jau iepostēšu rezultātus.. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 18, 2017 Report Share Posted February 18, 2017 Nu tad vnk pārinstalē folderī, kas nav cita jūzera home direktorijā, bet gan pieejams www-data. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 izskatās ka ar pārinstalēšanu citā folderī (/var/www) arī neko nav devis, redzkur kods un ko tas man atgriež.. <?php $out = array(); $command = 'sudo python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12'; exec($command, $out, $exitCode); echo 'exite code is: ', $exitCode, PHP_EOL; var_dump($out); foreach($out as $outputStr) echo $outputStr . "\n"; ?> pi@raspberrypi:/var/www/html $ php python.php exite code is: 0 array(1) { [0]=> string(26) "Temp=19.8* Humidity=36.0%" } Temp=19.8* Humidity=36.0% webs atgriež tikai šo exite code is: 1 array(0) { } echo $out; izvada tikai - Array Vai tas joprojām nozīmē, ka apachim nav tiesības izpildīt šo python skriptu ? Quote Link to comment Share on other sites More sharing options...
zintis8789 Posted February 19, 2017 Report Share Posted February 19, 2017 http://stackoverflow.com/questions/3166123/how-to-call-shell-script-from-php-that-requires-sudo Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 pieliku www-data pie sudoers, bez izmaiņām www-data ALL=(ALL:ALL) NOPASSWD: /var/www/Adafruit_Python_DHT/examples pamēģināju uzlikt python skriptam chmod 777, ar php to arī nolasīju rwxrwxrwx, bet no weba joprojām atgriež errorcode 1 arī pamēģināju palaist komandu caur shell_exec ar password faili kā ir minēts augstāk minētajā linkā (zintis8789) Konsole atgriež visu korekti, webs neko.. rodas baigā sajūta, ka es te savā sulā kaut ko uz riņķi griežu un kaut ko ļoti svarīgu palaižu garām.. Quote Link to comment Share on other sites More sharing options...
Roze Posted February 19, 2017 Report Share Posted February 19, 2017 52 minutes ago, analgins said: pieliku www-data pie sudoers, bez izmaiņām www-data ALL=(ALL:ALL) NOPASSWD: /var/www/Adafruit_Python_DHT/examples Šāda konfigurācija manuprāt neko nedod (ja vien nav nepilnīgi iekopēta), jo nenorāda komandu(-as), kuras ļauts izpildīt. Varbūt testiem tad var ielikt vienkārši: www-data ALL=(ALL) NOPASSWD: ALL kas ļautu www-data izpildīt caur sudo jebko (nav īpaši labi no drošības viedokļa, bet to var pēc tam mainit brīdī ja vispār kaut kas sāk darboties). Quote rodas baigā sajūta, ka es te savā sulā kaut ko uz riņķi griežu un kaut ko ļoti svarīgu palaižu garām.. Nu varbūt tad jāsāk ar vienkāršākām lietām, piemēram, skatīties vai php var palaist pythonu vispār (jāņem vērā ka www-data var būt noshell lietotājs (var noskaidrot paskatoties /etc/passwd vai nav kaut kāds /sbin/nologin vai /bin/false vai arī no root lietotāja izpildot 'su www-data'), kam nav definēti PATH utt) Piemēram, vai izpildās no weba php ar kaut ko šādu? <?php passthru('python --version'); ?> Ja nē, tad nepieciešams pilns path uz python executabli. Tad var pamēģināt patestēt vienkārši no konsoles vai zem www-data iespējams izpildīt : su www-data -c "python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12" vai sudo -u www-data python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 1 utt Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 (edited) passthru webā neko neparāda, bet konsolē gan.. Python 2.7.9 root@raspberrypi:/var/www/html# su www-data -c "python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12" This account is currently not available. root@raspberrypi:/var/www/html# sudo -u www-data python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12 Traceback (most recent call last): File "/var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py", line 41, in <module> humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 90, in read_retry File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 76, in read File "build/bdist.linux-armv7l/egg/Adafruit_DHT/common.py", line 51, in get_platform File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi_2.py", line 22, in <module> File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi_2_Driver.py", line 7, in <module> File "build/bdist.linux-armv7l/egg/Adafruit_DHT/Raspberry_Pi_2_Driver.py", line 4, in __bootstrap__ File "/usr/local/lib/python2.7/dist-packages/setuptools-4.0.1-py2.7.egg/pkg_resources.py", line 950, in resource_filename File "/usr/local/lib/python2.7/dist-packages/setuptools-4.0.1-py2.7.egg/pkg_resources.py", line 1620, in get_resource_filename # usable with the zipimport directory cache for our target archive File "/usr/local/lib/python2.7/dist-packages/setuptools-4.0.1-py2.7.egg/pkg_resources.py", line 1650, in _extract_resource for name in eagers: File "/usr/local/lib/python2.7/dist-packages/setuptools-4.0.1-py2.7.egg/pkg_resources.py", line 1016, in get_cache_path target_path = os.path.join(extract_path, archive_name+'-tmp', *names) File "/usr/local/lib/python2.7/dist-packages/setuptools-4.0.1-py2.7.egg/pkg_resources.py", line 996, in extraction_error ) pkg_resources.ExtractionError: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/var/www/.python-eggs' The Python egg cache directory is currently set to: /var/www/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory. no /etc/passwd www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin uz ko vajadzētu mainīt nologin, bash ? Edited February 19, 2017 by analgins Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 19, 2017 Report Share Posted February 19, 2017 (edited) Ehh, grūti ir, kad PHP vispār nezin, bet nez kāpēc grib rakstīt. Uztaisi tā: cron skripts, kurš izpilda tavu python skriptu un appendo outputu teksta failā (droši vien kopā ar datumu, kuru tā komanda neatgriež, vajadzēs iemācīties, kā shell skriptā izvadīt datumu); web skripts, kurš tikai nolasa to teksta failu. Ja gribās advancētāk (lasīt: priekš tevis krietni vairāk problēmu), tad var datus saglabāt datubāzē, un tad nevajadzēs visu teksta failu ielādēt, varēs filtrēt. Edited February 19, 2017 by jurchiks Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.