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

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

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

  • Почему каталог var не зависит от пользователя?
  • Как имитировать Windows, например, пароль администратора в Linux?
  • Как определить, принадлежит ли файловая система Linux к запущенной системе или нет
  • начать процесс (как root) при входе пользователя в систему
  • ошибка аутентификации входа в систему "пользователем, не являющимся пользователем root, может войти только в root
  • сброс пароля root ovh
  • ошибка аутентификации входа в систему "пользователем, не являющимся пользователем root, может войти только в root
  • Команда sudo выполняется без запроса пароля
  • Инструмент для просмотра других tty для linux?
  • Не осталось свободного места для раздела rootfs для обновления ядра
  • OpenSUSE отключил регистрацию root (нет корневого psswd) >> yast, проблемы с конфигурацией
  • Как я могу обнаружить ошибки памяти, если у меня нет корневого или физического доступа к системе Linux?
  • 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 

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