selinux en bref

Rédigé par Paulo Aucun commentaire
Classé dans : Linux Mots clés : selinux

Quelques rappels selinux :

  • arret/relance provisoire de selinux (pour verifier un blocage par exemple...)
        setenforce [ Permissive Enforcing ]
  • infos diverses
        getstatus
        ps -ef -Z
        ls -lZ
  • si selinux est en mode permissif ou a été désactivé, il sera necessaire de ré-étiquettée tous les fichiers si l'on veut relancer selinux.
    pour réaliser cette opération au prochain démarrage, il faut créer un fichier /.autorelabel
         su -lc 'touch /.autorelabel'
     
  • modification context provisoire (ne resistera pas au restorecon...)
        chcon system_u:object_r:admin_home_t:s0 /custom/index.html
        chcon --reference=/var/www/html/index.html /custom/index.html

     
  • contexte selinux :
    source : http://doc.fedora-fr.org/wiki/SELinux
    - un contexte selinux est présenté de la manière suivante
          utilisateur:rôle:type:niveau
    - utilisateurs : tout utisateur linux est mappé par un utilisateur Selinux (dont il hérite des droits et restrictions)
        semanage login -l
    - roles : intermédiares entre utilisateurs et domaines selinux
       ex : dossiers personnels des utilisateurs, type = home_user_t
    - liste des contextes auxquels peut accéder un processus :
    ex pour httpd (yum install setools-console)
        sesearch --allow -s httpd_t -c file -p write
    voir ici pour la commande sesearch : https://www.server-world.info/en/note?os=CentOS_7&p=selinux&f=11
    tout fichier qui ne sera pas étiqueté avec l'un de ces contextes sera inaccessibles par le processus httpd

     
  • création d'un module selinux (ou pas)
        sealert -a /var/log/audit/audit.log|less  -> nb: yum install setroubleshoot-server
        - soit on repositionne le context comme il devrait être :
            restorecon -v /custom/index.html
        - soit  création d'un module pour confirmer l'exception (definitivement) :
            ausearch -c "nginx" --raw | audit2allow -M my-nginx   -> création fichier my-nginx.pp et .te
            semodule  -i my-nginx.pp -> application du module   

     
  • permettre à httpd d'acceder à un dossier
    On peut utiliser la commande chcon mais en cas d'autorelabel ou de restorecon, le fichier perdra ses droits
    Donc il est préférable d'utiliser semanage...
    - definition d'un contexte de type "httpd_sys_content_t" sur le repertoire '/custom' et tous les fichiers dessous
           semanage fcontext -a -t httpd_sys_content_t '/custom(/.*)?'
           creation du contexte dans le fichier '/etc/selinux/targeted/contexts/files/file_contexts.local'
    source :  redhat
    - application du contexte
           restorecon -Rv /custom

    - suppression du contexte (ne pas virer dans le fichier ci-dessus)
           semanage fcontext -d '/custom'

    -
    lister les différents contexte ( rappel : man semanage-fcontext) 
           # list defaullt context
           semanage fcontext -l
          
           # list context customisés...pas ceux le base
           semanage fcontext -l


    - appliquer un contexte  depuis celui d'un autre fichier
          # on applique le contexte de truc.conf sur httpd.conf
          chcon --reference=/etc/sshd.truc.conf /etc/httpd/httpd.conf

    -
    lister les contexts selinux sur un fichier :
           ls -lZ
       
    format renvoyé :  user:object:type:level
     
  • probleme avec vsftp  
    # retourne les problemes rencontrés par selinux
    audit2allow -a
    # génération d'une règle locale pour résoudre le soucis ( .pp .te )
    audit2allow -a -M vsftp 
    # application de la règle
    semodule -i vsftp
    Ps : audit2allow ne génère qu'une règle à la fois (genre ecriture, create, delete...) donc
    il faut generer une règle à chaque problème selinux.
    Pour VSFTP, il suffit de postionnerle booleen ftpd_full_access pour régler tous les soucis !!!
    setsebool -P ftpd_full_access 1
    
    

      
  • problème sur les dossiers imbriqués avec des contextes differents
    problème connu chez RH : https://bugzilla.redhat.com/show_bug.cgi?id=678577
    # création d'une arbo pour test
    [root] # mkdir -p /test/test{1..2}
    [root] # tree /test/
    /test/
    ├── test1
    └── test2
    
    # creation/application d'un context sur /test/test2
    [root] # semanage fcontext -a -t etc_t '/test/test2(/.*)?'
    [root] # restorecon -Rv /test/test2
    restorecon reset /test/test2 context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:etc_t:s0
    
    # verif
    [root] # ll -Z /test/
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 test1
    drwxr-xr-x. root root unconfined_u:object_r:etc_t:s0   test2
    
    # création/application d'un context sur /test
    [root] # semanage fcontext -a -t httpd_sys_content_t '/test(/.*)?'
    [root] # restorecon -Rv /test
    restorecon reset /test context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /test/test1 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /test/test2 context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    
    # OUPS : la commande ecrase le contexte posé precedemment sur /test/test2
    [root] # ll -Z /test
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 test1
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 test2
    
    # visualisation des contextes
    [root] # cat /etc/selinux/targeted/contexts/files/file_contexts.local
    # This file is auto-generated by libsemanage
    # Do not edit directly.
    
    /test/test2(/.*) system_u:object_r:etc_t:s0
    /test(/.*)?      system_u:object_r:httpd_sys_content_t:s0
    
    # on a bien deux contextes différents :)
    # et pourtant /test/test2 est écrasé
    # MORALITE : c'est la dernière ligne du fichier qui a raison !!!!!!!!
    
    

     
  • restauration du contexte "par defaut"
    - commande "matchpathcon" permet de connaitre le contexte que devarit posseder le fichier
        matchpathcon /var/www/html/selinux/selinux.html
    - restaurer le contexte qui aurait du être appliqué
        restorecon -v /var/www/html/selinux/selinux.html      

      
  • booléens Selinux :
    Permettent de modifier une politique Selinux sans aucune connaissance, sans compi et sans relancer quoi que ce soit...
    source : http://doc.fedora-fr.org/wiki/SELinux

    - lister les  booléens
        semanage boolean -l  (liste avec baratin)
        semanage boolean -lC (liste avec baratin)
        getsebool -a (liste sans baratin)
        gestsebool boolean -l|grep httpd

    - exemple : activer l'activation des mails depuis httpd
          gestsebool boolean -l|grep httpd|grep mail
          setsebool -P httpd_can_sendmail on   (-P rend la directive permanente)

     

Ps : installer tous les man
 

yum search selinux
yum install selinux-policy-devel
mandb
man semanage-fcontext

 

Résumé des commandes

Consultation :
sestatus : afficher le status actuel de SELinux,
getenforce : obtenir le mode SELinux courant de votre machine,
ls -Z : afficher la liste des fichiers et dossiers ainsi que leur contexte SELinux avec la commande ls (pour plus d'options, consultez le man ls),
ps -Z : afficher la liste des processus ainsi que leur contexte SELinux avec la commande ps (pour plus d'options, consultez le man pas),
sesearch : effectuer une recherche dans la politique actuellement configurée pour votre machine,
getsebool : obtenir des informations sur les booléens,
matchpathcon : afficher le contexte que devrait posséder un fichier.

Modification
setenforce : modifier le mode SELinux de votre machine,
setsebool : modifier la valeur d'un booléen,
restorecon : restaurer un contexte en fonction de la politique courante,
chcon : modifier le contexte SELinux d'un fichier,
semanage : gérer les politiques SELinux.
Pour plus d'informations sur l'une des commandes pré-citées, je vous invite à consulter la page de manuel correspondante (man macommande).

A visiter : https://www.thegeekstuff.com/2017/07/chcon-command-examples/

 

Les commentaires sont fermés.