Вопрос или проблема
Я получаю следующую ошибку (обратите внимание, что rsyslogd
запущен от имени root
)
rsyslogd: omfile: создание родительских директорий для файла 'Доступ запрещен' не удалось: /home/<user>/logs/docker/log
Эта директория имеет такие права:
drwxr-xr-x. 2 <user> <group> 6 Сен 23 12:20 docker
Независимо от прав, так как rsyslogd
запущен от имени root
, я думаю, что с этим не должно быть проблем?
ps -eo user,group,pid,comm | grep rsyslogd
root root 14910 rsyslogd
У меня нет доступа к root
, но я попросил человека с доступом root
проверить, и они могут записывать в /home/<user>/logs/docker/log
через vim
, так что это предполагает, что проблема связана с rsyslogd
.
rsyslogd 8.24.0-57.el7_9.3, скомпилирован с:
PLATFORM: x86_64-redhat-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Да
Поддержка GSSAPI Kerberos 5: Да
FEATURE_DEBUG (отладочная сборка, медленный код): Нет
Поддержка 32-битных атомарных операций: Да
Поддержка 64-битных атомарных операций: Да
Аллокатор памяти: системный по умолчанию
Время выполнения инструментирования (медленный код): Нет
Поддержка uuid: Да
Количество бит в целых числах RainerScript: 64
Смотрите http://www.rsyslog.com для получения дополнительной информации.
Ответ или решение
Ошибка, которую вы получаете, связана с тем, что rsyslogd
не может создать родительские директории для файла журнала по причине ограничения прав доступа, несмотря на то, что он запущен под root
. Давайте рассмотрим возможные причины и решения данной проблемы.
Возможные причины
-
SELinux: Если на вашем сервере включен SELinux, он может блокировать
rsyslogd
запись в указанный каталог, даже если пользователь имеет все права. Для проверки статуса SELinux выполните следующую команду:sestatus
-
Проблемы с правами: Убедитесь, что права доступа к всем родительским директориям (то есть
/home/<user>/logs/docker/
) также позволятrsyslogd
записывать в них. -
Файловая система: Убедитесь, что файловая система, в которой находится
/home/<user>/logs/docker/
, не смонтирована с параметрами, запрещающими запись.
Решение
-
Проверка SELinux:
Если SELinux активирован, вы можете временно отключить его для тестирования. Используйте команду:setenforce 0
После этого проверьте, исчезла ли ошибка. Если это помогло, вам может потребоваться настроить SELinux для разрешения необходимых операций. Используйте инструмент
audit2allow
для создания правил на основе записей в журнале:ausearch -m avc -ts recent
-
Проверка прав на родительские директории:
Убедитесь, что вы используете следующие права доступа:chmod -R 755 /home/<user>/logs
Также проверьте владельца директорий:
chown -R <user>:<group> /home/<user>/logs
-
Изменение конфигурации rsyslog:
Если вы не можете изменить права доступа, вы можете попробовать изменить конфигурациюrsyslog
на использование другого расположения файла журнала, на котороеrsyslogd
имеет полные права. Измените конфигурационный файл/etc/rsyslog.conf
или добавьте новый файл в/etc/rsyslog.d/
. -
Перезапуск rsyslog:
После внесения изменений в конфигурацию или права доступа необходимо перезапуститьrsyslog
:systemctl restart rsyslog
Заключение
Попробуйте варианты решения, приведенные выше. Если проблема сохраняется, сопроводите дальнейшие шаги детальной информацией о конфигурации вашей системы, включая настройки SELinux, права доступа и другие возможные ограничения.