Se você olhar o contexto definido para o diretório / var / log, você notará as seguintes coisas.
Primeiro, o diretório /var/log
tem o seguinte conjunto de contexto selinux:
$ ls -Z /var | grep "log$"
drwxr-xr-x. root root system_u:object_r:var_log_t:s0 log
Em segundo lugar, o arquivo de log, /var/log/messages
, não tem contexto adicional:
$ ls -Z /var/log/messages
-rw------- root root ? /var/log/messages
Portanto, parece que você só precisa definir um contexto semelhante ao de /var/log
em qualquer diretório em que você esteja planejando escrever esse arquivo de log adicional. Algo como isso deveria fazer isso.
Método 1: replicando o rótulo selinux
Abaixo, copiaremos o contexto associado a /var/log
e também o aplicaremos a /opt/blah
.
$ mkdir /opt/blah
$ ls -Z /opt | grep blah
drwxr-xr-x root root ? blah
# label directory with context
$ chcon --reference /var/log /opt/blah
# see the newly added context
$ ls -Z /opt/ | grep blah
drwxr-xr-x. root root system_u:object_r:var_log_t:s0 blah
Método 2: aplicando o contexto diretamente
Você também pode aplicá-los diretamente assim:
$ chcon system_u:object_r:var_log_t:s0 /opt/blah
Estou longe de um sistema em que posso confirmar a necessidade de executar esses comandos, mas acredito que você precise dizer ao SELinux para selecionar esses contextos recentemente aplicados ao sistema de arquivos também.
$ semanage fcontext -a -t var_log_t "/opt(/.*)?"
$ restorecon -R -v /opt
confirma as alterações
# confirm identical to /var/log context
$ ls -Z /var/ | grep "log$"
drwxr-xr-x. root root system_u:object_r:var_log_t:s0 log