Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: PHP exec, bash, visudo - nejde mi spojit soubory  (Přečteno 2575 krát)

DuckD

  • Stálý člen
  • **
  • Příspěvků: 878
  • Open Srdcař
    • www.duckd.cz
PHP exec, bash, visudo - nejde mi spojit soubory
« kdy: 22 Ledna 2014, 16:53:55 »
Ahoj, mám takovou zlou, nepěknou věc:
Pokouším se spustit bash skript v PHP přes funkci exec a nejdou mi spojit soubory přes CAT i když je příkaz ve VISUDO:

VISUDO:
Kód: [Vybrat]
www-data ALL=NOPASSWD: /bin/cat
www-data ALL=NOPASSWD: /bin/program


PHP: (nefunguje přesměrování přes >>)
Kód: [Vybrat]
exec('for i in txt/*; do sudo cat $i >> output/test.txt; done');
Log mi hlásí:
Citace
line XX: output/test.txt: Permission denied

Pokud pracuji pře program který definuje vstup a výstup, tak to funguje (takže mám dobře nakonfigurován php.ini a visudo)
Kód: [Vybrat]
exec('program -vstup soubor.txt -vystup temp.txt');

Jak na to? Prosím o radu...
8) Lidé žijí v souborech. ===>> LINUXTERO <<=== Pravidelná dávka tvého linuxtera!

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #1 kdy: 22 Ledna 2014, 18:45:28 »
cat se ti pravdepodobne spusti s potrebnymi pravy, ale na presmerovani vystupu uz prava nejsou, tj nemas prava zapisovat do toho souboru.

Mohlo by to jit obejit tak, ze si udelas program (skript), ktery bude jen spojovat soubory (treba pres cat), a ten program budes execem spoustet v phpku pres sudo. Samozrejme www-data musi mit v sudoers povoleno pouzit sudo pro tento program.
Tak dlouho se vrzá s Acerem, až se displej utrhne.

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #2 kdy: 22 Ledna 2014, 21:05:31 »
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
Kód: [Vybrat]
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
Kód: [Vybrat]
exec("(cat /var/log/syslog) | (grep 'error')");
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #3 kdy: 22 Ledna 2014, 21:10:33 »
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
Kód: [Vybrat]
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
Kód: [Vybrat]
exec("(cat /var/log/syslog) | (grep 'error')");


A co ..?
Kód: [Vybrat]
exec("sh -c \"cat /var/log/syslog | grep error\"");
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #4 kdy: 22 Ledna 2014, 21:24:51 »
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
Kód: [Vybrat]
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
Kód: [Vybrat]
exec("(cat /var/log/syslog) | (grep 'error')");


A co ..?
Kód: [Vybrat]
exec("sh -c \"cat /var/log/syslog | grep error\"");

I to mi zlobilo :) Odzávorkoval jsem to a valilo to hned.
Drbal jsem se s tím tak dva měsíce nazpět :-D
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #5 kdy: 22 Ledna 2014, 22:48:17 »
je pravda, ze pajpovat jsem se v php bal. Radsi jsem na to napsal spesl skript :)
Tak dlouho se vrzá s Acerem, až se displej utrhne.

DuckD

  • Stálý člen
  • **
  • Příspěvků: 878
  • Open Srdcař
    • www.duckd.cz
Re:PHP exec, bash, visudo - nejde mi spojit soubory
« Odpověď #6 kdy: 23 Ledna 2014, 15:05:07 »
...
Mohlo by to jit obejit tak, ze si udelas program (skript), ktery bude jen spojovat soubory (treba pres cat), a ten program budes execem spoustet v phpku pres sudo. Samozrejme www-data musi mit v sudoers povoleno pouzit sudo pro tento program.

Myslel jsem si to. Poprvé, než jsem napsal příspěvek, mi to nešlo. Asi jsem někde udělal chybu. Ale teď už to jde.
Všem děkuju za rady!
8) Lidé žijí v souborech. ===>> LINUXTERO <<=== Pravidelná dávka tvého linuxtera!

 

Provoz zaštiťuje spolek OpenAlt.