Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: DuckD 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:
www-data ALL=NOPASSWD: /bin/cat
www-data ALL=NOPASSWD: /bin/program
PHP: (nefunguje přesměrování přes >>)
exec('for i in txt/*; do sudo cat $i >> output/test.txt; done');
Log mi hlásí:
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)
exec('program -vstup soubor.txt -vystup temp.txt');
Jak na to? Prosím o radu...
-
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.
-
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
exec("(cat /var/log/syslog) | (grep 'error')");
-
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
exec("(cat /var/log/syslog) | (grep 'error')");
A co ..? exec("sh -c \"cat /var/log/syslog | grep error\"");
-
Problém je jinde, php nedělá dobře to řetězení příkazů, příklad:
exec("cat /var/log/syslog | grep 'error'");
Nebude fungovat, je potřeba to přepsat takto:
exec("(cat /var/log/syslog) | (grep 'error')");
A co ..? 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
-
je pravda, ze pajpovat jsem se v php bal. Radsi jsem na to napsal spesl skript :)
-
...
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!