Я пытаюсь установить и запустить syslog-ng, но меня заблокировала следующая ошибка.
Error opening configuration file; filename='/etc/syslog-ng/syslog-ng.conf', error='Permission denied (13)'
Я запускаю это с помощью sudo, и теперь у файла и каталога есть права доступа 777. Я использовал strace, и это определенно открытый вызов, который терпит неудачу с EACCESS. Насколько мы можем судить, он не меняется на другого пользователя.
Обновление: по запросу: вывод strace
[edward.sargisson@apps-mgmt-fe1 syslog-ng]$ sudo strace -f -v -eopen /etc/init.d/syslog-ng start
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/libtermcap.so.2", O_RDONLY) = 3
open("/lib64/libdl.so.2", O_RDONLY) = 3
open("/lib64/libc.so.6", O_RDONLY) = 3
open("/dev/tty", O_RDWR|O_NONBLOCK) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY) = 3
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/etc/init.d/syslog-ng", O_RDONLY) = 3
open("/etc/init.d/functions", O_RDONLY) = 3
Process 4802 attached (waiting for parent)
Process 4802 resumed (parent 4801 ready)
Process 4803 attached (waiting for parent)
Process 4803 resumed (parent 4802 ready)
Process 4802 suspended
[pid 4803] open("/etc/ld.so.cache", O_RDONLY) = 3
[pid 4803] open("/lib64/libc.so.6", O_RDONLY) = 3
Process 4802 resumed
Process 4803 detached
[pid 4802] --- SIGCHLD (Child exited) @ 0 (0) ---
Process 4802 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/profile.d/lang.sh", O_RDONLY) = 3
open("/etc/sysconfig/i18n", O_RDONLY) = 3
open("/etc/sysconfig/init", O_RDONLY) = 3
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/initscripts.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/sysconfig/syslog-ng", O_RDONLY) = 3
Process 4804 attached (waiting for parent)
Process 4804 resumed (parent 4801 ready)
Process 4801 suspended
[pid 4804] open("/etc/ld.so.cache", O_RDONLY) = 3
[pid 4804] open("/lib64/libnsl.so.1", O_RDONLY) = 3
[pid 4804] open("/lib64/librt.so.1", O_RDONLY) = 3
[pid 4804] open("/lib64/libnet.so.1", O_RDONLY) = 3
[pid 4804] open("/lib64/libdl.so.2", O_RDONLY) = 3
[pid 4804] open("/lib64/libc.so.6", O_RDONLY) = 3
[pid 4804] open("/lib64/libpthread.so.0", O_RDONLY) = 3
[pid 4804] open("/etc/eventlog.conf", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 4804] open("/etc/localtime", O_RDONLY) = 3
[pid 4804] open("/etc/syslog-ng/syslog-ng.conf", O_RDONLY) = -1 EACCES (Permission denied)
Error opening configuration file; filename='/etc/syslog-ng/syslog-ng.conf', error='Permission denied (13)'
Process 4801 resumed
Process 4804 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
В качестве теста мы переместили куда-то syslog-ng.conf и скопировали его обратно, что заставило его работать, но не помогло. Если я использую chef для замены файла, syslog-ng не запускается.
Хорошо, это оказалось проблемой, связанной с SELinux. Только для записи, /var/log/audit/audit.log
можно изучить, чтобы получить события, связанные с SELinux, auditd
должен быть запущен, чтобы включить этот журнал. Есть два возможных решения: отключить SELinux (не рекомендуется) или создать собственную политику SELinux, которая разрешает доступ к этому файлу. Возможно, файл просто не имеет надлежащего контекста безопасности, связанного с ним, тогда настраиваемая политика не нужна.
Вопросник добавляет: Использование ls -Z
Теперь я вижу, что файл имеет контекст user_u:object_r:tmp_t
. Я предполагаю, что шеф-повар копирует файл с сервера шеф-повара и получает tmp_t
контекст. Однако файлу необходим контекст по умолчанию для /etc
который etc_t
. У Chef есть кулинарная книга selinux, которая, похоже, имеет соответствующие функции для управления этим.