¿Cómo veo el contenido de un paquete de políticas de SELinux?

16

Como dice el título, ¿cómo veo el contenido de un paquete de políticas de SELinux? Los archivos resultantes terminan con .pp. Estoy corriendo en centos 6, pero supongo que es lo mismo en "todas" las distribuciones.

Por ejemplo

    cp /usr/share/selinux/targeted/cobbler.pp.bz2 ~
    bunzip2 cobbler.pp.bz2 
    MAGIC_SELINUX_CMD cobbler.pp
Arlukin
fuente

Respuestas:

17

Un módulo de política SELinux se crea siguiendo los siguientes pasos:

  1. generar un conjunto de reglas de política: audit2allow
  2. compilar: checkmodule
  3. construir: semodule_package

http://wiki.centos.org/HowTos/SELinux

Suponiendo que tengo un postgreylocal.tearchivo con el siguiente contenido:

module postgreylocal 1.0;
require {
        type postfix_smtpd_t;
        type postfix_spool_t;
        type initrc_t;
        class sock_file write;
        class unix_stream_socket connectto;
}
#============= postfix_smtpd_t ==============
allow postfix_smtpd_t initrc_t:unix_stream_socket connectto;
allow postfix_smtpd_t postfix_spool_t:sock_file write; 

postgreylocal.pp El módulo de política se creará con:

# checkmodule -M -m -o postgreylocal.mod postgreylocal.te
# semodule_package -m postgreylocal.mod -o postgreylocal.pp 

Para desempaquetar este módulo de política, necesita una herramienta que se llama semodule_unpackage para extraer el .modarchivo y luego usarlo dismodpara desarmar el módulo binario a la representación textual.

En mi Gentoo, se deben instalar los siguientes paquetes:

[I] sys-apps/policycoreutils
     Available versions:  [M]2.0.82 [M](~)2.0.82-r1 [M](~)2.0.85 [M](~)2.1.0 {M}(~)2.1.0-r1
     Installed versions:  2.1.0-r1(05:12:27 PM 10/14/2011)
     Homepage:            http://userspace.selinuxproject.org
     Description:         SELinux core utilities

[I] sys-apps/checkpolicy
     Available versions:  [M]2.0.21 [M](~)2.0.23 {M}(~)2.1.0 {debug}
     Installed versions:  2.1.0(01:27:53 PM 10/14/2011)(-debug)
     Homepage:            http://userspace.selinuxproject.org
     Description:         SELinux policy compiler

[I] sys-libs/libsepol
     Available versions:  [M]2.0.41!t [M](~)2.0.42!t {M}(~)2.1.0!t
     Installed versions:  2.1.0!t(01:25:43 PM 10/14/2011)
     Homepage:            http://userspace.selinuxproject.org
     Description:         SELinux binary policy representation library

En primer lugar, extraiga el módulo del .pparchivo:

# semodule_unpackage postgreylocal.pp postgreylocal.mod

y en segundo lugar, desmontar con dismod:

# cd checkpolicy-2.1.0/test/
# ls
dismod.c  dispol.c  Makefile
# make
cc -g -Wall -O2 -pipe -I/usr/include   -c -o dispol.o dispol.c
dispol.c: In function ‘main’:
dispol.c:438:8: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
dispol.c:465:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
dispol.c:476:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
dispol.c:500:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
cc   dispol.o  -lfl -lsepol -lselinux /usr/lib/libsepol.a -L/usr/lib -o dispol
cc -g -Wall -O2 -pipe -I/usr/include   -c -o dismod.o dismod.c
dismod.c: In function ‘main’:
dismod.c:913:8: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
dismod.c:982:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
dismod.c: In function ‘link_module’:
dismod.c:787:7: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
cc   dismod.o  -lfl -lsepol -lselinux /usr/lib/libsepol.a -L/usr/lib -o dismod
# ls
dismod  dismod.c  dismod.o  dispol  dispol.c  dispol.o  Makefile

./dismod postgreylocal.pp
Reading policy...
libsepol.policydb_index_others: security:  0 users, 1 roles, 3 types, 0 bools
libsepol.policydb_index_others: security: 0 sens, 0 cats
libsepol.policydb_index_others: security:  2 classes, 0 rules, 0 cond rules
libsepol.policydb_index_others: security:  0 users, 1 roles, 3 types, 0 bools
libsepol.policydb_index_others: security: 0 sens, 0 cats
libsepol.policydb_index_others: security:  2 classes, 0 rules, 0 cond rules
Binary policy module file loaded.
Module name: postgreylocal
Module version: 1.0


Select a command:
1)  display unconditional AVTAB
2)  display conditional AVTAB
3)  display users
4)  display bools
5)  display roles
6)  display types, attributes, and aliases
7)  display role transitions
8)  display role allows
9)  Display policycon
0)  Display initial SIDs

a)  Display avrule requirements
b)  Display avrule declarations
c)  Display policy capabilities
l)  Link in a module
u)  Display the unknown handling setting
F)  Display filename_trans rules

f)  set output file
m)  display menu
q)  quit

Command ('m' for menu):  1
unconditional avtab:
--- begin avrule block ---
decl 1:
  allow [postfix_smtpd_t] [initrc_t] : [unix_stream_socket] { connectto };
  allow [postfix_smtpd_t] [postfix_spool_t] : [sock_file] { write };

Command ('m' for menu):  a
avrule block requirements:
--- begin avrule block ---
decl 1:
commons: <empty>
classes: sock_file{  write } unix_stream_socket{  connectto }
roles  : <empty>
types  : postfix_smtpd_t postfix_spool_t initrc_t
users  : <empty>
bools  : <empty>
levels : <empty>
cats   : <empty>

Command ('m' for menu):  
quanta
fuente
3
para tu información, en Fedora (17) lo es sedismod. Ya está disponible junto con checkpolicyy semodule_unpackcon la instalación predeterminada. Por cierto, semodule_unpackage foo.pp foo.mod foo.fctambién puede extraer el archivo filecontexts.
maxschlepzig
Los enlaces en esta publicación son 404. ¿Podría actualizarlos? Necesito instalar semodule_unpackage y dismod para mi caja. ¡Gracias!
sffc
dismodse puede encontrar en el código fuente de SELinux
mtk
2

¿Tienes un problema como wrong magic number for module package: expected 0xf97cff8f, got 0x39685a42?

Los archivos .pp se almacenan internamente en formato bzip2, por lo que deberá hacerlo bzip2 -cdk policyfile.pp > policyfile.pp.out ANTES semodule_unpackage policyfile.pp.out policyfile.mod.

Gwen D
fuente
2
Los archivos de políticas compilados no están comprimidos con BZip2:bzip2: policy.30 is not a bzip2 file.
Grégoire C
1
Los archivos de políticas instalados se comprimen como bzip2, como filelo atestiguará. A pesar de que el sufijo no se cambia ...
Bob Dalgleish