Я пишу скрипт, который хочу запускать без привилегий. Я хочу, чтобы ошибки, с которыми сталкивается скрипт, регистрировались в каком-либо файле журнала. У меня нет привилегий, чтобы написать один /var/log
. И я не хочу иметь один в моем домашнем каталоге.
Есть ли место, где пользовательские сценарии могут регистрировать информацию времени выполнения? Как лучше всего получать информацию из журнала сценариев, /var/log
не создавая при этом никаких потенциальных проблем с безопасностью? Я не решаюсь установить UID / GID на сценарий.
syslog
это подпрограмма библиотеки C, и C ++ может вызывать любой C, используяextern "C"
. Другие языки часто обеспечивают либо общую привязку к чему-либо C, либо привязку к конкретным вещам, но это зависит от языка.Если вы, как обычный пользователь, решили запустить программу, естественное место для ее журналов находится в вашем домашнем каталоге. Ваш домашний каталог предназначен для хранения всех ваших файлов, будь то журналы программы, которую вы запускаете, или что-то еще.
Если программа выполняется как часть системы и работает как обычно выделенный системный пользователь, то естественным местом для ее журналов является
/var/log
. Создайте подкаталог/var/log/myapp
и предоставьте ему соответствующие разрешения, чтобы ваше приложение могло писать туда.Если это уместно и ваша операционная система позволяет, пометьте файл журнала как доступный только для добавления. Только root может сделать это. Это имеет то преимущество, что если ваше приложение взломано, оно не сможет стереть прошлые журналы, что может быть очень полезно для криминального анализа компрометации. Вам потребуется вмешательство пользователя root для поворота журнала:
chown
чтобы файл журнала больше не мог быть открыт приложением,rename
файл журнала, создайте новый файл только для добавления с соответствующим владельцем, а затем уведомите приложение, чтобы открыть новый пустой файл. ,Вы можете внести любой журнал приложений в системные журналы, позвонив
logger(1)
илиsyslog(3)
.источник
Как правило, для демона файл журнала создается, а
root
затем изменяются разрешения, так что непривилегированный пользователь может писать в него.logrotate
Затем устанавливается для сохранения разрешений во время вращения.Если это команда, а не демон, войдите в систему
/tmp
(желательно используяmktemp
) и сообщите пользователю, черезSTDOUT
что прошел журнал.источник
&
чтобы не задерживать приглашение, но при запуске записи dropbox в консоль. В настоящее время я перенаправляю его вывод на/dev/null
, но хотел бы иметь какой-то способ отладки, если не запускается dropbox.daemonize
.chmod
. Обычно0644
или0664
и владелец пользователя / группы также изменяется на владельца демона, который, как ожидается, будет писать в него.У меня сложилось впечатление, что программы в пространстве пользователя по умолчанию отбрасывают журналы. Я видел, как различные программы снимают журналы, где бы они ни чувствовали, и это никогда не приветствовалось в моих системах; склонность к наращиванию в каком-то месте, которое никогда не замечают, если / пока оно не станет огромным.
Я бы предпочел, если бы для них было определенное место, я играю в своей системе, пытаясь найти для них стабильное место.
Моей первой идеей было использование
/var/run/user/$UID/log
, но я обнаружил, что в моей системе это монтирование TMPFS, недостаточно большое или действительно хорошее для использования с журналами.Создать место для них
Поскольку я недостаточно хорошо понимаю / var / run / user, чтобы интегрироваться с ним, я решил эмулировать его вручную, для пользователя 1000.
Я бы порекомендовал придерживаться FHS / var / log spc для структуры в этой папке, но в свободной форме спецификации, так что не так много, чтобы соответствовать.
Logrotate Config
В данном каталоге нет чередования журналов, предоставляемого вашей системой, я рекомендую создать один для вашей системы:
Ниже мой предыдущий пост / var / run / user / 1000 / log, я не могу рекомендовать его, если вы действительно не знаете, что делаете (и если да, то скажите мне, как это сделать!)
может быть, как следует, но я просто сделал это, потому что это имело смысл для меня.Интеграция с / var / log / user / 1000:
источник