Я хочу выполнить logstash как корень, чтобы позволить этому читать все журналы (предоставление его, доступ к каждому журналу очень утомителен). Однако я не хочу это бывший вне себя на моем сервере, я думал об ограничении его под SELinux.
Опции, которые я вижу:
clogd_t
так как это имеет log
на его имя и я не мог найти подозрительное использование полномочий записи sudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
Действительно ли любой - нормальная вещь сделать?
В случае, если это имеет значение, я использую CentOS 6.7
Я бы предпочёл сделать пользовательскую политику, потому что она чище и заставляет вас контролировать происходящее.
Как я понимаю, это Java-демон, который вы будете запускать, так что, вероятно, разумно заставить его работать под именем system_u:system_r:logstash_t
. Тогда вам нужно будет дать (только для чтения?) доступ ко всем лог-файлам в домене logstash_t и, наконец, дать любые дополнительные разрешения, которые logstash может потребоваться для запуска.
Используя интерфейсы refpolicy, у нас есть что-то вроде:
policy_module(logstash, 1.0)
# define the entry point and the domain
type logstash_exec_t
init_daemon_domain(logstash_t, logstash_exec_t)
Тогда демон logstash должен уметь читать лог-файлы:
logging_search_all_logs(logstash_t)
logging_getattr_all_logs(logstash_t)
logging_read_all_logs(logstash_t)
Это должно выполнить большую часть работы, а остальное вам нужно будет добавить.
В связи со вторым пунктом я не уверен, почему вы не получаете никаких разрешений на запись, о которых сообщает sesearch, но если вы посмотрите на источники:
# clogd.te
storage_raw_read_fixed_disk(clogd_t)
storage_raw_write_fixed_disk(clogd_t)
# storage.te
########################################
## <summary>
## Allow the caller to directly write to a fixed disk.
## This is extremely dangerous as it can bypass the
## SELinux protections for filesystem objects, and
## should only be used by trusted domains.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`storage_raw_write_fixed_disk',`
# and the rest of the stuff here...
На самом деле, это не совсем то, что вам нужно от инструмента для мониторинга логов. Вы можете найти что-нибудь подходящее для использования со вторым решением, просто убедитесь, что вы не получаете лишних ненужных разрешений, так как это разрушает всю цель запуска процесса внутри selinux.
Надеюсь, это поможет.