J'écris un script que je veux exécuter sans privilèges. Je veux que les erreurs rencontrées par le script soient enregistrées dans un fichier journal. Je n'ai pas le privilège d'en écrire un /var/log
. Et je ne veux pas en avoir un dans mon répertoire personnel.
Existe-t-il un emplacement où les scripts de l'espace utilisateur peuvent enregistrer des informations d'exécution? Quelle est la meilleure pratique pour avoir mes informations de journal de script /var/log
sans créer de problèmes de sécurité potentiels? J'hésite à définir uid / gid sur le script.
la source
syslog
est une routine de bibliothèque C, et C ++ peut appeler n'importe quel C en utilisantextern "C"
. D'autres langages fournissent souvent soit une liaison générique à quelque chose de C, soit des liaisons à des choses spécifiques, mais cela dépend de la langue.Si vous, en tant qu'utilisateur ordinaire, décidez d'exécuter un programme, l'emplacement naturel de ses journaux se trouve dans votre répertoire personnel. Votre répertoire personnel vous permet de stocker tous vos fichiers, qu'il s'agisse de journaux d'un programme que vous exécutez ou de toute autre chose.
Si le programme est exécuté dans le cadre du système, s'exécutant en tant qu'utilisateur système généralement dédié, alors l'emplacement naturel de ses journaux est
/var/log
. Créez un sous/var/log/myapp
- répertoire et donnez-lui les autorisations appropriées pour que votre application puisse y écrire.Si cela est pertinent et que votre système d'exploitation le permet, marquez le fichier journal comme ajouté uniquement. Seul root peut le faire. Cela a l'avantage que si votre application est compromise, elle ne pourra pas effacer les journaux précédents, ce qui peut être très utile pour l'analyse judiciaire du compromis. Vous aurez besoin de l'intervention de root pour faire pivoter le journal:
chown
afin que le fichier journal ne puisse plus être ouvert par l'application,rename
le fichier journal, créez un nouveau fichier à ajouter uniquement avec la propriété appropriée, puis informez l'application d'ouvrir le nouveau fichier vide .Vous pouvez créer n'importe quel journal d'application dans les journaux système en appelant
logger(1)
ousyslog(3)
.la source
En règle générale, pour un démon, le fichier journal est créé,
root
puis les autorisations sont modifiées afin que l'utilisateur non privilégié puisse y écrire.logrotate
est ensuite configuré pour conserver les autorisations lors de la rotation.S'il s'agit d'une commande, et non d'un démon, connectez-vous à
/tmp
(en utilisant de préférencemktemp
) et informez l'utilisateur parSTDOUT
où le journal est allé.la source
&
pour éviter de retarder l'invite, mais démarrer dropbox écrit sur la console. Je redirige actuellement sa sortie vers/dev/null
, mais j'aimerais avoir un moyen de déboguer si dropbox ne démarre pas.daemonize
.chmod
. Habituellement,0644
ou0664
et la propriété de l'utilisateur / groupe est également remplacée par celle du démon qui devrait y écrire.J'ai l'impression que les programmes de l'espace utilisateur sont censés supprimer les journaux par défaut. J'ai vu divers programmes vider les journaux où bon leur semble, et ce n'est jamais particulièrement bienvenu sur mes systèmes; tendance à s'accumuler dans un endroit qui n'est jamais remarqué à moins que / jusqu'à ce qu'il devienne énorme.
Je préférerais qu'il y ait une place précise pour eux, je joue sur mon système en essayant de leur trouver une place stable.
Ma première idée a été d'utiliser
/var/run/user/$UID/log
, mais j'ai trouvé que sur mon système, c'est un montage TMPFS, pas assez grand ou vraiment bon pour une utilisation avec des journaux.Créez une place pour eux
Comme je ne comprends pas assez bien / var / run / user pour l'intégrer, j'ai choisi de l'émuler à la main, pour l'utilisateur 1000.
Je recommanderais de m'en tenir au SPC FHS / var / log pour la structure dans ce dossier, mais la spécification de forme libre donc il n'y a pas grand-chose à respecter.
Logrotate Config
Il n'y a aucune rotation de journal existante sur ce répertoire fourni par votre système, je recommande d'en créer un pour votre système:
Ci-dessous mon précédent / var / run / user / 1000 / log post, je ne peux pas le recommander à moins que vous sachiez vraiment ce que vous faites (et si vous le faites, dites-moi comment le faire aussi!)
peut-être comme suit, mais je viens de l'inventer parce que cela avait du sens pour moi.Intégration avec / var / log / user / 1000:
la source