Jump to content
php.lv forumi

analgins

Reģistrētie lietotāji
  • Posts

    33
  • Joined

  • Last visited

Posts posted by analgins

  1. 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..

  2. 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 ?

  3. 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

     

  4. 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

  5. 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

  6. 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.

  7. 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 ?

  8. 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..

  9. 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 ?

  10. š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!!

  11. 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..

  12. Es neesmu spēcīgs iekš php, dokumentāciju lasīju, to uzgāju vienā no googles rezultātiem, bet man nelīp kopā tas kods, nesaprotu kur ir problēma.

    Patreiz iekš php faila ir sekojošais

    <?php
    $out = array();
    echo exec('python.sh',$out);
    echo $out;
    ?>

    iekš python.sh ir sekojošais

    sudo python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 12

    tas protams atgriež tukšu lapu ar tekstu Array

    python.sh skriptam chmods ir 755 un normālā situācijā, izpildot to no konsoles tas atgrieztu augstāk minēto rindiņu.

  13. Sveiki!

    Man ir sekojoša problēma, neprotu atgūt datus ko atgriež python kods no konsoles.

    Situācijas apraksts:

    Raspberry PI ir pievienoti seši mitruma / temperatūras sensori un vēlos dzīvos datus atēlot admina panelī, lai nebūtu jāčeko tabulas kuras tiek atgriestas no RRD kā png faili.

    Lai nolasītu sensorus no konsoles jāizmanto adafruit komanda - sudo python Adafruit_DHT.py <sensora tips> <pins>

    tas viss forši strādā un konsolē atgriež šādu tekstu  - Temp=19.7*  Humidity=35.5%

     

    Viss ko es vēlos, lai šādu pašu tekstu man izmet php lapā, mocos ar shell_exec  un exec, neatgriež neko līdzīgu tam ko no konsoles

    uztaisīju pat shell skriptu kurā ir python komanda uz failu - tas pats, 0 rezultāta, konsolē palaižot šo shell skriptu viss notiek.. Principā man trūkst variantu kā to korektāk izdarīt.. Saprotams ka katram sensoram taisit savu shell skritpu kuru izsaukt no php ir nekorekti, perfekti būtu to python komandrindu izpildīt no paša php un turpat ar echo parādīt šo vērtību..

     

    Cerams esmu izteicies pietiekami skaidri un saprotami..

    Ja kādam ir kas iesakāms tad lūdzu, principā der arī super nedroši varianti jo raspberrijs pēcāk dzīvos autonomi bez interneta..

     

     

  14. esmu vienmer no dazhiem failiem izaudzis lidz 10+ un tas nekam isti neder, jautajums ir vai var nospiezhot uz konkretu linku aktivizet konkretu select`u kas izvadis tabulu, vai vaig taisit jaunu failu kura noradits select`s un pec tam failu norada konkreta vieta kur jaizvada tabula ? tas liktos nedaudz parocigak viena faila sataisit sekcijas pa konkretam tabulam un tad izvilkt ka to dara pascal ar label`iem (ja nekludos, sho valodu skola nesen esmu sacis apgut..)

  15. :) loti labi jus saprotu, macit jauninjos "ka ar karoti" ir gruti, jo tie nekad nesaprot ko kas un ka... pats tam esmu gajis cauri citas sferas, bet vai tiesam pasi lasijat visus manualjus reizes 10 pirms sakat uzdot muljkjigus jautajumus ? nedomaju gan :)

     

    runajot par ieprieksejo postu (manu) tad vis butu skaistak, un linkus savienotu ja nebutu tas errors, kad ieloginojas, tur aciim redzami kkas smagi trukst manuprat..

     

    ediite: jums par prieku esmu ljoti pavirzijies uz prieksu, nu vismaz manuprat, sanak ielogoties izlogoties, atlicis uztaisit dazhas podzinjas, kas apdeitotu dzestu tabulu..

     

    ir divi jautajumi

    1) kad raksta paroli neparadas *** bet gan teksts, ka to parveidot par **? ka ta lieta saucas ?

    2) ir table.php ko inkludoju kada faila kad ieloginojas, ka panakt lai to failu nevaretu atvert kamer nav ielogojies? vai shada ideja ir aplama un visu vaidzetu apvienot viena faila? nu es domaju to tabulu ar to failu kas ir redzams kad ielogojas.. patiesiba tiko parbaudiju failu kura stav vis saistits ar tabulu un to ari var atvert uzrakstot parastu linku... tur butu jaliek parbaudes vai ir ielogojies lai tas ta nenotiktu ?

  16. mhmm.. nuu taa ko gribu teikti ir datubazi palaboju nedaudz, sanaca insertot sho un to.. redzkur kas sanaca un ka veletos pielabot klus daudz vieglak..

     

    http://sctg.ihack.lv/pkp/ table.php ari var apskatit, lai tvertu domu ko gribu

    varat izmantot loginu "usr/usr1" lai apskatitu eroru :(

     

    // Check if session is not registered , redirect back to main page.
    // Put this code in first line of web page.
    <?
    session_start();
    if(!session_is_registered(myusername)){
    header("location:.php");
    }
    ?>
    
    <html>
    <body>
    Login Successful
    </body>
    </html>

     

    ieloginojoties ja izskatitos apmeram shadi butu tads ka gala merkjis ka visam vaidzetu izskatities.. http://www.bildez.lv/bildes/analgins/pma/orig/1222290493.jpg

  17. visi krutie dzeki lasa manualjus, un es to tiesam dariju un daru, kopeju tos insert into, bet beigas ta ari nekas nesanaca, lidz 5as minutes atpakal sanaca, un tikai tapec ka cita tutoriali sintakse bija savadaka >.< ...

     

    isti neesmu sapratis - visus shos FROM INSERT UPDATE DELETE un citus var izmantot ieks php, pareizi ?

     

    tagad ar insertu vis kartiba sapratu ka tas darams, bet macit citiem ka caur phpmyadmin tas darams taks nebutu forshi, pietam ja vel jaievada ~100 rindindas katra pa 4iem parametriem... to visu vaidzetu izdomat caur php :)

  18. laikam jau :)

     

     

    ediiite:

     

    lasiju to lapu, centos saprast, meginaju insertot.. nekas neizdevas, man liekas ka rakstu nepareizi kautgan varetu but ari pareizi ..

     

    SELECT * FROM `auth` PROCEDURE ANALYSE()
    INSERT INTO `username` usr
    INSERT INTO `password` pass1

    errors ko sanjemu

    Error
    
    SQL query: Documentation
    
    SELECT *
    FROM `auth`
    PROCEDURE ANALYSE ( ) INSERT INTO `username` usr
    INSERT INTO `password` pass1
    
    MySQL said: Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `username` usr
    INSERT INTO `password` pass1' at line 2

×
×
  • Create New...