6.8. Séparer l'administration du système de l'administration de la sécurité dans MLS

Par défaut, le rôle sysadm_r a les droits du rôle secadm_r, ce qui signifie qu'un utilisateur ayant le rôle sysadm_r peut gérer la politique de sécurité. Si vous avez besoin de plus de contrôle sur les autorisations de sécurité, vous pouvez séparer l'administration du système de l'administration de la sécurité en attribuant à un utilisateur Linux le rôle secadm_r et en désactivant le module sysadm_secadm dans la stratégie SELinux.

Conditions préalables

  • La politique SELinux est définie sur mls.
  • Le mode SELinux est défini sur enforcing.
  • Le paquet policycoreutils-python-utils est installé.
  • Un utilisateur Linux auquel sera attribué le rôle secadm_r:

    • L'utilisateur est assigné à l'utilisateur SELinux staff_u
    • Un mot de passe a été défini pour cet utilisateur.
    Avertissement

    Assurez-vous que vous pouvez vous connecter en tant qu'utilisateur auquel sera attribué le rôle secadm. Si ce n'est pas le cas, vous pouvez empêcher toute modification future de la politique SELinux du système.

Procédure

  1. Créez un nouveau fichier sudoers dans le répertoire /etc/sudoers.d pour l'utilisateur :

    # visudo -f /etc/sudoers.d/<sec_adm_user>

    Pour que les fichiers sudoers restent organisés, remplacez <sec_adm_user> par l'utilisateur Linux auquel sera attribué le rôle secadm.

  2. Ajoutez le contenu suivant dans le fichier /etc/sudoers.d/<sec_adm_user> le contenu suivant :

    <sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL

    Cette ligne autorise <secadmuser> sur tous les hôtes à exécuter toutes les commandes, et attribue à l'utilisateur le type et le rôle SELinux secadm par défaut.

  3. Connectez-vous en tant qu'utilisateur de <sec_adm_user>:

    Note

    Pour s'assurer que le contexte SELinux (qui comprend l'utilisateur SELinux, le rôle et le type) est modifié, connectez-vous en utilisant ssh, la console ou xdm. Les autres moyens, tels que su et sudo, ne peuvent pas modifier l'ensemble du contexte SELinux.

  4. Vérifier le contexte de sécurité de l'utilisateur :

    $ id
    uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023
  5. Exécute l'interpréteur de commandes interactif pour l'utilisateur root :

    $ sudo -i
    [sudo] password for <sec_adm_user>:
  6. Vérifier le contexte de sécurité de l'utilisateur actuel :

    # id
    uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
  7. Désactiver le module sysadm_secadm de la politique :

    # semodule -d sysadm_secadm
    Important

    Utilisez la commande semodule -d au lieu de supprimer le module de politique du système à l'aide de la commande semodule -r. La commande semodule -r supprime le module du stockage de votre système, ce qui signifie qu'il ne peut pas être chargé à nouveau sans réinstaller le paquetage selinux-policy-mls.

Vérification

  1. En tant qu'utilisateur assigné au rôle secadm et dans le shell interactif de l'utilisateur root, vérifiez que vous pouvez accéder aux données de la politique de sécurité :

    # seinfo -xt secadm_t
    
    Types: 1
       type secadm_t, can_relabelto_shadow_passwords, (...) userdomain;
  2. Se déconnecter de l'interpréteur de commandes racine :

    # logout
  3. Se déconnecter de l'utilisateur <sec_adm_user> l'utilisateur :

    $ logout
    Connection to localhost closed.
  4. Affiche le contexte de sécurité actuel :

    # id
    uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
  5. Tentative d'activation du module sysadm_secadm. La commande devrait échouer :

    # semodule -e sysadm_secadm
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    SELinux:  Could not load policy file /etc/selinux/mls/policy/policy.31:  Permission denied
    /sbin/load_policy:  Can't load policy:  Permission denied
    libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
    semodule:  Failed!
  6. Tentative d'affichage des détails concernant le type SELinux sysadm_t. La commande doit échouer :

    # seinfo -xt sysadm_t
    [Errno 13] Permission denied: '/sys/fs/selinux/policy'