Securelevel
Par défaut, actuellement le niveau de sécurité par défaut d’OpenBSD semble être déjà un acquis.
Le manpage securelevel nous restitue une information pertinente. Il
est possible d’augmenter ce niveau en utilisant la commande sysctl
,
telle que :
# sysctl -w kern.securelevel=2
Mais soyez conscient des difficultés créées :
- Impossible de modifier l’horloge système - (pensez à la synchronisation NTP, par exemple…) -,
- ou vos règles PF si jamais vous les avez configurées,
- etc…
Système de fichiers en lecture seule
ATTENTION : Avec OpenBSD 6.4, il semble que cela pose plus d’un soucis. Les sockets qui ne peuvent être copiées ; les services qui ne peuvent être démarrés, voire redémarrés ; la régénération du kernel qui ne se fait pas ; les logs PF non consultables, etc…
et unveil(2) qui logiquement se plaint !
(…) unveil: Read-only file system
Un autre moyen est de rester en securelevel
par défaut à 1
, mais
d’utiliser les options de montage, tel que ro
principalement, mais
aussi nodev,noexec,nosuid
sur les différentes partitions du système de
fichier ffs.
Pour cela, il faut d’abord modifier le fichier /etc/fstab
, de manière
à ce que soit créé au démarrage un système de fichier mfs
(swap)
pour monter les périphériques /dev
dedans
Ne pas oublier cette écriture, sinon, vous aurez quelques difficultés pour "monter" dynamiquement certains périphériques spéciaux , parfois nécessaires, pour certains services, tel SSH !
Copiez votre fichier /etc/fstab
de manière à en faire une sauvegarde -
cela pourrait être utile plus tard !
# cp /etc/fstab /root/fstab.origin ; chmod 0400 /root/fstab.origin
Modification du fichier /etc/fstab
duid_info.b none swap sw
duid_info.a / ffs ro 1 1
duid_info.k /home ffs ro,nodev,noexec,nosuid 1 2
duid_info.d /tmp ffs rw,nodev,noexec,nosuid 1 2
duid_info.f /usr ffs ro,nodev 1 2
duid_info.g /usr/X11R6 ffs ro,nodev 1 2
duid_info.h /usr/local ffs ro,nodev,wxallowed 1 2
duid_info.j /usr/obj ffs ro,nodev,nosuid 1 2
duid_info.i /usr/src ffs ro,nodev,nosuid 1 2
duid_info.e /var ffs rw,nodev,noexec,nosuid 1 2
swap /dev mfs rw,-i=1024,-P=/dev,-s=32m 0 0
ATTENTION à ces deux points essentiels :
- la partition
/tmp
, et/var
ont besoin de rester en écriture ; néanmoins, il n’est pas nécessaire d’avoir des droits en exécution, ni suid, ni d’écriture de périphériques spéciaux. - la partition
/home
peut être en lecture seule ; néanmoins, soyez conscient que cela vous compliquera la tâche pour ajouter/créer/détruire tout fichier dans votre répertoire personnel, surtout dans le contexte d’une machine.
De même si vous souhaitez tester du code (python, shell, …) après avoir cloné des dépôts git, compiler des binaires pour les tester…
dans ce cas-là, c’est l’optionnoexec
qui vous empêchera une telle activité, somme toute légitime.
À vous de voir…
Création du fichier sysmount
Le script sysmount
nous facilitera la vie, pour autoriser l’écriture et verrouiller des
différentes partitions le nécessitant :
#!/bin/sh
#set -x
###
#
# Author: Stéphane HUC
# mail: devs@stephane-huc.net
# gpg:fingerprint: CE2C CF7C AB68 0329 0D20 5F49 6135 D440 4D44 BD58
#
# License: BSD Simplified
#
# Github:
#
# Date: 2018/10/10
#
###
arg="$1"
################################################################################
###
##
# FUNCTIONS
##
###
################################################################################
# mount FS in rw mode
rw() {
printf "%s \n" "*** Mount FS in rw mode! ***"
mount -uw /
mount -uw /usr
mount -uw /usr/X11R6
mount -uw /usr/local
printf "%s \n" "--- DONE! ---"
}
#mount FS in ro mode
ro() {
printf "%s \n" "*** Mount FS in ro mode! ***"
mount -ur /usr/local
mount -ur /usr/X11R6
mount -ur /usr
mount -ur /
printf "%s \n" "--- DONE! ---"
}
################################################################################
###
##
# EXECUTION
##
###
################################################################################
if [ "${arg}" = "rw" ]; then rw; elif [ "${arg}" = "ro" ]; then ro; fi
L’usage en est très simple : avant l’installation d’un binaire, ou la modification d’un fichier de configuration, un coup de :
./sysmount rw
pour autoriser l’écriture sur le système de fichier,- puis ensuite de
./sysmount ro
pour l’empêcher à nouveau`
et, voilà !
Soyez attentif au fait que ce script ne gère QUE les droits
d’écriture sur la racine ainsi que les partitions /usr/
principales…
Il vous faudra le modifier en conséquence pour gérer soit d’autres partitions, soit d’autres options !
Lorsqu’il faudra mettre à niveau le système d’exploitation, veuillez lire cet autre article : [Mini-Tuto] Upgrade Hardened OpenBSD
Documentations
Manpages
Remerciements
Un petit “gros” merci @Vincent pour ces tutoriels sur le durcissement du système de fichier OpenBSD : ici ou là.