Где программы пользовательского пространства должны сохранять свои журналы?

Я пишу сценарий, который я хочу запустить без привилегий. Я хочу, чтобы ошибки, с которыми скрипт сталкивается, регистрируются в каком-то файле журнала. У меня нет привилегий для записи одного в /var/log . И я не хочу иметь его в моем домашнем каталоге.

Есть ли место, где сценарии пользовательского пространства могут регистрировать информацию о времени выполнения? Какова наилучшая практика для того, чтобы информация о журнале скриптов в /var/log не создавала каких-либо потенциальных проблем безопасности? Я не решаюсь установить uid / gid на скрипт.

4 Solutions collect form web for “Где программы пользовательского пространства должны сохранять свои журналы?”

Вы не можете писать в / var / log как обычный пользователь, но демон syslog сделает это за вас, если вы спросите. Если вы хотите регистрировать сообщения в стандартных системных журналах (например, /var/log/syslog ), утилита 4.4BSD может быть доступна в вашей системе. Он установлен по умолчанию на Debian и находится в пакете bsdutils на производных Debian.

Вы получите преимущество любых ранее существовавших инструментов поворота, обслуживания и мониторинга журналов, с недостатком необходимости в привилегиях для чтения системных журналов и смешивания сообщений вашего сценария с сообщениями из других программ.

 $ logger Hello $ echo Goodbye | logger $ sudo tail -2 /var/log/syslog Feb 19 21:16:15 debian-host jander: Hello Feb 19 21:16:21 debian-host logger: Goodbye 

Доступно несколько вариантов конфигурации; вы можете прочитать больше в man logger .

Если вы, как обычный пользователь, решаете запустить программу, естественное место для ее журналов находится в вашем домашнем каталоге. Ваш домашний каталог предназначен для хранения всех ваших файлов, будь то журналы вашей программы или что-то еще.

Если программа выполняется как часть системы, работающей как обычно выделенный системный пользователь, тогда естественное место для ее журналов находится в /var/log . Создайте подкаталог /var/log/myapp и дайте ему соответствующие разрешения, чтобы ваше приложение могло там писать.

Если это необходимо, и ваша операционная система позволяет это, пометьте файл журнала как append-only. Только root может это сделать. Это имеет то преимущество, что если ваше приложение скомпрометировано, оно не сможет стереть прошлые журналы, что может быть очень полезно для судебного анализа компромисса. Вам потребуется вмешательство root для поворота журнала: chown чтобы файл журнала больше не мог быть открыт приложением, rename файл журнала, создать новый файл только для присоединения с соответствующим правом собственности, а затем уведомить приложение о открытии нового пустой файл.

Вы можете сделать любой журнал приложений в системных журналах, вызвав logger(1) или syslog(3) .

Обычно для демона файл журнала создается с помощью root тогда разрешения изменяются так, чтобы пользователь, не имеющий привилегий, мог писать на него. logrotate затем настраивается для сохранения разрешений во время вращения.

Если это команда, а не демон, войдите в /tmp (желательно с помощью mktemp ) и сообщите пользователю через STDOUT где журнал вышел.

Предполагается, что я покажут, что программы пользовательского пространства будут отбрасывать журналы по умолчанию. Я видел, как различные программы записывают журналы, где бы они ни находились, и никогда не приветствуются в моих системах; стремясь к наращиванию в каком-то месте, которое никогда не замечается, пока / пока оно не станет огромным.

Я бы предпочел, чтобы для них было определенное место, я играю в своей системе, пытаясь найти для них стабильное место.

Моя первая идея заключалась в том, чтобы использовать /var/run/user/$UID/log , но обнаружил, что в моей системе это TMPFS-mount, недостаточно большой или действительно хорош для использования с журналами.

Создайте для них место

Поскольку я не понимаю / var / run / user достаточно хорошо, чтобы интегрироваться с ним, я решил эмулировать его вручную, для пользователя 1000.

 # mkdir /var/log/user # install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700 

Я бы порекомендовал придерживаться FHS / var / log spc для структуры внутри этой папки, но специальную свободную форму, чтобы ее было не так много.

Конфигурация Logrotate

В этой директории, предоставляемой вашей системой, нет существующего поворота журналов, я рекомендую создать ее для вашей системы:

 # /etc/logrotate.d/userlogs /var/log/user/*/log/*.log /var/log/user/*/log/**/*.log { daily missingok rotate 7 compress notifempty nocreate } 

Ниже мой предыдущий / var / run / user / 1000 / log сообщение, я не могу рекомендовать его, если вы действительно не знаете, что делаете (И если вы это сделаете, расскажите мне, как это сделать!)

может быть следующим образом, но я только что сделал это, потому что это имело смысл для меня.

 /var/run/user/1000/log/<app>.log /var/run/user/1000/log/<app>/<context>.log 

Интеграция с / var / log / user / 1000:

 # Integrate with above /var/run/user, probably a bad idea: # ln -s /var/log/user/1000/ /var/run/user/1000/log 

Interesting Posts

Установленное устройство занято, потому что bash использует громкость

Отключить светодиод на 8192cu Edimax dongle, драйверы ядра

Как использовать опцию bash или compgen -C (command)?

Регистрация входных и выходных данных без захвата всех введенных символов ввода и управления

Непоследовательное поведение перенаправления ввода

Как использовать смарт-карту NFC только с GnuPG?

Сценарий восстановления Systemd выполняется только изредка

Уменьшите размер шрифта в Cinnamon из командной строки

Выборочно отключить gvfsd-cdda в Squeeze Debian?

Команда ssh неожиданно продолжается в другой системе после завершения ssh

Подключение fetchmail (или другого MRA) к Exchange

правильный синтаксис для использования файловых дескрипторов с помощью imagemagick

Прекратить прием сигналов при запуске музыки с терминала

Как создать каталог, который не может быть просмотрен и доступен только через его абсолютное имя пути?

Как сделать значения столбца разделенным запятой?

Linux и Unix - лучшая ОС в мире.