Вопрос или проблема
Добрый день, дамы и господа, мне нужна ваша помощь. У меня есть виртуальная машина с 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) выполнять записи в указанные файлы.
Возможные пути решения
-
Обновление и переобновление политики SELinux: Если вы уже создали и установили модуль, расширяющий политику SELinux, но это не решило проблему, возможно, стоит обратить внимание на то, что они могут иметь конфликты. Убедитесь, что не осталось старых или неподдерживаемых версий политик.
-
Кастомные правила SELinux: Создание кастомных правил для разрешения доступа может помочь в данной ситуации. Используйте
audit2allow
для генерации необходимых правил на основе логов. Если необходимо, пересмотрите ваши правила на наличие пробелов или возможно лишних блокировок. -
Проверка конфигурации SELinux: Возможно, стоит удостовериться, что ваш SELinux установлен и конфигурирован корректно для вашей версии ядра и дистрибутива. Если проблема наблюдается только на Ubuntu 18.04, это может быть связано с определёнными изменениями в рамках версии.
-
Работа с kernel: Убедитесь, что ваш кастомный ядро корректно поддерживает функции, необходимые для работы с SELinux. Параметры конфигурации ядра могут повлиять на корректное функционирование.
-
Поиск обновлений и патчей: Как вы упомянули, проблема была обнаружена и зафиксирована как "баг". Проверьте, есть ли доступные обновления для вашей системы, которые могли бы решить проблему.
-
План B: Если решение не удалось найти, и проблема не поддерживается в текущей реализации Ubuntu, стоит рассмотреть возможность использования другой ОС, таковой как Red Hat или CentOS, где поддержка SELinux более развита и стабильна.
Заключение
Учитывая ваши усилия, возможно, вам стоит еще раз пройтись по логам и внимательно изучить вывод strace
. Исследование контекста и политик может дать больше понимания в чем причина вашего затруднения. Также ресурсы, такие как audit2allow
, могут стать вашим надежным помощником в создании необходимых правил.
Если потребуется дополнительная помощь, обращайтесь. Надеюсь, это поможет вам разрешить вашу проблему.
С уважением,
[Ваше Имя]
IT-эксперт