LINUX:SELinux-Concept
But
Rappelons que sous Unix tout est basé sur des fichiers. A chaque fichier est lié un Context SELinux.
Un utilisateur est lié à un utilisateur SELinux.
Cet utilisateur SELinux appartient à un ou plusieurs rôles.
Un rôle donne accès à divers domaines qui sont une des catégorie de type SELinux.
Et tout un immense ensemble de règles régissent les interactions entre ces divers contexts. Cet ensemble de règles définit la sécurité SELinux.
Context
Donc une des bases de la protection est de sécuriser les fichiers au sens large, processus compris.
On est habitué à une sécurité basée sur la propriété et les accès basics. La commande suivante:
ls -al /etc/passwd
donne:
-rw-r--r--. 1 root root 7453 7 jan 11:36 /etc/passwd
Ce fichier appartient à l'utilisateur "root" et au group "root". Le propriétaire a les droits de lecture et d'écriture alors que les autres n'ont que le droit de lecture.
SELinux ajoute une nouvelle couche. Cette couche permet de contrôler les accès d'une application aux fichiers.
Remarque très importante!!! Dès que cette troisième couche SELinux est activée, il faut la considérer impérativement comme des deux premières couches sinon on courre à des blocages.
SELinux ajoute des attributs à chaque fichier appelé "context".
Sa syntaxe est la suivante:
[SELinux User]:[Role]:[Type]:[Level]
où:
- [SELinux User] : l'utilisateur SELinux. Chaque utilisateur Linux est lié à un utilisateur SELinux.
- [Role] : le rôle SELinux. Il relie un utilisateur SELinux à un ensemble de type SELinux.
- [Type] : le type d'attribut SELinux. Il défini le domaine d'un processus ou le type d'un fichier. Il permet de regrouper un ensemble de "fichiers,..." entre eux.
- [Level] : le niveau de sécurité. Il est surtout utilisé par le niveau de protection "MLS" (Multi Level Security). Comme nous utilisons le niveau "Targeted", il est fixe "s0" et n'a pas d'impact spécial.
Dans la pratique, diverses commandes comportent une option additionnelle "-Z" qui permet de connaitre ces attributs.
- la commande "ls" pour les fichiers:
ls -alZ /etc/passwd
donne:
-rw-r--r--. 1 root root system_u:object_r:passwd_file_t:s0 7453 7 jan 11:36 /etc/passwd
- la commande "ps" pour les processus:
ps axZ | grep crond
donne:
system_u:system_r:crond_t:s0-s0:c0.c1023 1141 ? Ss 0:01 /usr/sbin/crond -n
- la commande "netstat" pour les ports:
netstat -natpZ | grep httpd
donne:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1368/httpd system_u:system_r:httpd_t:s0 tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1368/httpd system_u:system_r:httpd_t:s0 tcp 0 0 192.168.1.60:443 192.168.1.2:65097 ESTABLISHED 1477/httpd system_u:system_r:httpd_t:s0
- la commande "id" pour la session:
id
donne pour la session de l'utilisateur "staff":
uid=5004(staff) gid=100(users) groupes=100(users) contexte=user_u:user_r:user_t:s0
et
id -Z
donne:
user_u:user_r:user_t:s0
Pour le premier exemple concernant le fichier "/etc/passwd", ce context "system_u:object_r:passwd_file_t:s0" se décompose comme suit:
- [SELinux User] : system_u
- [Role] : object_r
- [Type] : passwd_file_t
- [Level] : s0
Utilisateurs Linux et SELinux
On peut lister la liaison entre les utilisateurs Linux et les utilisateurs SELinux par la commande:
semanage login -l
qui donne:
Nom pour l’ouverture de session Identité SELinux Intervalle MLS/MCS Service __default__ unconfined_u s0-s0:c0.c1023 * admin user_u s0 * root unconfined_u s0-s0:c0.c1023 * staff user_u s0 *
Si un utilisateur Linux n'est pas repris, il est lié à l'utilisateur SELinux par défaut "__default__".
seinfo -u -x