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?