analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 1 hour ago, jurchiks said: 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. nu kamon, tas jau vispār pēc kosmosa izklausās, prieškam mysql tur vēl darbināt ? man tos sensorus jānolasa vienu reizi kad ielādē admina paneli, lai redzētu aktuālos datus, tas arī viss.. bet tu te piedāvā būvēt kosmosa kuģi, lai aizbrauktu pēc piena.. noteikti problēma ir stulbi elementāra, kods jau pats par sevi strādā, jāatrod tik premisiju problēma, ne php, jo konsolē jau visu atgriež korekti.. Paies nedēļa, bet ganjau atkodīšu ko izdarīt, paldies visiem par atsaucību. Quote Link to comment Share on other sites More sharing options...
ieleja Posted February 19, 2017 Report Share Posted February 19, 2017 (edited) tagad apskatījos, man abos RBpi: /etc/psswd www-data:x:33:33:www-data:/var/www:/bin/bash tāpēc arī (iespējams) nav problēmu ar .py komandas izvades rādīšanu. skaidrs, ka "tā nav labi", bet manas iekārtas nav pieejamas no ārpuses sapratu, kas manā gadījumā tam 'www-data' iedeva šellu, 'RPi_Cam_Web_Interface', tāda kameras interfeisa vadības programma Edited February 19, 2017 by ieleja Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 19, 2017 Report Share Posted February 19, 2017 (edited) Es teicu "ja gribās advancētāk", nevis obligāti datubāzes. Lasīt vajag iemācīties. Tu teici, ka gribi realtime statistiku, nu tad taisi cron skriptu, kas reizi 30 sec ielādē aktuālos datus un saglabā vienalga kur, un no turienes arī nolasi web lapā. Ja saglabāsi failu ar pareizajām permissions, tad web pusē vispār nekādu problēmu nebūs, bet tagad tu jau 3 dienas pisies ar kaut ko, ko pa manam varēja uztaisīt stundas laikā. Ja tev vajag tikai pēdējo ierakstu un nevajag vēsturi, tad ar failu pilnībā pietiek - overwrite content un viss. Edited February 19, 2017 by jurchiks Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 2 hours ago, jurchiks said: 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. nu kamon.. tu tagad iesaki būvēt kosmosakuģi lai brauktu uz veikala pēc piena.. skaidrs kā diena, ka php kodā nav problēma, bet gan paša debiana premisijās, tāpēc www-data nevar izpildīt konkrēto skriptu.. Mēģināšu samainīt /sbin/nologin uz /sbin/bash redzēs ko tas dos Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 19, 2017 Report Share Posted February 19, 2017 Pamēģini uztaisīt ar faila starpniecību. Vienkārši pamēģini. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 ar komandu sudo chsh www-data nomainiju no /usr/sbin/nologin uz /bin/bash - reboots - izdruka no konsoles pi@raspberrypi:~ $ sudo -u www-data php /var/www/html/python.php [sudo] password for www-data: Sorry, user www-data is not allowed to execute '/usr/bin/python /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12' as root on raspberrypi. exite code is: 1 array(0) { } Array ( ) <hr><hr>Python 2.7.9 rrwxrwxrwx to pašu pēctam izdarīju tik norādīju /usr/bin/python reboots un konsolē rāda to pašu... liekas ļoti interesanti ka tai pat laikā, lietotājs pi ar /bin/bash bez sudo var izpildīt šo pašu komandu un atgriež korektu saturu Quote Link to comment Share on other sites More sharing options...
analgins Posted February 19, 2017 Author Report Share Posted February 19, 2017 BINGO! Dāmas un Kungi, liels paldies par atsaucību, problēma tika atrisināta! shell nomainiju atpakaļ uz orģinālo /usr/sbin/nologin /etc/sudoers izlaboju uz šādu www-data ALL=(ALL) NOPASSWD: /usr/bin/python, /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py www-data ALL=(ALL) NOPASSWD: /usr/bin/python, /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py www-data ALL=(ALL) NOPASSWD: /usr/bin/python, /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py www-data ALL=(ALL) NOPASSWD: /usr/bin/python, /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py visticamāk, uz konkrēto skriptu varēju arī nenorādīt, to vēl neesmu pārbaudījis.. tas ko man patreiz atgriež webs ir šāds, būs jāuzskaistina un jaiekļauj tur kur man to vajag.. exite code is: 0 array(1) { [0]=> string(26) "Temp=20.1* Humidity=40.1%" } Temp=20.1* Humidity=40.1% Array ( [0] => Temp=20.1* Humidity=40.1% ) rrwxrwxrwx Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 19, 2017 Report Share Posted February 19, 2017 > Tu teici, ka gribi realtime statistiku, nu tad taisi cron skriptu, kas reizi 30 sec ielādē aktuālos datus Tas ir tieši pretēji real-time datiem - ik pēc 30 sekundēm pollot datus. ;D Izklausās ka nesaproti ko runā; un pa vidu bezsakarā likt file caching - nafig? Quote Link to comment Share on other sites More sharing options...
Roze Posted February 19, 2017 Report Share Posted February 19, 2017 3 hours ago, analgins said: www-data ALL=(ALL) NOPASSWD: /usr/bin/python, /var/www/Adafruit_Python_DHT/examples/AdafruitDHT.py visticamāk, uz konkrēto skriptu varēju arī nenorādīt, to vēl neesmu pārbaudījis.. Šobrīd tu esi atļāvis www-data izpildīt sudo python, kas no drošības viedokla nav diezko labi (protams, ja uz kastes nav citu lietotāju, kā arī nav publiska, tad pofig), bet nu ideja ir apmēram tāda, ka šadi www-data var palaist python, kas savukārt var izpildīt jebko ar root permisijām: sudo python -c 'import os;os.system("ls -la")' (drošības labad, lai kāds nepamēģina, nerakstīju 'rm -rf /') Attiecīgi nedaudz labāk būtu, ja nodzēstu to komatu starpā, bet šo parasti risina vai nu sudoers taisot Cmd_aliasus vai arī piemēram uztaisot .sh skriptu, kas satur konkrēto komandu un kuram ir tikai read/exec bet ne write tiesības konkrētajam lietotājam. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 20, 2017 Report Share Posted February 20, 2017 (edited) 54 minutes ago, daGrevis said: > Tu teici, ka gribi realtime statistiku, nu tad taisi cron skriptu, kas reizi 30 sec ielādē aktuālos datus Tas ir tieši pretēji real-time datiem - ik pēc 30 sekundēm pollot datus. ;D Izklausās ka nesaproti ko runā; un pa vidu bezsakarā likt file caching - nafig? Liec kaut reizi sekundē, bet viņa vajadzībām biežāk nevajag. File caching šajā gadījumā ļautu apiet permissions problēmu, in case you're dumb and didn't get that. Edited February 20, 2017 by jurchiks Quote Link to comment Share on other sites More sharing options...
analgins Posted February 20, 2017 Author Report Share Posted February 20, 2017 6 hours ago, Roze said: Šobrīd tu esi atļāvis www-data izpildīt sudo python, kas no drošības viedokla nav diezko labi (protams, ja uz kastes nav citu lietotāju, kā arī nav publiska, tad pofig), bet nu ideja ir apmēram tāda, ka šadi www-data var palaist python, kas savukārt var izpildīt jebko ar root permisijām: sudo python -c 'import os;os.system("ls -la")' (drošības labad, lai kāds nepamēģina, nerakstīju 'rm -rf /') Attiecīgi nedaudz labāk būtu, ja nodzēstu to komatu starpā, bet šo parasti risina vai nu sudoers taisot Cmd_aliasus vai arī piemēram uztaisot .sh skriptu, kas satur konkrēto komandu un kuram ir tikai read/exec bet ne write tiesības konkrētajam lietotājam. Taisot sh skriptu, Tu biji domājis, ka to izpilda piemēram kā lietotājs pi un tad www-data novāc atgrieztos datus, pareizi sapratu ? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted February 20, 2017 Report Share Posted February 20, 2017 sh skriptu var izpildīt arī ar sudo jebkurš cits lietotājs, bet jā, var arī tas pats "pi". Galvenais saglabāt failu ar read permisijām citiem lietotājiem, un tad arī www-data tam varēs piekļūt. Quote Link to comment Share on other sites More sharing options...
Roze Posted February 20, 2017 Report Share Posted February 20, 2017 11 hours ago, analgins said: Taisot sh skriptu, Tu biji domājis, ka to izpilda piemēram kā lietotājs pi un tad www-data novāc atgrieztos datus, pareizi sapratu ? Nē es to biju domājis tā - pretēji tam, lai dotu tiesības uz 'python', kas principā ļauj caur valodu/interpretatoru darbināt jebko citu ar root privilēģijam, to dara apmēram šādi: 1. Uztaisa shell skriptu blabla.sh, kurā ir iekšā 'python tavsvails.py' (faktiski shellskripta vietā var izmantot arī pašu .py failu, ja viņam sākumā norāda caur ko tas jādarbina (piem. #!/usr/bin/python)) 2. Pārliecinās, ka konkrētajam lietotājam nav rakstīšanas tiesības failā (visvienkāršāk, piemēram, ir izveidot (vai nomainīt) ar root lietotāja un uzlikt chmod 700) 3. sudoers failā ieliek tikai šo .sh vai .py skriptu, tādējādi nav īpaši tālāk jādomā vai konkrētais lietotājs tīši vai netīši spēj palaist kaut ko vēl, kas viņam nepienākas .. Šis protams vairāk būtiski kaut kādās vairāklietotāju vidēs, bez tam mūsdienās modernāka pieeja ir darbināt šādas "aplikācijas" virtualizēt izolētos konteineros, piemēram, docker, LXC u.c. kur tu vari mierigi aplikāciju darbināt procesus kaut vai zem root lietotāja īpaši neiespringstot, ka tie var ietekmēt pamatsistēmu (protams, tur atkal iespējamas citas ķeskas ar tiešu piekļuvi hardwarei (šajā gadījumā sensoriem)). Vārdu sakot, tikai pārdomas par tēmu .. p.s. es piekrītu arī šeit izteiktajam viedoklim ka Tavā gadījumā būtu labāk: 1. darbināt to skriptu no tā paša 'pi' lietotāja un izvades datus vienkārši ierakstīt kādā teksta failā - ja pietiek, ka tas updeitojas ne biežāk kā 1x minūtē, tad var caur cron, ja vajag biežāk, tad var palaist fonā (./skripts.sh &) vienkārši bash skriptu ar while loopu un sleep timeoutu, piem.: #!/bin/bash while [ 1 ]; do sudo python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12 > /var/www/sensor.txt sleep 5 done 2. No php lasīt tikai konkreto teksta failu Tādējādi nebūs nepieciešams ņemties un dot apaches lietotājam kaut kādus sudo utt, kā arī var labāk kontrolēt piekļuvi sensor datiem/atmiņai utt, proti nav iespējams variants ka atver http lapu, uzliek pirkstu uz F5 un Pi nokaras tāpēc, ka dzīvajā palaisti ziljons sudo python skripti, kas visi mēģina bakstīt sensoru. Quote Link to comment Share on other sites More sharing options...
analgins Posted February 20, 2017 Author Report Share Posted February 20, 2017 3 hours ago, Roze said: Nē es to biju domājis tā - pretēji tam, lai dotu tiesības uz 'python', kas principā ļauj caur valodu/interpretatoru darbināt jebko citu ar root privilēģijam, to dara apmēram šādi: 1. Uztaisa shell skriptu blabla.sh, kurā ir iekšā 'python tavsvails.py' (faktiski shellskripta vietā var izmantot arī pašu .py failu, ja viņam sākumā norāda caur ko tas jādarbina (piem. #!/usr/bin/python)) 2. Pārliecinās, ka konkrētajam lietotājam nav rakstīšanas tiesības failā (visvienkāršāk, piemēram, ir izveidot (vai nomainīt) ar root lietotāja un uzlikt chmod 700) 3. sudoers failā ieliek tikai šo .sh vai .py skriptu, tādējādi nav īpaši tālāk jādomā vai konkrētais lietotājs tīši vai netīši spēj palaist kaut ko vēl, kas viņam nepienākas .. Šis protams vairāk būtiski kaut kādās vairāklietotāju vidēs, bez tam mūsdienās modernāka pieeja ir darbināt šādas "aplikācijas" virtualizēt izolētos konteineros, piemēram, docker, LXC u.c. kur tu vari mierigi aplikāciju darbināt procesus kaut vai zem root lietotāja īpaši neiespringstot, ka tie var ietekmēt pamatsistēmu (protams, tur atkal iespējamas citas ķeskas ar tiešu piekļuvi hardwarei (šajā gadījumā sensoriem)). Vārdu sakot, tikai pārdomas par tēmu .. p.s. es piekrītu arī šeit izteiktajam viedoklim ka Tavā gadījumā būtu labāk: 1. darbināt to skriptu no tā paša 'pi' lietotāja un izvades datus vienkārši ierakstīt kādā teksta failā - ja pietiek, ka tas updeitojas ne biežāk kā 1x minūtē, tad var caur cron, ja vajag biežāk, tad var palaist fonā (./skripts.sh &) vienkārši bash skriptu ar while loopu un sleep timeoutu, piem.: #!/bin/bash while [ 1 ]; do sudo python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12 > /var/www/sensor.txt sleep 5 done 2. No php lasīt tikai konkreto teksta failu Tādējādi nebūs nepieciešams ņemties un dot apaches lietotājam kaut kādus sudo utt, kā arī var labāk kontrolēt piekļuvi sensor datiem/atmiņai utt, proti nav iespējams variants ka atver http lapu, uzliek pirkstu uz F5 un Pi nokaras tāpēc, ka dzīvajā palaisti ziljons sudo python skripti, kas visi mēģina bakstīt sensoru. patiesībā, mana pati pirmā doma bija kaut kas līdzīgs rakstīšanai failā.. long story short, ir py skripts kas dara sekojošas lietas 1) vāc datus no sensoriem, raksta tos Round Robin Database iekšā šo visu, šis cikls atkārtojas ar minutes intervālu 2) lasa config.ini kurā no php es ievadu mainīgos un py skripts rīkojas atbilstoši un saslēdz vai atslēdz relejus mana problēma pirmajā momentā bija tāda ka nevarēju atrast normālu veidu kā ierakst'tit konkrētās vērtības vienā failā (vienā, jo man nepatīk bardaks ar failiem), līdz ar to radas doma to izpildīt dzīvajā.. Realitātē, tagad ir radies sava veida pārbaude sensoriem, jo esošais skripts, mēģinot nolasīt sensorus - ja tas izdodas viss ok, bet ja neizdodas nolasīt kādu no sensoriem, skripts tiek apturēts pavisam.. Tad tagad ir iespēja pa tiešo bez python skriptiem paskatīties vai visi sensori atbild un izvada vērtības, kas būtu pagrūti, ja tie tiktu lasīti failā Kā novērst šo nepilnību un turpināt python koda izpildi arī pēc tam kad kāds no sensoriem nav ticis nolasīts man ir aizdomdas.. ganjau safixēšu.. 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.