Portál AbcLinuxu, 10. května 2025 01:47

Dotaz: cron a PHP

8.4.2009 16:14 david
cron a PHP
Přečteno: 500×
Odpovědět | Admin

dobrý den, mám dotaz

zadal jsem do cronu příkaz na spuštění

 00 16 * * * root lynx -dump http://www.xyz.ccz/platba.php 

a bohuzel uvnitř tohoto php kodu je systemovy přikaz
system(´iptables -t nat .....´)
který se me pohužel nespustí, nevíte prosím radu?
dekuji david
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.4.2009 16:20 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: cron a PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jsou dvě možnosti -- buď se vám nespouští ten příkaz z cronu, nebo je chyba ve skriptu na serveru. Zjistíte to snadno -- zkuste adresu zadat ručně do prohlížeče a ověřte si, zda se skript na serveru spustil. Aby vám šlo spustit iptables na serveru, musí webserver běžet pod rootem.
8.4.2009 16:23 kraken
Rozbalit Rozbalit vše Re: cron a PHP
sudo je riesenie....
8.4.2009 16:25 dejvic | skóre: 3
Rozbalit Rozbalit vše Re: cron a PHP

jak prosím se sudo?

8.4.2009 16:29 kraken
Rozbalit Rozbalit vše Re: cron a PHP
man sudoers
syntax: user-pod-ktorym-bezi-webserver ALL=(ALL) NOPASSWD: /sbin/iptables

zjednodusene ukazky:
apache ALL=(ALL) NOPASSWD: /sbin/iptables
www-data ALL=(ALL) NOPASSWD: /sbin/iptables
8.4.2009 20:25 david
Rozbalit Rozbalit vše Re: cron a PHP

muze me nekdo prosim prelozit do s tim prikazem sudo.

moc se v linuxu nevyznam, potrebuji prave na jednom serveru zprovoznit pravidelné spousteni toho skriptu

 

tento prikaz nejde

 

$shellOutput = system('iptables -t nat -I PREROUTING -p tcp --dport 80 -s ${'.trim($row_usr["ip_1"]).'} -j DNAT --to-destination 10.0.0.1', $retval);
 

uživatel ktery spousti webserver je www-data

 

dekuji moc

8.4.2009 16:24 dejvic | skóre: 3
Rozbalit Rozbalit vše Re: cron a PHP

příkaz z cronu se vykoná, protože vykonává další činnosti které pak vidim v logu, tak usuzuji ze to bězi správně, krom tedy toho iptables, to se nespusti.

8.4.2009 16:31 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: cron a PHP
Pak je problém v tom, že web server (správně) neběží s právy roota. Nejlepší bude použít pro spuštění sudo, také byste mohl spuštění iptables delegovat do nějakého externího procesu, který by se spouštěl z binárky se suid bitem, nebo v nejhorším případě provozovat celý web server pod rootem.
8.4.2009 21:26 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: cron a PHP
Pak je navíc zbytečné pouštět ten lynx pod rootem.
In Ada the typical infinite loop would normally be terminated by detonation.
8.4.2009 21:50 david
Rozbalit Rozbalit vše Re: cron a PHP

tak jsem vlozil do sudoers

www-data ALL=(ALL) NOPASSWD: /sbin/iptables

 

a upravil prikaz v php kodu

$shellOutput = system('sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -s ${'.trim($row_usr["ip_1"]).'} -j DNAT --to-destination 10.0.0.1', $retval);

a stale nic.

 

tak jsem jeste kouknul do error logu apache a tam vylezlo toto

sh: ${172.20.13.20}: bad substitution

 

tak jsem z toho uz magor, prosiiim help, dekuji moc.

david

8.4.2009 22:00 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: cron a PHP
ze by { a } ?
Překladač ti nikdy neřekne: "budeme kamarádi"
8.4.2009 22:30 david
Rozbalit Rozbalit vše Re: cron a PHP

díky - už to píše správný příkaz

ale zase chyba v errol.logu

sh: iptables: command not found

? díky

8.4.2009 22:32 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cron a PHP
/sbin/iptables
(www-data nemá /sbin v $PATH)
8.4.2009 22:30 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cron a PHP
$shellOutput = system('sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -s '.trim($row_usr["ip_1"]).' -j DNAT --to-destination 10.0.0.1', $retval);
8.4.2009 22:43 david
Rozbalit Rozbalit vše Re: cron a PHP

tak super uz jsem zase dále :-)

>>> sudoers file: syntax error, line 18 <<<
sudo: parse error in /etc/sudoers near line 18

 

obsah sudoers

 

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root        ALL=(ALL) ALL
www-data     ALL=(ALL) NOPASSWD: /sbin/iptables

9.4.2009 09:11 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: cron a PHP

Manuálová stránka sudoers je poměrně nepřehledná, ale na webu jsou mraky návodů, např. http://www.cyberciti.biz/tips/allow-a-normal-user-to-run-commands-as-root.html . Pokud neumíš anglicky, zkus některý z překladových nástrojů, např. Google Translate Firefox extension, která vrátí http://translate.google.com/translate?hl=en&sl=en&tl=cs&u=http://www.cyberciti.biz/tips/allow-a-normal-user-to-run-commands-as-root.html

Řekl bych, že na posledním řádku nemá být (ALL) za rovnítkem.

9.4.2009 08:20 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: cron a PHP
To je zbytečné vždy, protože Lynx k serveru přistupuje přes HTTP, takže úplně stejně ten skript můžete spustit z Windows na druhém konci světa. A tam byste roota od toho serveru sháněl těžko...
9.4.2009 08:49 david
Rozbalit Rozbalit vše Re: cron a PHP

takže tim myslite ze se to nepovede rozebehnout?

9.4.2009 09:12 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: cron a PHP
Ne, tím myslím, že vůbec nezáleží na tom, v jakém prohlížeči tu příslušnou stránku otevřete. Rozběhnout se to jistě podaří, stačí si nastudovat, jak funguje a jak se konfiguruje sudo.
9.4.2009 09:15 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: cron a PHP

Proč by to nešlo, když nastavíš ty sudoers? Samozřejmě že uživatel, pod kterým běží www klient, je nepodstatný, ten jen po síti iniciuje tu akci. Klíčový je uživatel, pod kterým běží www server. Pokud mu přes sudo umožníš provádět danou akci pod rootem, musí to fungovat.

Nejlepší je sudo testovat rovnou pod daným uživatelem. Až to rozchodíš, můžeš to ladit v PHP. V ubuntu se přepni na roota přes

sudo -i

Pak se přepni na www-data přes

su www-data

A můžeš testovat konfigurace sudoers. Je to jednoduché, není důvod to vzdát.

9.4.2009 09:19 david
Rozbalit Rozbalit vše Re: cron a PHP

tak pánové všem děkuji za tipy, už se povedlo,

vše už bylo ok, jen to stačilo otevrit pres visudo a ulozit.

nechapu ale funguje :-)

 

díky všem za ochotu a dobré rady. david

21.4.2009 10:55 dejvic | skóre: 3
Rozbalit Rozbalit vše Re: cron a PHP

Vazeni stale se me nedari

spoustim z cronu skript ve kterem je prikaz

$shellOutput = system('sudo /sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -s '.trim($row_usr["ip_1"]).' -j DNAT --to-destination 10.0.0.1', $retval);
 

v error.logu apache2 me to napise at se kouknu na iptables -h

jinou hlasku ne.

 

a kdyz si spustim skript z prikazove radky tak to napise

BAD ARGUMENT 'DNAT' BAD ARGUMENT 'DNAT'

 

Přitom samotný příkaz když si pustim tak funguje v pořadku, nevite prosim radu.

dekuji david

21.4.2009 14:28 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: cron a PHP

Ten příkaz si naformátuj předem mimo volání system() a vypiš přes print. Uvidíš tak, co se opravdu volá, můžeš si jej i zkusit spustit bokem. Složitější skládání příkazu a jeho spuštění bez předchozí bez kontroly (navíc pod rootem !!) není úplně nejlepší cesta.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.