запрещает неудовлетворенный пользователь SELinux (root) для установки политики в систему

Основной цикл GNU cat, в простейшем случае это (функция simple_cat из cat.c ):

while (true)
    {
        /* Read a block of input. */
        n_read = safe_read (input_desc, buf, bufsize);

        /* ... */
    }

Тогда возникает вопрос: «как bufsize установить? " Ответ таков: использует io_blksize ( insize = io_blksize (stat_buf) ), который определяется следующим образом:

io_blksize (struct stat sb)
{
  return MAX (IO_BUFSIZE, ST_BLKSIZE (sb));
}

где ST_BLKSIZE дает представление операционной системы о файловом предпочтительном для системы размере блока ввода-вывода (при доступе с использованием stat ), а IO_BUFSIZE определяется как 128 * 1024 (128 КБ). Вот отрывок из документации по системным вызовам Linux stat :

blksize_t st_blksize; /* blocksize for file system I/O */ (...)

The st_blksize field gives the "preferred" blocksize for efficient
file system I/O.   (Writing to a file in smaller  chunks may cause
an inefficient read-modify-rewrite.)

Таким образом, похоже, что GNU cat будет читать блоками по 128 КБ или рекомендуемым файловой системой ввод-вывод размер блока, в зависимости от того, что больше.

2
26.06.2018, 10:50
2 ответа

Проблема с вашим первым модулем :пользователь root в unconfined _t все еще имеет разрешения и правила, позволяющие изменять политику selinux. Ваша настраиваемая политика применяет только новые автоматические переходы для semanage _exec _t на пользователя _t . Процесс в домене пользователя _t не может изменить политику, поэтому semodule, semanageи т. д. завершаются ошибкой. Однако любая программа в неподтвержденном домене по-прежнему может изменять политику. Кроме того, root может просто переименовать эти semanage _exec _t помеченные двоичные файлы в любой неограниченный тип для их запуска.

Ваш второй модуль политики ничего не делает, потому чтоneverallowправила проверяются компилятором -и не приводят ни к каким правилам в скомпилированной политике.Вы не можете использовать neverallow для удаления/черного списка правил, уже включенных в загруженную политику (, и в языке политики SELinux нет инструкции deny , которую вы могли бы использовать таким образом ).

Компиляция политики должна выдавать ошибку и завершаться сбоем, если существуют конфликтующие правила allow и neverallow . Согласно документации , neverallow правила могут использоваться в модулях политик, но для того, чтобы проверки были эффективными, expand-checkдолжно быть установлено на 1 в semanage.conf(, возможно, причина, по которой ваш модуль успешно скомпилировано ).

Некоторые способы решения вашей проблемы для предотвращения изменений загруженной политики SELinux:

  • Использоватьsecure_mode_policyloadлогическое значение:

    Boolean to determine whether the system permits loading policy, setting enforcing mode, and changing boolean values.

    Подобным образомsecure_mode_insmodлогическое значение предотвратит загрузку дополнительных модулей ядра. Эти логические значения нельзя отключить в работающей системе, после включения (требуется перезагрузка для отключения ).

  • Настройте пользователей на более ограниченные домены (, например пользователя _t ), что не позволяет изменять загруженную политику. Переключение на root с помощью su/ sudoне приведет к повышению уровня до более привилегированного пользователя SELinux и сохранит те же принудительные ограничения SELinux.

  • Создайте собственного пользователя SELinux. Вы можете основывать его на пользователе SELinux, предоставленном вашим дистрибутивом (загрузить исходники политик вашего дистрибутива ). Вероятно, вам следует рассмотреть возможность использования какого-либо ограниченного пользователя в качестве шаблона вместо неограниченного пользователя и добавлять только те разрешения, которые вам нужны, чтобы избежать предоставления чрезмерно широких разрешений.

    Кроме того, если вам нужно предоставить только некоторые (переходы/правила с ограниченным доступом ), вы можете написать модуль политики, предоставляющий необходимый доступ ограниченному пользователю.

0
27.01.2020, 22:31

Когда дело доходит до «установки» новой политики, все сводится к ограничению доступа для тех, кто может «записывать» и «переименовывать» /etc/selinux/TYPE/policy/policy. *файлов.

Определите тип этой цели. Используйте пакет анализа политик SELinux, чтобы определить, что может «записывать» и «переименовывать» файлы этого типа. Затем убедитесь, что любой процесс, которому вы не хотите устанавливать политику, не имеет такого доступа (прямо или косвенно )к этому типу файлов.

Кроме того, вы, вероятно, также захотите убедиться, что любые процессы, для которых вы не хотите иметь возможность устанавливать политику, не имеют доступа к «setenforce безопасности» и не имеют физического доступа. Потому что иначе эти процессы могли бы просто обойти SELinux.

0
27.01.2020, 22:31

Теги

Похожие вопросы