Gestion sécurisée

Objectifs de certification

Linux Essentials

RHCSA EX200

  • 5.Déployer, configurer et gérer des systèmes
  • 5.2. Planifier des tâches à l'aide de cron et at
  • 5.10. Configurer un système pour utiliser des services de temps
  • 2.Utiliser des systèmes en cours d'exécution
  • 2.5. Localiser et interpréter les fichiers journaux du système et les journaux
  • 7.Gérer la sécurité
  • 7.3. Définir des modes d'application de règles et permissifs pour SELinux
  • 7.4. Répertorier et identifier le contexte des fichiers et des processus SELinux
  • 7.5. Restaurer les contextes des fichiers par défaut
  • 7.6 Utiliser des paramètres booléens pour modifier les paramètres SELinux du système
  • 7.7. Détecter et gérer les violations des politiques SELinux de routine
  • 6.Gérer des groupes et utilisateurs système
  • 6.4. Configurer un système pour utiliser un service d'authentification distant pour les informations utilisateur et groupe

LPIC 1

LPIC 2

1. Tâches planifiées

  • at et cron

1.1. Commande at

  • at est une commande Unix qui permet de programmer des commandes à n'exécuter qu'une fois – par opposition à cron — à un moment donné. La commande enregistrée hérite de l'environnement courant utilisé au moment de sa définition. Par exemple, pour une exécution de la commande à 05:45 :
    $ echo "touch file.txt" | at 0545
    
  • Options :
  • at -l ou atq : affiche la liste des jobs introduits par la commande « at ».
  • at -r JOB ou atrm JOB : efface le job identifié par son numéro de job.
  • at : sans paramètre, donne la ligne « Garbled time ».

1.2. Commande at : créer une tâche planifiée

  • Vérifier le moment :
    $ date
    mer jan 21 18:26:25 CET 2015
    
  • Créer une tâche pour 18:28 :
    $ at 1828
    at> echo $(date) >> now.txt
    at> <EOT>
    job 5 at Wed Jan 21 18:28:00 2015
    
  • Vérifier la programmation
    $ at -l
    5   Wed Jan 21 18:28:00 2015 a francois
    
  • Constat :
$ date; ls -l now.txt; cat now.txt
mer jan 21 18:28:19 CET 2015
-rw-rw-r--. 1 francois francois 58 21 jan 18:28 now.txt
mer jan 21 18:26:00 CET 2015
mer jan 21 18:28:00 CET 2015

1.3. Commande at : supprimer une tâche planifiée

  • Vérification de la tâche :
$ atq
6   Wed Jan 21 18:30:00 2015 a francois
  • Suppression de la tâche :

$ atrm 6
* Nouvelle vérification de la tâche

$ atq

1.4. Cron

  • Le logiciel utilitaire 'Cron' est un planificateur de tâches basé sur le temps dans les systèmes de type Unix. On utilise cron pour planifier des tâches (commandes ou les scripts shell) pour les exécuter périodiquement à des heures fixes, à des dates ou dans des intervalles. Le nom cron vient du mot grec pour le temps, χρόνος chronos.
  • cron.d est normalement lancé comme service.
  • Le programme crontab permet aux utilisateurs de gérer leurs tâches.

1.5. Répertoire /etc/cron*

  • Placer un script dans l’un de ses répertoires l’exécute à un moment prédéfini :
$ ls /etc/cron*
/etc/cron.deny  /etc/crontab
/etc/cron.d:
0hourly  raid-check  sysstat  unbound-anchor
/etc/cron.daily:
0yum-daily.cron  logrotate  man-db.cron  mlocate
/etc/cron.hourly:
0anacron  0yum-hourly.cron
/etc/cron.monthly:
/etc/cron.weekly:

1.6. Service cron

  • Sous Centos 7 :
$ systemctl status crond.service
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since mer 2015-01-21 03:34:27 CET; 16h ago
 Main PID: 1083 (crond)
   CGroup: /system.slice/crond.service
           └─1083 /usr/sbin/crond -n

1.7. Fichier /etc/crontab

$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |     OR sun,mon,tue,wed,thu,fri,sat
# *  *  *  *  * user-name  command-to-be-executed

1.8. Commande crontab

  • Pour gérer son gestionnaire des tâches planifiées on lance la commande crontab qui utilise l’éditeur par défaut :
$ crontab -e
et insérer ceci pour lancer un script à chaque minute :
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |     OR sun,mon,tue,wed,thu,fri,sat
# *  *  *  *  * user-name  command to be executed
* * * * * /home/francois/job1.sh

1.9. Commande crontab

  • Vérifier les jobs :
$ crontab -l
  • Créer un script du type :
#!/bin/bash
# job1.sh
touch /home/francois/cron-$(date +"%Y%H%M")
exit
  • Vérifier avec :
ls -l ~/cron*

1.10. Champs dates et heures

Champs valeurs autorisées
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (ou les noms en anglais)
day of week 0-7 (0 or 7 est aussi dimanche ou les noms des jours)
Les trois premières lettres des noms des mois et des jours de la semaine correspondent aux termes anglais quelle que soit la casse.

1.11. Valeurs numériques

  • On peut écrire des plages de valeurs (inclusif) :
8-11
  • On peut écrire des listes de plages
1,2,5,9
  • ou
0-4,8-12
  • une valeur suivie de "/<nombre>" correspond à une cadence. Par exemple :
0-23/2
  • correspond à une cadence tous les 2 de 0 à 23 (on suppose un exemple sur l’heure)
  • L’alternative aurait été :
0,2,4,6,8,10,12,14,16,18,20,22
  • S’il s’agit d’une cadence de tous les deux, il est peut-être plus évident d’écrire ceci :
*/2

1.12. Exemple de planification

  • Chaque jour, toutes les 5 minutes après minuit :
    5 0 * * *      
  • Le premier jour de chaque mois à 14:15 :
    15 14 1 * *    
  • Du lundi au vendredi à 22:00 :
    0 22 * * 1-5
  • Chaque jour, toutes les deux heures à partir de minuit :
    23 0-23/2 * * *
  • Chaque dimanche à 4h5 :
    5 4 * * sun

1.13. Compteurs systemd

2. Localisation et synchronisation

2.1. Localisation

  • Debian/Ubuntu :
# dpkg-reconfigure tzdata
  • Sous RHEL/Centos, le fichier /etc/localtime est un lien symbolique vers un des fichiers situés dans /usr/share/zoneinfo/ :
$ ls -l /etc/localtime

2.2. Date courante

  • Date et heure du système : commande date.
  • Date et heure matérielle : commande hwclock.

2.3. Network Time Protocol

2.4. Timedatectl

# timedatectl --help
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode

Commands:
  status                   Show current time settings
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Control whether NTP is enabled

2.5. client ntpdate

  • Pour se synchroniser, on peut utiliser aussi le client ntpdate :
# ntpdate be.pool.ntp.org
  • Pour s’assurer que votre ordinateur soit synchronisé via NTP, sous centos 7, vous pouvez démarrer le service associé :
# systemctl status ntpdate
# systemctl start ntpdate
# systemctl status ntpdate

3. Journalisation Systemd

3.1. Commande journalctl

Configuration de journalctl

...

Droits d'accès. Les utilisateurs peuvent seulement voir leurs journaux. Pour voir tous journaux du système, l'utilisateur doit faire partie du groupe adm.

usermod -a -G adm francois

Consulter le journal.

journalctl

3.2. Options

Option Paramètre Usage
-n, --lines= ... ...
-f, --follow ... ...
-b ... ...
-k, --dmesg ... ...
-e, --pager-end ... ...
-r, --reverse ... ...
-x, --catalog ... ...
-p, --priority= ... ...
-u, --unit= ... ...
--since=, --until= "2012-10-30 18:17:16", "yesterday", "today", "tomorrow", "now"

3.3. Exemples

Afficher les 5 dernières lignes du journal.

journalctl -n 5

Spécifier le format de sortie (voir man journalctl).

journalctl -n 1 -o verbose

Affichage en temps réel.

journalctl -f

Affichage des messages au démarrage.

journalctl -b

Affichage par niveau de sévérité err

journalctl -p err

4. Syslog

Syslog est un protocole définissant un service de journaux d'événements d'un système informatique. C'est aussi le nom du format qui permet ces échanges.

En tant que protocole, Syslog se compose d'une partie cliente et d'une partie serveur. La partie cliente émet les informations sur le réseau, via le port UDP 514. Il est possible d'utiliser TCP. Les serveurs collectent l'information et se chargent de créer les journaux.

L'intérêt de Syslog est donc de centraliser les journaux d'événements, permettant de repérer plus rapidement et efficacement les défaillances d'ordinateurs présents sur un réseau.

Il existe aussi un logiciel appelé Syslog, qui est responsable de la prise en charge des fichiers de journalisation du système.

Syslog est la solution de journalisation standard sur les systèmes Unix et Linux, il y a également une variété d'implémentations Syslog sur d'autres systèmes d'exploitation (Windows notamment) et est généralement trouvé dans les périphériques réseau tels que les commutateurs ou routeurs.

4.1. Format Syslog

Un journal au format Syslog comporte dans l'ordre les informations suivantes : 1. la date à laquelle a été émis le log, * le nom de l'équipement ayant généré le log (hostname), * une information sur le processus qui a déclenché cette émission, * le niveau de gravité du log, * un identifiant du processus ayant généré le log * et enfin un corps de message. Certaines de ces informations sont optionnelles. Par exemple :

Sep 14 14:09:09 machine_de_test dhcp service[warning] 110 corps du message

Les origines peuvent être multiples et sont juxtaposées à l'aide d'un ';'.

  • Elles sont construites sous la forme :
facility.criticity
  • La gravité (criticity) doit être comprise comme la criticité minimale, ainsi user.critical correspond au message d'origine utilisateur pour le niveau de gravité critical et les niveaux supérieurs, en l'occurrence alert et emergency.
  • Le mot-clef "none" peut lui aussi être utilisé afin de filtrer les messages, il est alors utilisé en lieu et place de la gravité.

4.2. Niveaux de gravité

N Niveau Signification
0 Emerg Système inutilisable
1 Alert Une intervention immédiate est nécessaire
2 Crit Erreur critique pour le système
3 Err Erreur de fonctionnement
4 Warning Avertissement
5 Notice Événement normal méritant d'être signalé
6 Informational Pour information seulement
7 Debug Déboggage

4.3. Origine

Outre les niveaux de gravité, les messages sont orientés au regard de leur origine, dont les codes sont regroupés suivant des types que l’on appelle des “facilités”, soit l'origine, de local0 à local7 à personnaliser. On peut trouver :

Facilité Origine
AUTH Message de sécurité/autorisation
AUTHPRIV Message de sécurité/autorisation (privé).
CRON Message d'un démon horaire
DAEMON Démon du système sans classification particulière.
FTP Démon ftp.
KERN Message du noyau.
LOCAL0 à LOCAL7 Réservé pour des utilisations locales.
LPR Message du sous-système d'impression.
MAIL Message du sous-système de courrier.
NEWS Message du sous-système des news USENET.
SYSLOG Message interne de syslogd
USER (défaut) Message utilisateur générique.
UUCP Message du sous-système UUCP.

4.4. Journalisation Rsyslog

Configuration

cat -n /etc/rsyslog.conf
     1  # rsyslog configuration file
     2
     3  # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
     4  # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
     5
     6  #### MODULES ####
     7
     8  # The imjournal module bellow is now used as a message source instead of imuxsock.
     9  $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    10  $ModLoad imjournal # provides access to the systemd journal
    11  #$ModLoad imklog # reads kernel messages (the same are read from journald)
    12  #$ModLoad immark  # provides --MARK-- message capability
    13
Partie concernant le service réseau.
    14  # Provides UDP Syslog reception
    15  #$ModLoad imudp
    16  #$UDPServerRun 514
    17
    18  # Provides TCP Syslog reception
    19  #$ModLoad imtcp
    20  #$InputTCPServerRun 514
    21
    22
    23  #### GLOBAL DIRECTIVES ####
    24
    25  # Where to place auxiliary files
    26  $WorkDirectory /var/lib/rsyslog
    27
    28  # Use default timestamp format
    29  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    30
    31  # File syncing capability is disabled by default. This feature is usually not required,
    32  # not useful and an extreme performance hit
    33  #$ActionFileEnableSync on
    34
    35  # Include all config files in /etc/rsyslog.d/
    36  $IncludeConfig /etc/rsyslog.d/*.conf
    37
    38  # Turn off message reception via local log socket;
    39  # local messages are retrieved through imjournal now.
    40  $OmitLocalLogging on
    41
    42  # File to store the position in the journal
    43  $IMJournalStateFile imjournal.state
    44
    45

Règles de journalisation :

    46  #### RULES ####
    47
    48  # Log all kernel messages to the console.
    49  # Logging much else clutters up the screen.
    50  #kern.*                                                 /dev/console
    51
    52  # Log anything (except mail) of level info or higher.
    53  # Don't log private authentication messages!
    54  *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    55
    56  # The authpriv file has restricted access.
    57  authpriv.*                                              /var/log/secure
    58
    59  # Log all the mail messages in one place.
    60  mail.*                                                  -/var/log/maillog
    61
    62
    63  # Log cron stuff
    64  cron.*                                                  /var/log/cron
    65
    66  # Everybody gets emergency messages
    67  *.emerg                                                 :omusrmsg:*
    68
    69  # Save news errors of level crit and higher in a special file.
    70  uucp,news.crit                                          /var/log/spooler
    71
    72  # Save boot messages also to boot.log
    73  local7.*                                                /var/log/boot.log
    74
    75

Règles de transfert

    76  # ### begin forwarding rule ###
    77  # The statement between the begin ... end define a SINGLE forwarding
    78  # rule. They belong together, do NOT split them. If you create multiple
    79  # forwarding rules, duplicate the whole block!
    80  # Remote Logging (we use TCP for reliable delivery)
    81  #
    82  # An on-disk queue is created for this action. If the remote host is
    83  # down, messages are spooled to disk and sent when it is up again.
    84  #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
    85  #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
    86  #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
    87  #$ActionQueueType LinkedList   # run asynchronously
    88  #$ActionResumeRetryCount -1    # infinite retries if host is down
    89  # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    90  #*.* @@remote-host:514
    91  # ### end of the forwarding rule ###

Rotation

man logrotate

Fichier de configuration

cat -n /etc/logrotate.conf
     1  # see "man logrotate" for details
     2  # rotate log files weekly
     3  weekly
     4
     5  # keep 4 weeks worth of backlogs
     6  rotate 4
     7
     8  # create new (empty) log files after rotating old ones
     9  create
    10
    11  # use date as a suffix of the rotated file
    12  dateext
    13
    14  # uncomment this if you want your log files compressed
    15  #compress
    16
    17  # RPM packages drop log rotation information into this directory
    18  include /etc/logrotate.d
    19
    20  # no packages own wtmp and btmp -- we'll rotate them here
    21  /var/log/wtmp {
    22      monthly
    23      create 0664 root utmp
    24      minsize 1M
    25      rotate 1
    26  }
    27
    28  /var/log/btmp {
    29      missingok
    30      monthly
    31      create 0600 root utmp
    32      rotate 1
    33  }
    34
    35  # system-specific logs may be also be configured here.

Script de rotation

cat -n  /etc/cron.daily/logrotate
     1  #!/bin/sh
     2
     3  /usr/sbin/logrotate /etc/logrotate.conf
     4  EXITVALUE=$?
     5  if [ $EXITVALUE != 0 ]; then
     6      /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
     7  fi
     8  exit 0

4.5. Journalisation Syslog-ng

Notes

# ls /var/log/*
  • Debian/Ubuntu
# tail /var/log/syslog
# ls /etc/init.d/syslog*
  • service syslog-ng, Centos/RHEL :

journalctl (systemd) :
$ man journalctl
# journalctl -xn

Journaux et filtres bien connus ...

5. SELINUX

5.1. Introduction à SELinux

  • DAC (Unix)
  • RBAC (sudo)
  • MAC (AppArmor)
  • MAC (SELINUX)

Security-Enhanced Linux, abrégé SELinux, est un Linux security module (LSM), qui permet de définir une politique de contrôle d'accès obligatoire aux éléments d'un système issu de Linux.

Son architecture dissocie l'application de la politique d'accès et sa définition. Il permet notamment de classer les applications d'un système en différents groupes, avec des niveaux d'accès plus fins. Il permet aussi d'attribuer un niveau de confidentialité pour l'accès à des objets systèmes, comme des descripteurs de fichiers, selon un modèle de sécurité multiniveau (MLS pour Multi level Security). SELinux utilise le modèle Bell LaPadula complété par le mécanisme Type enforcement de contrôle de l'intégrité, développé par SCC. Il s'agit d'un logiciel libre, certaines parties étant sous licences GNU GPL et BSD.

D'origine militaire, afin de réduire les coûts, et de donner accès à ce type de logiciel au secteur privé (banques, services de santé, etc.) pour se protéger des pirates informatiques, son auteur a décidé de placer ce logiciel sous licence open source. L'objectif est la formation d'une communauté de chercheurs, d'utilisateurs et d'entreprises pour améliorer le logiciel et fournir des solutions avancées. (https://fr.wikipedia.org/wiki/SELinux)

5.2. Terminologie SELinux

  • Policy : un ensemble de règles qui déterminent les accès des sources aux cibles.
  • Domaine Source : un objet (processus ou utilisateur) qui tente d'accéder à une cible.
  • Domaine Cible : un objet (un fichier ou un port) auquel un domaine source tente d'accéder;
  • Contexte / Etiquette : une étiquette de sécurité qui permet d'organiser les objets SELinux
  • Règle : partie d'un policy qui décide les permissions d'un domaine source à un domaine cible

5.3. Modes SELinux

  • Enforcing : SELinux est en mode enforced. SELinux refuse les accès basés sur des règles SELinux.
  • Permissive : SELinux n'est pas en mode enforced. SELinux ne refuse aucun accès mais ceux qui enfraignent les règles SELinux sont journalisés.
  • On connait aussi un mode targeted ciblé sur une application.
# cat /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
# getenforce
Enforcing
# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
# setenforce 0
# getenforce
Permissive
# setenforce 1
# getenforce
Enforcing
# sestatus -v
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Process contexts:
Current context:                unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context:                   system_u:system_r:init_t:s0
/usr/sbin/sshd                  system_u:system_r:sshd_t:s0-s0:c0.c1023

File contexts:
Controlling terminal:           unconfined_u:object_r:user_tty_device_t:s0
/etc/passwd                     system_u:object_r:passwd_file_t:s0
/etc/shadow                     system_u:object_r:shadow_t:s0
/bin/bash                       unconfined_u:object_r:shell_exec_t:s0
/bin/login                      unconfined_u:object_r:login_exec_t:s0
/bin/sh                         unconfined_u:object_r:bin_t:s0 -> unconfined_u:object_r:shell_exec_t:s0
/sbin/agetty                    unconfined_u:object_r:getty_exec_t:s0
/sbin/init                      unconfined_u:object_r:bin_t:s0 -> unconfined_u:object_r:init_exec_t:s0
/usr/sbin/sshd                  system_u:object_r:sshd_exec_t:s0

Le contexte est l'étiquette qui peut être appliquée à différents éléments tels que :

  • Utilisateur (u)
  • Rôle ®
  • Type (t)
  • Niveau (s)
  • Rôle ®

5.4. Vérifier la présence des outils de gestion

5.5. Utilisateur SELinux

# semanage login -l

Nom pour l'ouverture de session Identité SELinux     Intervalle MLS/MCS   Service

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *

5.6. Contextes

  • Domaines de transition
# ls -Z /usr/bin/passwd
-rwsr-xr-x. root root unconfined_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
# ls -Z /etc/shadow
----------. root root system_u:object_r:shadow_t:s0    /etc/shadow
  • Contextes des processus
# ps -eZ
  • Contextes des utilisateurs
id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

5.7. Exemples de modification de contexte

  • Service httpd
# yum -y install httpd
# ls -Z /var/www
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
# mkdir /opt/www
# semanage fcontext -a -t httpd_sys_content_t "/opt/www(/.*)?"
# restorecon -R -v /opt/www
restorecon reset /opt/www context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
  • Substitution de /home1 vers /home
# semanage fcontext -a -e /home /home1
# restorecon -R -v /home1

Manipuler les "booleans"

En changeant les valeurs de "booleans", on peut modifier le comportement de SELinux :

  • Pour lister des booleans :

    # getsebool -a
    # getsebool -a | grep httpd
    httpd_anon_write --> off
    httpd_builtin_scripting --> on
    httpd_can_check_spam --> off
    httpd_can_connect_ftp --> off
    httpd_can_connect_ldap --> off
    httpd_can_connect_mythtv --> off
    httpd_can_connect_zabbix --> off
    httpd_can_network_connect --> off
    httpd_can_network_connect_cobbler --> off
    httpd_can_network_connect_db --> off
    httpd_can_network_memcache --> off
    httpd_can_network_relay --> off
    httpd_can_sendmail --> off
    ...
    

  • C'est le logiciel setsebool qui permet de modifier ces valeurs :

# man setsebool
setsebool(8)          SELinux Command Line documentation          setsebool(8)

NAME
       setsebool - set SELinux boolean value

SYNOPSIS
       setsebool [ -PNV ] boolean value | bool1=val1 bool2=val2 ...

DESCRIPTION
       setsebool  sets  the current state of a particular SELinux boolean or a
       list of booleans to a given value. The value may be 1 or true or on  to
       enable the boolean, or 0 or false or off to disable it.

       Without  the -P option, only the current boolean value is affected; the
       boot-time default settings are not changed.

       If the -P option is given, all pending values are written to the policy
       file on disk. So they will be persistent across reboots.

5.8. Logs SELinux

# grep AVC /var/log/audit/audit.log
# sealert

5.9. Restaurer les contextes par défaut définis de tous les fichiers du système

Sera nécessaire après chaque modification de SELinux.

  • avec restorecon sur la racine :

    # restorecon -R -v /
    

  • Avec le fichier /.autorelabel et redémarrage

    # touch /.autorelabel
    # shutdown -r now
    

5.10. SELINUX pour Debian

ATTENTION Politique de référence absente de Jessie

Les responsables du paquet source refpolicy n'ont malheureusement pas pu traiter à temps les bogues critiques du paquet, et ce dernier a donc été supprimé de Jessie. En pratique, cela signifie que les paquets selinux-policy-* ne sont pas disponibles dans Jessie, et qu'ils doivent être récupérés depuis une autre distribution. Nous espérons qu'ils reviendront dans une version corrective, ou dans les rétroportages. En attendant, vous pouvez les récupérer dans Unstable.

Ce triste constat montre au moins que SELinux n'est pas très populaire parmi les utilisateurs et développeurs qui se servent des versions de développement de Debian. C'est pourquoi, lorsqu'on choisit d'utiliser SELinux, il faut s'attendre à passer un temps non négligeable à l'adapter à ses besoins spécifiques.*

Source : https://debian-handbook.info/browse/fr-FR/stable/sect.selinux.html

Installation de SELINUX en Debian 9 (Stretch)

apt update
apt install selinux-*
perl -pi -e 's,GRUB_CMDLINE_LINUX="(.*)"$,GRUB_CMDLINE_LINUX="$1 selinux=1 security=selinux",' /etc/default/grub
update-grub
fixfiles relabel
reboot

6. AppArmor (Debian 8)

AppArmor est un système de contrôle d'accès obligatoire (Mandatory Access Control) qui s'appuie sur l'interface Linux Security Modules fournie par le noyau Linux. Concrètement, le noyau interroge AppArmor avant chaque appel système pour savoir si le processus est autorisé à effectuer l'opération concernée. Ce mécanisme permet à AppArmor de confiner des programmes à un ensemble restreint de ressources. AppArmor applique un ensemble de règles (un « profil ») à chaque programme. Le profil appliqué par le noyau dépend du chemin d'installation du programme à exécuter.

Contrairement à SELinux, les règles appliquées ne dépendent pas de l'utilisateur : tous les utilisateurs sont concernés par le même jeu de règles lorsqu'ils exécutent le même programme (mais les permissions habituelles des utilisateurs jouent toujours, ce qui peut donner un comportement différent). Les profils AppArmor sont stockés dans /etc/apparmor.d/ ; ils consistent en une liste de règles de contrôle d'accès sur les ressources que peut utiliser chaque programme. Les profils sont compilés et chargés dans le noyau par le biais de la commande apparmor_parser. Chaque profil peut être chargé soit en mode strict (enforcing) soit en mode relâché (complaining). Le mode strict applique les règles et rapporte les tentatives de violation, alors que le mode relâché se contente d'enregistrer dans les journaux système les appels système qui auraient été bloqués, sans les bloquer réellement.

Source : https://debian-handbook.info/browse/fr-FR/stable/sect.apparmor.html

apt update
apt install apparmor apparmor-profiles apparmor-utils
perl -pi -e 's,GRUB_CMDLINE_LINUX="(.*)"$,GRUB_CMDLINE_LINUX="$1 apparmor=1 security=apparmor",' /etc/default/grub
update-grub
reboot
aa-status
aa-unconfined
sysctl -w kernel.printk_ratelimit=0
aa-genprof sshd
cat /etc/apparmor.d/usr.sbin.sshd
Référence : http://wiki.apparmor.net/index.php/Main_Page

7. Sauvegardes

Commentaires