Как мне войти в систему от некорневого демона Debian Linux? - PullRequest
29 голосов
/ 27 января 2009

Я пишу новый демон, который будет размещен в Debian Linux.

Я обнаружил, что / var / log имеет права только на запись в root, поэтому мой демон не может записывать туда файлы журнала.

Тем не менее, если он пишет там, то, по-видимому, он получит автоматическое вращение журнала, а также будет работать так, как может ожидать пользователь.

Каков рекомендуемый способ для демона записывать записи журнала, которые появляются в / var / log, без необходимости запуска от имени root?

Демон является веб-сервером, поэтому трафик журнала будет похож на Apache.

Ответы [ 4 ]

39 голосов
/ 27 января 2009

Вы должны создать подкаталог, подобный /var/log/mydaemon, обладающий правами пользователя демона

12 голосов
/ 27 января 2009

В качестве пользователя root создайте там файл журнала и измените владельца файлов на пользователя веб-сервера:

# touch /var/log/myserver.log
# chown wwwuser /var/log/myserver.log

Затем сервер может записывать в файлы, если он работает от имени пользователя wwwuser. Тем не менее, он не получит автоматическую ротацию логов. Вы должны добавить файл журнала к /etc/logrotate.conf или /etc/logrotate.d/... и заставить свой сервер повторно открывать файл журнала, когда logrotate сигнализирует, что должно.

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

2 голосов
/ 27 января 2009

Два варианта:

  1. Начните с root, откройте файл, затем сбросьте права доступа с setuid. (Я не помню точных системных вызовов для сброса разрешений.) Вам все равно придется это делать, если вы хотите привязать порт TCP 80 или любой порт ниже 1024.
  2. Создайте подкаталог, такой как / var / log / mydaemon, обладающий правами пользователя демона, как WiseTechi сказал .

Файлы в /var/log не поворачиваются автоматически; вместо этого вращение контролируется /etc/logrotate.conf и файлами в /etc/logrotate.d.

1 голос
/ 24 мая 2012

используйте команду "logger"

http://linux.die.net/man/1/logger

...