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

Я пишу сценарий, который я хочу запустить без привилегий. Я хочу, чтобы ошибки, с которыми скрипт сталкивается, регистрируются в каком-то файле журнала. У меня нет привилегий для записи одного в /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

Конвертировать PDF в другой размер страницы (Письмо США -> A4)

Как хранить / загружать экспортированные переменные среды в / из файла

Использование xdg-open odt файлов

ssh на несколько хостов и запустить команду

Передавать параметр из одного сценария оболочки в другой

Коррупционная файловая система SD-карты для встроенного Linux?

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

Что происходит, когда ваш пароль истекает, и вы используете проверку подлинности ключа?

Странные ошибки firefox после миграции домашних областей на NAS-накопитель

Могу ли я управлять графической программой из командной строки?

Руководство по печати для установки ArchLinux

нет подключения к Интернету – как обновить SLES-серверы?

Веб-запросы отложены. Проблема с DNS? IPV6?

Повторение общих строк в длинном пакетном скрипте

Команда, которая передает свой вход для вывода AND, выполняет команду?

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