2010-10-29 14 views

Respuesta

15

Puede establecer una variable de entorno en su crontab. Una línea como IS_CRON=1 se puede colocar al comienzo de su crontab, luego verifique su programa php para get_env("IS_CRON") == 1.

Por supuesto, también debe usar los permisos de archivos, ya que no se pueden omitir fácilmente. Si esto se ejecuta como parte del cron de raíz, chown root:root yourscript.php y chown 700 yourscript.php.


Como ircmaxell dice que sería mejor que se ejecute como un usuario distinto de root asumiendo que no necesita permisos de root para lo que está haciendo. Solo estaba adivinando tu configuración.

+0

Parece una solución perfecta ... Estoy un poco nuevo en trabajos de cron ... ¿cómo podría configurar el elemento IS_CRON = 1? – Starlin

+0

@Starlin, simplemente ponga esa línea al comienzo de su archivo crontab –

+0

Un usuario también puede establecer variables de entorno. – geoffspear

2

Yo sugeriría establecer una variable de entorno dentro de su crontab y luego la comprobación de esto dentro de su script PHP

+0

¿Cuál fue el voto negativo? – robjmills

+0

No era mío, pero yo diría "por seguridad por oscuridad". Si bien su sugerencia evitaría la ejecución * accidental *, una ojeada a la secuencia de comandos le dirá a cualquiera qué variable de entorno necesita establecerse (similar a un letrero "no ejecute manualmente").Las respuestas con "configurar un usuario por separado para cronjobs y solo permiten que el usuario acceda y ejecute el script" abordan el origen del problema (similar a un bloqueo que solo puede desbloquear el usuario específico). – Piskvor

5

Probablemente hay varias maneras de hacer esto. Por encima de todo, diría que colocarlo en un directorio propiedad de root, y que solo pueda leerse por root, podría acercarse a lograr el efecto que está buscando.

¿Hay algún proceso que esté buscando específicamente para restringirlo? Si es así, usando permisos, no sea legible para ninguno de esos procesos.

1

Cree un usuario para tareas cron y establezca permisos de la secuencia de comandos para que solo se pueda ejecutar como este usuario. Por supuesto, debe colocar la secuencia de comandos en el crontab de ese usuario, lo que puede hacer iniciando sesión como ese usuario y ejecutando crontab. Simplemente no le dé la contraseña de ese usuario a cualquier otro usuario ...

Al principio también estaba pensando en establecer una variable de entorno que evitaría ejecutar este script desde la web ... Pero simplemente no poner el script en el espacio donde el servidor web busca páginas para sitios web, haría lo mismo.

Y nada impide que un usuario aleatorio configure primero la variable de entorno y luego ejecute la secuencia de comandos.

8

¿Qué tal si tu script PHP verifica si $_SERVER['REMOTE_ADDR'] está vacío, y si no lo está, haz que el script salga sin hacer nada más?

Cuestiones relacionadas