Estoy escribiendo un script que quiero ejecutar sin privilegios. Quiero que los errores que encuentra el script se registren en algún archivo de registro. No tengo privilegios para escribir uno /var/log
. Y no quiero tener uno en mi directorio personal.
¿Existe una ubicación donde los scripts de espacio de usuario pueden registrar información de tiempo de ejecución? ¿Cuál es la mejor práctica para tener la información de registro de mi script /var/log
sin crear ningún problema de seguridad potencial? Dudo en establecer uid / gid en el script.
fuente
syslog
es una rutina de biblioteca C, y C ++ puede llamar a cualquier C usandoextern "C"
. Otros lenguajes a menudo proporcionan enlaces genéricos a cualquier cosa C, o enlaces a cosas específicas, pero depende del lenguaje.Si usted, como usuario ordinario, decide ejecutar un programa, el lugar natural para sus registros está en su directorio de inicio. Su directorio de inicio está destinado a que almacene todos sus archivos, ya sean registros de un programa que ejecute o cualquier otra cosa.
Si el programa se ejecuta como parte del sistema, ejecutándose como un usuario del sistema típicamente dedicado, entonces el lugar natural para sus registros está en
/var/log
. Cree un subdirectorio/var/log/myapp
y dele los permisos adecuados para que su aplicación pueda escribir allí.Si es relevante y su sistema operativo lo permite, marque el archivo de registro solo como anexo. Solo root puede hacer esto. Esto tiene la ventaja de que si su aplicación se ve comprometida, no podrá borrar registros anteriores, lo que puede ser muy útil para el análisis forense del compromiso. Necesitará la intervención de root para rotar el registro: de
chown
modo que la aplicación,rename
el archivo de registro, ya no pueda abrir el archivo de registro, cree un nuevo archivo de solo agregado con la propiedad apropiada, luego notifique a la aplicación que abra el nuevo archivo vacío .Puede hacer que cualquier aplicación ingrese a los registros del sistema llamando
logger(1)
osyslog(3)
.fuente
En general, para un demonio, el archivo de registro se crea para
root
entonces, los permisos se modifican para que el usuario no privilegiado pueda escribir en él.logrotate
luego se configura para preservar los permisos durante la rotación.Si se trata de un comando, no de un demonio, inicie sesión en
/tmp
(preferiblemente usandomktemp
) e informe al usuario aSTDOUT
dónde fue el registro.fuente
&
para evitar retrasar el mensaje, pero al iniciar Dropbox escribe en la consola. Actualmente estoy redirigiendo su salida a/dev/null
, pero me gustaría tener alguna forma de depurar si Dropbox no se inicia.daemonize
.chmod
. Por lo general,0644
o0664
y la propiedad del usuario / grupo también cambia a la del demonio que se espera que le escriba.Tengo la impresión de que se espera que los programas de espacio de usuario descarten los registros de forma predeterminada. He visto varios programas volcar registros donde quieran, y nunca es particularmente bienvenido en mis sistemas; tiende a acumularse en un lugar que nunca se nota a menos que / hasta que se vuelva enorme.
Preferiría si hubiera un lugar definido para ellos, estoy jugando en mi sistema tratando de encontrar un lugar estable para ellos.
Mi primera idea fue usar
/var/run/user/$UID/log
, pero descubrí que en mi sistema, eso es un montaje TMPFS, no lo suficientemente grande o realmente bueno para usar con registros.Crea un lugar para ellos
Como no entiendo / var / run / user lo suficientemente bien como para integrarme con él, he elegido emularlo a mano, para el usuario 1000.
Recomendaría seguir el FHS / var / log spc para la estructura dentro de esta carpeta, pero la forma libre de especificaciones, por lo que no hay mucho que cumplir.
Logrotate Config
No hay rotación de registro existente en este directorio proporcionado por su sistema, le recomiendo crear uno para su sistema:
A continuación se muestra mi publicación anterior / var / run / user / 1000 / log, no puedo recomendarla a menos que realmente sepa lo que está haciendo (¡y si lo hace, dígame cómo hacerlo también!)
tal vez de la siguiente manera, pero lo inventé porque tenía sentido para mí.Integrar con / var / log / user / 1000:
fuente