Useradd / groupadd falha: falha ao gravar alterações em / etc / passwd e / etc / group. Problema de contextos

0

Eu tenho uma máquina virtual com o Ubuntu 18.04 LTS e estou tentando impor o SELinux. Eu tive que construir e instalar um kernel personalizado a partir da versão genérica atual. para LTS com algumas bandeiras extras. Não houve suporte do SELinux no kernel padrão. O primeiro problema é: não posso adicionar usuários e grupos enquanto o SELinux é obrigatório ou permissivo. Se eu desabilitá-lo e reinicie - está tudo bem. Não importa se sou root real, ou uso sudo su, ou usuário não confinado, enfrento os mesmos problemas.

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

root@hometest:~# useradd testuser
useradd: failure while writing changes to /etc/passwd

Não falta espaço em /

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

Permissões

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

Não encontrou nenhum booleano do SELinux, o que poderia ajudar. O sistema é rotulado de acordo com a política padrão. Tentei restaurar os contextos de / etc / passwd, / etc / shadow e / etc / grpup - nada muda.

root@hometest:~# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             default
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     requested (insecure)
Max kernel policy version:      31

Algumas informações dos registros:

type=AVC msg=audit(1532674348.442:472): avc:  denied  { map } for  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
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1532685061.535:1239): avc:  denied  { write } for  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
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

Quando estou tentando construir um módulo usando o audit2allow, tenho outro problema - não posso compilar. Eu sei que é uma má idéia gerar módulos dessa maneira, mas é apenas para rastrear o problema.

root@hometest:~# audit2allow -R -a -t sysadm_t > sysadm_local.te
root@hometest:~# make -f /usr/share/selinux/devel/Makefile
Compiling default sysadm_local module
/usr/bin/checkmodule:  loading policy configuration from tmp/sysadm_local.tmp
sysadm_local.te:1:ERROR 'syntax error' at token ';' on line 1098:
    module sysadm_local_full.1.0.0 ;
#line 1
/usr/bin/checkmodule:  error(s) encountered while parsing configuration
/usr/share/selinux/devel/include/Makefile:159: recipe for target 'tmp/sysadm_local.mod' failed
make: *** [tmp/sysadm_local.mod] Error 1

O que estou fazendo de errado?

UPD. Eu compilei um módulo completo com todas as regras de permissão que foram encontradas no log de auditoria, instalei-o, recarreguei a política e não resolvi nada. A checou o log por mais uma vez, encontrou algumas novas entradas e fez mais um módulo. Eu tentei mudar o contexto do / etc / passwd do etc_t para alguns outros - não funcionou. Tentei usar strace , mas a saída é realmente longa. O que mais eu posso verificar? Não há problema no Ubuntu 16.04 LTS, o que há de errado com o 18.04 LTS?

    
por Igor Klyuchnikov 27.07.2018 / 16:23

0 respostas