Назад | Перейти на главную страницу

Запуск logstash под SELinux

Я хочу запустить logstash от имени пользователя root, чтобы он мог читать все журналы (предоставление ему доступа к каждому журналу очень утомительно). Однако я не хочу, чтобы он буйствовал на моем сервере, я подумал о том, чтобы ограничить его с помощью SELinux.
Я вижу следующие варианты:

Это нормальное занятие?

В случае необходимости я использую 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.

Надеюсь, поможет.