Useradd/groupadd не удалось: ошибка при записи изменений в /etc/passwd и /etc/group. Проблема с контекстами.

Вопрос или проблема

Добрый день, дамы и господа, мне нужна ваша помощь. У меня есть виртуальная машина с Ubuntu 18.04 LTS, и я пытаюсь включить SELinux. Мне пришлось собрать и установить пользовательское ядро из текущей общей версии для LTS с дополнительными флагами. В стандартном ядре не было поддержки SELinux. Первая проблема заключается в том, что я не могу добавлять пользователей и группы, когда SELinux включен или в режиме разрешения. Если я отключаю его и перезагружаю, все работает нормально. Не имеет значения, являюсь ли я реальным root, использую sudo su или непривилегированного пользователя, я сталкиваюсь с одинаковыми проблемами.

root@hometest:~# id -Z
staff_u:staff_r:staff_t:s0

root@hometest:~# useradd testuser
useradd: ошибка при записи изменений в /etc/passwd

На / нет недостатка места

root@hometest:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  6.4G   13G  35% /

Разрешения

root@hometest:~# ls -alsdZ /etc /etc/passwd /etc/group /etc/shadow
12 drwxr-xr-x. 136 root root system_u:object_r:etc_t:s0 12288 Jul 27 16:25 /etc
4 -rw-rw-rw-.   1 root root system_u:object_r:etc_t:s0   977 Jul 25 10:25 /etc/group
4 -rw-rw-r--.   1 root root system_u:object_r:etc_t:s0  2184 Jul 25 10:17 /etc/passwd
4 -rw-r-----.   1 root shadow system_u:object_r:shadow_t:s0  1291 Jul 25 10:17 /etc/shadow


root@hometest:~# lsattr -d /etc /etc/passwd /etc/group
-----------I--e--- /etc
--------------e--- /etc/passwd
--------------e--- /etc/group
--------------e--- /etc/shadow

Не нашел никаких булевых значений SELinux, которые могли бы помочь. Система помечена в соответствии с политикой по умолчанию. Попробовал восстановить контексты /etc/passwd, /etc/shadow и /etc/group – ничего не изменилось.

root@hometest:~# sestatus 
Статус SELinux:                 включен
Монтирование SELinuxfs:         /sys/fs/selinux
Корневая директория SELinux:    /etc/selinux
Загруженное имя политики:        default
Текущий режим:                  разрешающий
Режим из конфигурационного файла: разрешающий
Статус политики MLS:            включен
Статус отказа неизвестного:     разрешен
Проверка защиты памяти:         запрашивается (незащищенный)
Максимальная версия политики ядра: 31

Некоторая информация из журналов:

type=AVC msg=audit(1532674348.442:472): avc:  отказано  { map } для  pid=1060 comm="useradd" path="/etc/passwd" dev="sda2" ino=131866 scontext=root:sysadm_r:useradd_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=file permissive=1
    Причина:
            Отсутствует разрешающее правило на принуждение типа (TE).

            Вы можете использовать audit2allow для генерации загружаемого модуля для разрешения этого доступа.

type=AVC msg=audit(1532685061.535:1239): avc:  отказано  { write } для  pid=2759 comm="useradd" path="/etc/passwd.2759" dev="sda2" ino=131279 scontext=staff_u:staff_r:staff_sudo_t:s0 tcontext=staff_u:object_r:etc_t:s0 tclass=file permissive=1
    Причина:
            Отсутствует разрешающее правило на принуждение типа (TE).

            Вы можете использовать audit2allow для генерации загружаемого модуля для разрешения этого доступа.

Я собрал полный модуль со всеми разрешающими правилами, которые были найдены в журнале аудита, установил его, перезагрузил политику, и это ничего не решило. Я проверил журнал еще раз, нашел несколько новых записей и сделал еще один модуль. Я пытался изменить контекст /etc/passwd с etc_t на другие – это не помогло. Попробовал использовать strace, но вывод действительно длинный. Что еще я могу проверить или попробовать? На Ubuntu 16.04 LTS проблем нет, что не так с 18.04 LTS? Что я делаю не так? Буду благодарен за любую помощь.

Похоже, это ошибка. Я также столкнулся с ней.

Запуская strace на groupadd, сбой происходит после записи groupadd в /proc/thread-self/attr/fscreate.

Вот отчет об ошибке https://bugs.launchpad.net/ubuntu/+source/libselinux/+bug/1769301

Сообщено восемь месяцев назад, до сих пор не исправлено.

SELinux не очень хорошо поддерживается ни в Debian, ни в Ubuntu. Если вам нравится SELinux, рассмотрите возможность использования Redhat или Centos.

Ответ или решение

Уважаемые коллеги,

Согласно вашему описанию проблемы, вы столкнулись с серьезной трудностью при добавлении пользователей и групп в виртуальной машине с Ubuntu 18.04 LTS, работающей под управлением SELinux. Я постараюсь структурировать ответ с учетом ваших замечаний и предложить возможные решения.

Суть проблемы

При активации SELinux (в режимах enforcing и permissive) вы не можете выполнять команды useradd и groupadd, что приводит к ошибкам, связанным с записью в файлы /etc/passwd и /etc/group. При этом система функционирует корректно, когда SELinux отключен.

Вы предоставили следующую ошибку при попытке использовать useradd:

useradd: failure while writing changes to /etc/passwd

Согласно вашей информации, место на диске не является проблемой, так как файловая система не заполнена. Анализ прав доступа к файлам /etc/passwd, /etc/group и другим показал, что они установлены корректно. Однако, ошибки AVC (Access Vector Cache) в журналах (logs) указывают на то, что SELinux блокирует операции.

Анализ logs

Ошибка из ваших логов:

type=AVC msg=audit(...): avc:  denied  { write } for  pid=... comm="useradd" path="/etc/passwd" ...

указывает на недостаток правил типа enforcement (TE), которые разрешают необходимые операции для useradd и groupadd. Это свидетельствует о том, что политика SELinux не позволяет текущему домену (context) выполнять записи в указанные файлы.

Возможные пути решения

  1. Обновление и переобновление политики SELinux: Если вы уже создали и установили модуль, расширяющий политику SELinux, но это не решило проблему, возможно, стоит обратить внимание на то, что они могут иметь конфликты. Убедитесь, что не осталось старых или неподдерживаемых версий политик.

  2. Кастомные правила SELinux: Создание кастомных правил для разрешения доступа может помочь в данной ситуации. Используйте audit2allow для генерации необходимых правил на основе логов. Если необходимо, пересмотрите ваши правила на наличие пробелов или возможно лишних блокировок.

  3. Проверка конфигурации SELinux: Возможно, стоит удостовериться, что ваш SELinux установлен и конфигурирован корректно для вашей версии ядра и дистрибутива. Если проблема наблюдается только на Ubuntu 18.04, это может быть связано с определёнными изменениями в рамках версии.

  4. Работа с kernel: Убедитесь, что ваш кастомный ядро корректно поддерживает функции, необходимые для работы с SELinux. Параметры конфигурации ядра могут повлиять на корректное функционирование.

  5. Поиск обновлений и патчей: Как вы упомянули, проблема была обнаружена и зафиксирована как "баг". Проверьте, есть ли доступные обновления для вашей системы, которые могли бы решить проблему.

  6. План B: Если решение не удалось найти, и проблема не поддерживается в текущей реализации Ubuntu, стоит рассмотреть возможность использования другой ОС, таковой как Red Hat или CentOS, где поддержка SELinux более развита и стабильна.

Заключение

Учитывая ваши усилия, возможно, вам стоит еще раз пройтись по логам и внимательно изучить вывод strace. Исследование контекста и политик может дать больше понимания в чем причина вашего затруднения. Также ресурсы, такие как audit2allow, могут стать вашим надежным помощником в создании необходимых правил.

Если потребуется дополнительная помощь, обращайтесь. Надеюсь, это поможет вам разрешить вашу проблему.

С уважением,
[Ваше Имя]
IT-эксперт

Оцените материал
Добавить комментарий

Капча загружается...