2010-10-29 9 views

risposta

15

È possibile impostare una variabile di ambiente nel crontab. Una riga come IS_CRON=1 può essere posizionata all'inizio di crontab, quindi controllare il programma php per get_env("IS_CRON") == 1.

Ovviamente, dovresti anche utilizzare i permessi dei file perché non sono così facili da aggirare. Se viene eseguito come parte di cron di root, chown root:root yourscript.php e chown 700 yourscript.php.


Come ircmaxell dice, sarebbe meglio per l'esecuzione come un utente diverso da root a patto che non ha bisogno dei permessi di root per quello che stai facendo. Stavo solo facendo una supposizione sul tuo setup.

+0

Questa sembra una soluzione perfetta ... Sono un po 'nuovo ai lavori cron ... come impostare la parte IS_CRON = 1? – Starlin

+0

@Starlin, inserisci questa riga all'inizio del tuo file crontab –

+0

Un utente può anche impostare le variabili di ambiente. – geoffspear

2

vorrei suggerire impostare una variabile d'ambiente all'interno del vostro crontab e poi controllando per questo all'interno del tuo script PHP

+0

per che cosa è stato utilizzato il voto negativo? – robjmills

+0

Non era mio, ma direi "per sicurezza dall'oscurità". Mentre il tuo suggerimento impedirebbe * l'esecuzione accidentale *, uno sbirciare nello script dirà a tutti quale variabile d'ambiente deve essere impostata (simile a un segno "per favore non eseguire manualmente").Le risposte con "imposta un utente separato per cronjobs e consentono solo all'utente l'accesso e l'esecuzione dello script" indirizzano la radice del problema (simile a un blocco che può essere sbloccato solo dall'utente specifico). – Piskvor

5

Probabilmente ci sono un certo numero di modi per farlo. In cima alla mia testa, direi che collocarlo in una directory di proprietà di root e leggibile solo da root potrebbe avvicinarsi al raggiungimento dell'effetto che si sta cercando.

Ci sono dei processi che stai cercando specificamente per limitare? In tal caso, utilizzando le autorizzazioni, renderlo non leggibile a nessuno di questi processi.

1

Creare un utente per i lavori cron e impostare le autorizzazioni dello script in modo che possa essere eseguito solo come questo utente. Naturalmente è necessario inserire lo script in crontab dell'utente, che è possibile eseguire accedendo come tale utente e eseguendo crontab. Semplicemente non dare la password di quell'utente a nessun altro utente ...

All'inizio pensavo anche di impostare una variabile di ambiente che impedisse l'esecuzione di questo script dal web ... Ma non inserisco lo script lo spazio in cui il server Web cerca le pagine per i siti Web, farebbe lo stesso.

E nulla impedisce a un utente casuale di impostare prima la variabile di ambiente e quindi di eseguire lo script.

8

Che ne dici di controllare lo script PHP se $_SERVER['REMOTE_ADDR'] è vuoto e, in caso contrario, lasciare uscire lo script senza eseguire ulteriori operazioni.

Problemi correlati