IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vérification, configuration et personnalisation d'OpenBSD

Date de publication : 07/03/2008

Par Olivier Regnier (Autres articles)


1. Conventions
2. Note
3. Premier démarrage
3.1. Clavier
3.2. Fuseau horaire
3.3. Date système
3.4. Points de montage
3.5. Nom d'hôte et de domaine
3.6. Interface(s) réseau
3.7. Tables de routage
3.8. Démons
3.9. Activité système
3.10. Tâches cron
3.11. Mot de passe root
4. Configuration
4.1. Compte utilisateur
4.2. Compte root
4.3. Démons
4.4. Noyau
4.5. Scripts de commande système
4.6. Scripts daily, weekly et monthly
4.7. Autres fichiers dans /etc
4.8. Alias email
4.9. Sendmail
4.10. Paquets et ports
4.11. Sécurité
5. Personnalisation
5.1. Consoles
5.2. Shell
5.3. Mode mono-utilisateur
5.4. Partition swap
5.5. Partition altroot
5.6. Motd
6. Quotidien
6.1. Rapports système
6.2. Errata et correctifs
7. Remerciements


1. Conventions

Dans cet article, la convention suivante est utilisée:

  • Les commandes et les points importants sont notées en rouge.

  • Les répertoires et les noms de fichiers sont notés en vert.

  • Les variables sont notées en rose foncé.

2. Note

Cet article ne se veut nullement un guide de référence dans la configuration d'OpenBSD. Ce travail se base sur mon expérience personelle et ne prétend aucunement à être un guide définitif. La finalité, l'objectif à atteindre est d'utiliser pleinement OpenBSD sur une Station de travail.


3. Premier démarrage


3.1. Clavier

Type de clavier choisit durant l'installation: fr.

Vérifiez la valeur de /etc/kbdtype, elle doit correspondre à celle indiquée ci-dessus, sinon utilisez la commande kbd(8).
# kbd fr
kbd: keyboard mapping set to fr

3.2. Fuseau horaire

Fuseau horaire choisit durant l'installation: Europe/Paris.

Vérifiez le fuseau horaire via le lien symbolique de /etc/localtime, il devrait être lié à celui indiqué ci-dessus,
# ls -l /etc/ | grep "localtime"
lrwxr-xr-x    1 root  wheel       32 Feb 22 16:04 localtime -> /usr/share/zoneinfo/Europe/Paris
sinon, utilisez la commande ln(1) vers le bon fuseau horaire dans /usr/share/zoneinfo/.
# ln -fs /usr/share/zoneinfo/Europe/Paris /etc/localtime

3.3. Date système

Vérifiez la date système avec la commande date(1),
# date
Sun Feb 24 10:15:58 CET 2008
elle est incorrecte ou légèrement décalée, utilisez cette même commande pour la modifier.
# date 200802261819 > 2008   02   26   18    19
                      année  mois jour heure minutes
Vous pouvez également synchroniser votre horloge à celle d'un serveur de référence distant avec OpenNTPD.

Rappelez-vous, durant l'installation, le démon ntpd a été configuré de manière à être lancé au démarrage. Vérifiez /etc/rc.conf.local.
# cat /etc/rc.conf.local
ntpd_flags=         # enabled during install
L'horloge de votre système va avancer doucement et restera synchronisée avec les serveurs de temps public de pool.ntp.org.

infoLa synchronisation d'une horloge très décalée peut prendre des jours, voir des semaines.
Utilisez alors la commande ntpd(8). Si vous souhaitez modifier la configuration par défaut de ntpd, éditez /etc/ntpd.conf.
# ntpd -s

3.4. Points de montage

Points de montage créés durant l'installation:
# Nom du point de montage     Taille
/ (root)                      256.0M
swap                          512.0M
/var                          256.0M
/var/log                       64.0M
/tmp                          256.0M
/usr                           10.0G
/usr/obj                        2.0G
/usr/src                        2.0G
/home                          10.0G
/altroot                      512.0M

Vérifiez que vos points de montage soient correctement montés en affichant /etc/fstab via la commande cat(1).
# cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/wd0k /altroot ffs rw,nodev,nosuid 1 2
/dev/wd0j /home ffs rw,nodev,nosuid 1 2
/dev/wd0f /tmp ffs rw,nodev,nosuid 1 2
/dev/wd0g /usr ffs rw,nodev 1 2
/dev/wd0h /usr/obj ffs rw,nodev,nosuid 1 2
/dev/wd0i /usr/src ffs rw,nodev,nosuid 1 2
/dev/wd0d /var ffs rw,nodev,nosuid 1 2
/dev/wd0e /var/log ffs rw,nodev,nosuid 1 2
Exécutez les commandes mount(8) et df(1) puis comparez les résultats obtenus avec /etc/fstab,
# mount
/dev/wd0a on / type ffs (local)
/dev/wd0k on /altroot type ffs (local, nodev, nosuid)
/dev/wd0j on /home  type ffs (local, nodev, nosuid)
/dev/wd0f on /tmp  type ffs (local, nodev, nosuid)
/dev/wd0g on /usr type ffs (local, nodev)
/dev/wd0h on /usr/obj type ffs (local, nodev, nosuid)
/dev/wd0i on /usr/src type ffs (local, nodev, nosuid)
/dev/wd0d on /var type ffs (local, nodev, nosuid)
/dev/wd0e on /var/log type ffs (local, nodev, nosuid

# df
Filesystem  512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a       515804     65472    424544    13%    /
/dev/wd0k      1031900         4    980304     0%    /altroot
/dev/wd0j     20151964         4  19144364     0%    /home
/dev/wd0f       515804        12    490004     0%    /tmp
/dev/wd0g     20151964   1008060  18136308     5%    /usr
/dev/wd0h      4030364         4   3828844     0%    /usr/obj
/dev/wd0i      4030364         4   3828844     0%    /usr/src
/dev/wd0d       515804     10444    479572     2%    /var
/dev/wd0e       128732        44    122252     0%    /var/log
sinon, éditez /etc/fstab puis utilisez les commandes mount(8), umount(8) et consultez la page du manuel de fstab(5) pour comprendre le format de ce fichier.

Vérifiez également l'utilisation de l'espace de pagination (swap) avec la commande pstat(8).
# pstat -s
Device       512-blocks     Used     Avail Capacity  Priority
swap_device     1048576        0   1048576     0%    0

3.5. Nom d'hôte et de domaine

Nom d'hôte et de domaine choisit durant l'installation: danny et delta.

Vérifiez les valeurs de /etc/myname et celles retournées via la commande hostname(1), elles doivent correspondres.
# hostname
danny.delta
sinon, éditez et modifiez /etc/myname, sauvegardez et redémarrez votre système pour activer les changements.


3.6. Interface(s) réseau

Type de configuration choisit durant l'installation: dhcp.

Vérifiez que l'interface réseau, ici sis0, soit proprement paramétrée avec la commande ifconfig(8),
# ifconfig sis0
sis0: flags=8843<UP,LOOPBACK,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:c0:9f:a4:d2:f0
        groups: egress
        media: Ehtnernet autoselect (100baseTX full-duplex)
        status: active
        inet6 fe80::2c0:9fff:fea4:d2f0%sis0 prefixlen 64 scopeid 0x1
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
et aussi la valeur de /etc/hostname.sis0 (voir hostname.if(5)), elle doit contenir le mot dhcp.
# cat /etc/hostname.sis0
dhcp NONE NONE NONE
sinon, écrivez le avec la commande echo(1).
# echo dhcp > /etc/hostname.sis0
Ceci aura pour effet de démarrer le client dhcp au prochain redémarrage.

Pour recharger l'ensemble de vos paramètres réseaux, utilisez la commande sh(1) (voir aussi netstart(8)):
# sh /etc/netstart
DHCPREQUEST on sis0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.3 -- renewal in 43200 seconds.
ou uniquement ceux de votre interface:
# sh /etc/netstart sis0

3.7. Tables de routage

Vérifiez les tables de routages avec les commandes route(8) ou netstat(1).
# route show
Routing table

Internet:
Destination         Gateway            Flags    Refs     Use     Mtu  Interface
default             192.168.1.1        UGS         4     200       -   sis0
loopback            localhost          UGRS        0       0   33208   lo0
localhost           localhost          UH          2       0   33208   lo0
192.168.1./24       link#1             UC          1       0       -   sis0
192.168.1.1         00:14:6c:f1:4c:8a  UHLc        1      30       -   sis0
192.168.1.3         localhost          UGHS        0       0   33208   lo0
BASE-ADDRESS.MCAST  localhost          URS         0       0   33208   lo0

Internet6:
Destination         Gateway            Flags    Refs     Use     Mtu  Interface
::/104              localhost.delta    UGRS        0       0       -   lo0
::/96               localhost.delta    URGS        0       0       -   lo0
localhost.delta     localhost.delta    UH         14       0   33208   lo0
::127.0.0.0/104     localhost.delta    URGS        0       0       -   lo0
::224.0.0.0/100     localhost.delta    URGS        0       0       -   lo0
::255.0.0.0/104     localhost.delta    URGS        0       0       -   lo0
::ffff:0.0.0.0/96   localhost.delta    URGS        0       0       -   lo0
2002::/24           localhost.delta    URGS        0       0       -   lo0
2002:7f00::/24      localhost.delta    URGS        0       0       -   lo0
2002:e000::/20      localhost.delta    URGS        0       0       -   lo0
2002:ff00::/24      localhost.delta    URGS        0       0       -   lo0
fe80::/10           localhost.delta    URGS        0       0       -   lo0
fe80::%sis0/64      link#1             UC          0       0       -   sis0
fe80::2c0:9fff:fea  00:c0c9f:a4:d2:f0  UHL         0       0       -   lo0
fe80::%lo0/64       fe80::1%lo0        U           0       0       -   lo0
fe80::1%lo0         link#3             UHL         0       0       -   lo0
fec0::/10           localhost.delta    UGRS        0       0       -   lo0
ff01::/16           localhost.delta    UGRS        0       0       -   lo0
ff01::%sis0/32      link#1             UC          0       0       -   sis0
ff01::%lo0/32       localhost.delta    UC          0       0       -   lo0
ff02::/16           localhost.delta    UGRS        0       0       -   lo0
ff02::%sis0/32      link#1             UC          0       0       -   sis0
ff02::%lo0/32       localhost.delta    UC          0       0       -   lo0

3.8. Démons

Démons activés durant l'installation: sshd et ntpd.

Vérifiez que sshd(8) est bien été activé via /etc/rc.conf.
# cat /etc/rc.conf | grep "sshd"
sshd_flags=""          " for normal use: ""
sinon, insérez la ligne ci-dessus dans /etc/rc.conf.local.

Vérifiez également, le démon ntpd(8) via le /etc/rc.conf.local.
# cat /etc/rc.conf.local | grep "ntpd"
ntpd_flags=""          " enabled during install
sinon, insérez-y la ligne ci-dessus.

Sauvegardez et démarrez les démons pour activer les changements.
# /usr/sbin/sshd
# /usr/sbin/ntpd

3.9. Activité système

Vérifiez l'activité du système en temps réel avec seulement quelques commandes.

Le statut des processus comme ceux en cours d'exécution avec la commande ps(1).
# ps -aux
USER        PID %CPU %MEM   VSZ    RSS  TT  STAT  STARTED       TIME COMMAND
root          1  0.0  0.1   528    348  ??  Is    12:33AM    0:00.00 /sbin/init
_dhcp     27103  0.0  0.1   548    312  ??  Is    12:33AM    0:00.00 dhclient: sis0 (dhclient)
root      30889  0.0  0.1   348    656  ??  Is    12:33AM    0:00.00 syslogd: [priv] (syslogd)
_syslogd  26370  0.0  0.2   376    724  ??  I     12:33AM    0:00.01 syslod -a /var/empty/dev/log
_ntp       6753  0.0  0.2   536    712  ??  S     12:33AM    0.00.02 ntpd: ntp engine (ntpd)
root      26985  0.0  0.2   604    756  ??  Is    12:33AM    0.00.00 ntpd: [priv] (ntpd)
root       6624  0.0  0.2   280    716  ??  Is    12:33AM    0:00.00 inetd
root      26093  0.0  0.3   652   1160  ??  Is    12:33AM    0.00.00 /usr/sbin/sshd
root      22506  0.0  0.2   532    848  ??  Ss    12:33AM    0.00.00 cron
root      26418  0.0  0.3  1152   1536  ??  Ss    12:33AM    0.00.01 sendmail: accepting connections (sendmail)
root      31272  0.0  0.1   496    380  C0- I     12:33AM    0.00.00 dhclient: sis0 [priv] (dhclient)
root      27007  0.0  0.2   264    768  C0  Is+   12:33AM    0.00.00 /usr/libexec/getty PC ttyC0
olivier    6450  0.0  0.1   428    488  C1  Ss    12:33AM    0.00.02 -ksh (ksh)
olivier    6824  0.0  0.1   380    280  C1  R+    12:33AM    0.00.00 ps -aux
root      32533  0.0  0.2   416    756  C2  Is+   12:33AM    0.00.00 /usr/libexec/getty Pc ttyC2
root       9603  0.0  0.2   272    760  C3  Is+   12:33AM    0.00.00 /usr/libexec/getty PC ttyC3
L'état du réseau comme les ports ouverts par défaut avec la commande netstat(1).
# netstat -a | grep "LISTEN"
tcp      0      0   localhost.submissi     *.*       LISTEN
tcp      0      0   localhost.smtp         *.*       LISTEN
tcp      0      0   *.ssh                  *.*       LISTEN
tcp      0      0   *.time                 *.*       LISTEN
tcp      0      0   *.daytime              *.*       LISTEN
tcp      0      0   *.auth                 *.*       LISTEN
tcp6     0      0   localhost.submissi     *.*       LISTEN
tcp6     0      0   localhost.smtp         *.*       LISTEN
tcp6     0      0   *.ssh                  *.*       LISTEN
tcp6     0      0   *.time                 *.*       LISTEN
tcp6     0      0   *.daytime              *.*       LISTEN
tcp6     0      0   *.auth                 *.*       LISTEN
Le statut des fichiers ouverts comme ceux pour un utilisateur donné avec la commande fstat(1).
# fstat -u olivier
USER     CMD           PID   FD  MOUNT    INUM  MODE        R/W     DV|SZ
olivier  fstat        7663   wd  /home   51968  drwxr-xr-r    r       512
olivier  fstat        7663    0  /       17323  crw-------   rw     ttyC1
olivier  fstat        7663    1  /       17323  crw-------   rw     ttyC1
olivier  fstat        7663    2  /       17323  crw-------   rw     ttyC1
olivier  fstat        7663    3  /       17715  crw-r-----    r       mem
olivier  fstat        7663    4  /       17716  crw-r-----    r      kmem
olivier  fstat        7663    5  /       17723  crw-r-----    r      drum
olivier  fstat        7663    6  /var    16417  -rw-r--r--    r   1290240
olivier  fstat        7663    7  /        8955  -rw-r--r--    r     40960
olivier    ksh       28120   wd  /home   51968  drwxr-xr-r    r       512
olivier    ksh       28120    0  /       17323  crw-------   rw     ttyC1
olivier    ksh       28120    1  /       17323  crw-------   rw     ttyC1
olivier    ksh       28120    2  /       17323  crw-------   rw     ttyC1
olivier    ksh       28120    3  /       17714  crw-rw-rw-   rw       tty

3.10. Tâches cron

Vérifiez ce qui est en cours d'exécution par défaut avec la commande crontab(1).
# crontab -l
#
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday command
#
# sendmail clientmqueue runner
*/30    *   *    *      *    /usr/sbin/sendmail -L sm-msp-queue -Ac -q
#
# rotate log files every hour, if necessary
0       *   *    *      *    /usr/bin/newsyslog
# send log file notifications, if necessary
#1-59   *   *    *      *    /usr/bin/newsyslog -m
#
# do daily/weekly/monthly maintenance
30      1   *    *      *    umask 077; /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | mail -s "`/bin/hostname` daily output" root
30      3   *    *      6    umask 077; /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | mail -s "`/bin/hostname` weekly output" root
30      5   1    *      *    umask 077; /bin/sh /etc/montly 2>&1 | tee /var/log/monthly.out | mail -s "`/bin/hostname` monthly output" root
#0      *   *    *      *    /usr/libexec/spamd-setup
Pour ajouter/modifier quelque chose, éditez le crontab courant avec cette même commande et consultez la page du manuel de crontab(5) pour comprendre le format de ce fichier.
# crontab -e
ideaVotre ordinateur fonctionne uniquement dans la journée ? Modifiez alors, l'heure d'exécution des scripts de maintenance (daily, weekly et monthly).

3.11. Mot de passe root

Un mot de passe a été choisit durant l'installation pour l'utilisateur root. S'il se veut simpliste, il est recommandé de le modifier avec la commande passwd(1).
# /usr/bin/passwd
Changing local password for root.
New password: motdepasse
Retype new password: motdepasse
infoIl doit être composé de lettres, chiffres, caractères alpha numériques, sans espace et sa longueur doit être comprise entre 6 à 128 caractères.

4. Configuration


4.1. Compte utilisateur

Habituez-vous à utiliser votre compte utilisateur et non celui de root pour une utilisation régulière et/ou effectuer des opérations de maintenance sous OpenBSD.

Créez-vous un compte avec la commande adduser(8) en suivant les étapes suivantes:
# adduser
Couldn't find /etc/adduser.conf: creating a new adduser configuration file
Reading /etc/shells
Enter your default shell: csh ksh nologin sh [ksh] Entrée
Your default shell is: ksh -> /bin/ksh
Default login class: auth daemon default staff [default] Entrée
Enter your default HOME partition: [/home]: Entrée
Copy dotfiles from: /etc/skel no [/etc/skel]: Entrée
Send message from file: /etc/adduser.message no [no]: Entrée
Do not send message
Prompt for passwords by default (y/n) [y]: Entrée
Default encryption method for passwords: auto blowfish des md5 old
[auto]: blowfish
Use option ``-silent`` if you don't want to see all warnings and questions.

Reading /etc/shells
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. There will be a chance later to correct any input.
Enter username []: olivier
Enter full name []: Olivier Regnier
Enter shell csh ksh nologin sh [ksh]: Entrée
Uid [1000]: Entrée
Login group olivier [olivier]: Entrée
Login group is ``olivier``. Invite olivier into other groups: guest no
[no]: wheel
Login class authpf daemon default staff [default]: Entrée
Enter password []: motdepasse
Enter password again []: motdepasse
Name:          olivier
Password:      ****
Fullname:      Olivier Regnier
Uid:           1000
Gid:           1000 (olivier)
Groups:        olivier wheel
Login Class:   default
HOME:          /home/olivier
Shell          /bin/ksh
Ok? (y/n) [y]: Entrée
Added user ``olivier``
Copy files from /etc/skel to /home/olivier
Add another user? (y/n) [y]: n
Goodbye!

4.2. Compte root


Ajouter un compte utilisateur n'est pas suffisant pour garantir que le compte root ne sera pas utilisé judicieusement. En effet, il est toujours possible de s'authentifier directement à l'invite de session et/ou sur le réseau utilisant ssh (Ce type de manipulations n'est pas recommandé).

Interdire à root de s'authentifier directement en console à l'invite de session

Editez /etc/ttys, puis recherchez le bloc de texte ttyC0 à ttyC5 (laissez ttyC4 tel quel, il est réservée pour l'utilisation de X) et remplacez le mot secure par insecure.
# name  getty                        type    status
  ttyC0 "/usr/libexec/getty Pc"      vt220   on insecure
  ttyC1 "/usr/libexec/getty Pc"      vt220   on insecure
  ttyC2 "/usr/libexec/getty Pc"      vt220   on insecure
  ttyC3 "/usr/libexec/getty Pc"      vt220   on insecure
  ttyC4 "/usr/libexec/getty Pc"      vt220   off secure
  ttyC5 "/usr/libexec/getty Pc"      vt220   on insecure
Sauvegardez et testez. Déconnectez-vous avec la combinaison de touche Ctrl + D (2 fois) et authentifiez-vous avec l'utilisateur root.
OpenBSD/i386 (danny.delta) (ttyC1)

login: root
Password: motdepasse
login: root login refused on this terminal.
infoA partir de maintenant, utilisez les commandes su(1) et sudo(8) via votre compte utilisateur afin de bénéficier des privilèges de root.
Interdire à root de s'authentifier sur le réseau via ssh

Editez /etc/ssh/sshd_config (voir sshd_config(5)) et ajoutez/modifiez la ligne suivante:
PermitRootLogin no
Sauvegardez et relancez ssh pour activer les changements sans redémarrer votre système avec la commande kill(1).
kill -HUP `cat /var/run/sshd.pid`
Testez avec la commande ssh(1).
# ssh root@danny
The authenticity of host 'danny (::1)' can't be established.
RSA key fingerprint is e3:14:d7:fe:1b:3b:8e:3e:90:01:f8:78:27:7f:67:82.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'danny' (RSA) to the list of known hosts.
root@danny's password: motdepasse
Permission denied, please try again.
Ctrl + C
Supprimez le répertoire .ssh créé durant la phase de test.
# rm -rf .ssh

4.3. Démons

Les démons/services sont des programmes qui tournent an tâche de fond. Ils se configurent via le fichier /etc/rc.conf par le biais de variables à activer/désactiver.

Exemple:

Le démon sshd activé:
sshd_flags=""
Le démon sshd désactivé:
sshd_flags=NO
infoNe modifiez pas directement /etc/rc.conf mais /etc/rc.conf.local en y insérant uniquement les lignes que vous comptez modifier dans /etc/rc.conf.
Voici la liste des démons par défaut sous OpenBSD:

  • Les démons activés par défaut sont notés en rouge.

  • Les démons activés durant l'installation sont notés en vert.

  • Les démons activés durant la configuration et personnalisation sont notés en bleu.

  • Les démons désactivés durant la configuration et personnalisation sont symbolisés par (*).
Nom du démon Origine/destination Variable Page de manuel
sendmail /etc/rc.conf sendmail_flags="-L sm-mta -C/etc/mail/localhost.cf -bd -q30m" sendmail(8).
inetd (*) /etc/rc.conf > /etc/rc.conf.local inetd=YES > inetd=NO inetd(8).
quotacheck /etc/rc.conf check_quotas=YES quotacheck(8).
syslogd /etc/rc.conf syslogd_flags= syslogd(8).
sshd /etc/rc.conf sshd_flags="" sshd(8).
ntpd /etc/rc.conf > /etc/rc.conf.local ntpd_flags=NO > ntpd_flags= ntpd(8).
wsmoused /etc/rc.conf > /etc/rc.conf.local wsmoused_flags=NO > wsmoused_flags= wsmoused(8).
infoActivez/désactivez les démons dont vous avez besoin.
Voici quelques commandes utiles pour gérer les démons sans devoir redémarrer votre système.

Démarrer un démon:
# /chemin/nom_du_démon
Stopper un démon:
# kill `cat /var/run/nom_du_démon.pid`
Relancer un démon:
# kill -HUP `cat /var/run/nom_du_démon.pid`
La page du manuel de intro(8) contient un guide complet sur les divers démons disponibles sur le système OpenBSD.


4.4. Noyau

OpenBSD fournit et utilise par défaut un noyau GENERIC considéré par les dévéloppeurs du projet comme suffisant pour une installation standard, et le modifier, présenterait un risque, celui de rendre par exemple votre système inefficace. En effet, la plupart des gens qui utilise des systèmes d'exploitation Open Source, pense que personnaliser et recompiler son noyau sont des étapes cruciales et nécessaires pour la maîtrise du système.

Recompiler son noyau ne signifie pas obligatoirement le personnaliser. La question que l'on peut alors se poser, pourquoi recompiler le noyau GENERIC ? Je vois une seule raison à cela, lui appliquer un correctif (patch) de sécurité. Dans ce cas précis, le noyau doit être recompilé afin de prendre en compte les nouvelles modifications sans pour autant toucher à ses fonctionnalités.

infoLe noyau GENERIC est supporté par l'équipe d'OpenBSD, ce qui n'est pas le cas pour un noyau créé sur mesure.
Malgré l'importance accordée au noyau GENERIC, est-il possible de construire son propre noyau sur mesure ? Oui mais, en avez-vous vraiment besoin ?

Pour plus de détails, concernant la construction et/ou modification du noyau, consultez la page du manuel de config(8).

Concernant la recompilation du noyau, ne vous en préocupez pas pour le moment. Vous comprendrez son utilité en suivant les étapes de mise à jour.


4.5. Scripts de commande système

Les scripts /etc/rc.* sont invoqués au démarrage, à la sortie du mode utilisateur unique (single user mode), et lors de l'arrêt du système. L'ensemble du processus est contrôlé, plus ou moins, par le script-maître /etc/rc. Ce script ne doit pas être modifié par les administrateurs.

A son tour, /etc/rc est influencé par les variables de configuration présentes dans /etc/rc.conf. Là encore, ce script ne doit pas être modifié par les administrateurs: les changements spécifiques au site devraient être effectués dans /etc/rc.conf.local (à créer au besoin).

Toute commande qui doit être exécutée avant que le système ne passe au niveau sécurisé (securelevel) doivent être écrites dans le fichier /etc/rc.securelevel, et les commandes à lancer après le passage au niveau sécurisé dans /etc/rc.local. Les commandes à lancer avant l'arrêt du système sont à placer dans /etc/rc.shutdown.

Pour plus d'informations sur le démarrage du système/fermeture des fichiers, consultez les pages du manuel de rc(8), rc.conf(8), securelevel(7), et rc.shutdown(8).

Si vous avez installé X, vous pouvez activer xdm(1), le gestionnaire de procédures de connexions graphiques. Pour ce faire, changez la valeur de la variable xdm_flags dans /etc/rc.conf.local.


4.6. Scripts daily, weekly et monthly

Consultez et éventuellement éditez les scripts, /etc/daily, /etc/weekly et /etc/monthly. Si vous souhaitez ajouter vos propres modifications, créez et utilisez les fichiers /etc/daily.local, /etc/weekly.local et /etc/monthly.local.

Ces scripts sont limités de façon à maintenir le fonctionnement du système sans utiliser inutilement de l'espace disque et celui réservé aux bases de données des mises à jour. Le script /etc/daily fournit un moyen simple pour sauvegarder quotidiennement le système de fichiers racine (root). Pour plus d'informations, consultez la page du manuel de daily(8) et la section, La partition altroot.


4.7. Autres fichiers dans /etc

La partition /etc/* contient la plupart des fichiers de configuration. Editez-les si besoin.

warningN'éditez pas les fichiers en .db comme pwd.db, spwd.db, ni localtime, ni rmt, ni aucun des répertoires.

4.8. Alias email

Un alias email est une autre appellation pour une même adresse email. Cela veut dire que tous les courriers électroniques adressés à un alias définit pour une adresse seront redirigé automatiquement vers cette même adresse. Il existe sous OpenBSD, trois alias standards, root, manager et dumper qui sont désactivés par défaut. Ils sont utilisés par exemple pour les mailing list ou les administrateurs systèmes. Nous allons activer ces alias afin de recevoir via notre compte utilisateur local, les courriers électroniques concernant les rapports système et autres informations.

Editez /etc/mail/aliases puis recherchez la bloc de texte suivant:
# Well-known aliases -- these should be filled in!
#root:
#manager:
#dumper:
Décommentez et complétez les trois alias et ajoutez en un portant votre nom d'utilisateur.
# Well-known aliases -- these should be filled in!
root:         sysadm
manager:      root
dumper:       root
sysadm:       olivier
Sauvegardez et exécutez la commande newaliases(8) pour activer les changements.
# newaliases
/etc/mail/aliases: 47 aliases, longest 10 bytes, 662 bytes total
A partir de maintenant, tous les courriers électroniques adressés à l'utilisateur root seront directement expédiés à l'utilisateur olivier.


4.9. Sendmail

OpenBSD utilise comme serveur de messagerie électronique sendmail. Par défaut, il utilise le fichier de configuration /etc/mail/localhost.cf (généré à partir de openbsd-localhost.mc dans /usr/share/sendmail/cf) destiné pour des installations simples. Ce type de configuration permet à sendmail d'accepter uniquement les connexions depuis l'hôte local mais refuse celle provenant des interfaces externes. Cela permet d'envoyer des messages en local et non de recevoir du courrier à partir de serveurs distants, idéal si vous disposez d'un ordinateur central de courrier électronique et plusieurs clients.

Sendmail peut aussi fonctionner pour des installations plus complexes en générant vos propres fichiers de configuration. Pour cela, consultez /usr/share/sendmail/README et /usr/share/doc/smm/08.sendmail/op.me. Vous pourrez également accepter les connexions sur les interfaces externes en modifiant la variable send_flags dans /etc/rc.conf.local afin d'utiliser le fichier de configuration /etc/mail/sendmail.cf (généré à partir de openbsd-proto.mc).

infoNotez que par défaut, sendmail écoute aussi sur le port 587 destiné à la mise en place du port "submission" 587/tcp (RFC 2476). Cette fonctionnalité, peut être désactivée via l'option no_default_msa du fichier .mc dans votre sendmail. Pour plus d'informations, consultez /usr/share/sendmail/README.

4.10. Paquets et ports

La collection de ports OpenBSD comprend à ce jour environ 4500 paquets répartis dans différentes catégories en autre, archivers, audio, editors, mail, net, security, shell, etc. Une grande partie est disponible sous la forme de paquets binaires (environ 4360) téléchargeables à l'adresse www.openbsd.org ou un miroir.

Que dois-je utiliser : paquets binaires ou ports ?

Paquets binaires

  • Vous utilisez des PAQUETS STABLES qui ont fait l'objet d'un/plusieurs AUDIT(s) COMPLET DE SECURITE (non les ports).

  • Vous gagnez un temps précieux pour vos installations.

Pour plus de détails, concernant l'installation des paquets binaires, consultez la page du manuel de packages(7).

Ports

  • Vous avez besoin d'un port spécifique car le paquet binaire n'a pas été construit par l'équipe d'OpenBSD.

  • Vous souhaitez examiner/améliorer le code source du port.

  • Vous avez peut être une autre raison ?

Pour plus de détails, concernant l'installation des ports, consultez la page du manuel de ports(7).

infoL'utilisation des paquets binaires est vivement recommandé et suffisante pour un grand nombre d'utilisateurs.
Quoiqu'il en soit, à cette étape de la configuration, il n'est pas nécessaire d'installer d'applications.


4.11. Sécurité

Contrairement à beaucoup de systèmes d'exploitation, le projet OpenBSD est le seul à fournir un système sécurisé pour une installation par défaut avec seulement deux vulnérabilités à distance dans l'installation par défaut, durant plus de 10 ans ! en témoigne. Quels sont les secrets de cette réussite ?

OpenBSD, après une installation par défaut, c'est:

  • des outils de connexion réseau pour se connecter et/ou exécuter des commandes sur une machine distante (OpenSSH). Ils sont destinés à remplacer rlogin, rsh et telnet, et à fournir des communications cryptées sécurisées entre deux hôtes non sécurisé sur un réseau sécurisé. Les connexions X11 et les ports TCP arbitraires peuvent également être transmis sur un canal sécurisé (tunnel).

  • un ensemble de protocoles, Encapsulating Security Payload (ESP) et Authentication Header (AH), qui fournissent des services de sécurité pour les datagrammes IP (IPSEC).

  • un système d'authentification réseau (Kerberos) qui permet l'authentification des utilisateurs et des services dans un environnement réseau sécurisé.

  • un puissant algorithme de cryptage (Blowfish) pour une authentification forte. La taille des blocs est 64 bits et le maximum est la taille de la clé 448 bits.

  • un système d'exploitation simple, propre, robuste, documenté et sécurisé par défaut. Aucun démon/service présentant un risque potentiel est actif.

  • un noyau monolithique, rapide d'exécution et disposant de 4 niveaux de sécurité (securelevel) notamment le niveau -1, mode insécurisé permanent, le niveau 0, mode insécurisé, le niveau 1, mode sécurisé, et le niveau 2, pour un mode hautement sécurisé.

  • les sources du système et les paquets binaires (non les ports) font l'objet d'audit complet de sécurité (Hackathon). Cela a permis de corriger la plupart des erreurs du type buffer overflow (débordement de la mémoire tampon, etc.) détectées.

  • une implémentation d'ACL (listes de contrôle d'accès) au niveau du noyau pour surveiller les appels système (systrace) effectués par les programmes. Il peut être aussi utilisé pour protéger votre système contre les programmes comportant des failles (comme buffer overflow).

  • un programme de délégation de pouvoir (sudo) permettant à un utilisateur autorisé d'exécuter une commande en tant que super-utilisateur.

  • le nombre de programme setuid root "sensibles" à nettement diminué. De 40 dans la version 3.1, on en dénombre aujourd'hui 25 (si le serveur X11 est présent) dans la version 4.2.

  • une pile IP disponible durant la phase d'installation pour configurer automatiquement votre réseau. Passer cette étape, présente un avantage certain, prendre le temps de vérifier, configurer, personnaliser et sécuriser votre système avant sa mise en réseau.

  • un dispositif de protection de pile de donnée (ProPolice) intégré au compilateur gcc et activé par défaut.

  • un mécanisme de protection de la mémoire W^X (prononcé W xor X) qui interdit les pages mémoire d'être à la fois exécutables et modifiables et non les deux à la fois (XOR). L'objectif étant de limiter les attaques du type buffer overflow (débordement de la mémoire tampon).

et bien d'autres.

Accroître sa sécurité:

Sécurisé par défaut, il est possible de renforcer un peu plus la sécurité de son système.

Voici quelques conseils:

  • Utilisez votre compte utilisateur, non celui de root et bénéficiez de ses priviléges avec les commandes su(1) et sudo(8).

  • Choisissez de préférence l'algorithme de cryptage blowfish(3) lors de la création d'un compte utilisateur.

  • Désactivez le/les démon(s) dont vous n'avez pas besoin.

  • Familiarisez-vous et utilisez les outils fournis par OpenSSH, notamment ssh(1) en remplaçement de rlogin et telnet, rcp avec le programme scp(1) et ftp avec le programme sftp(1).

  • Munissez-vous d'une véritable armure personnelle en utilisant le filtre de paquets OpenBSD, pf (Packet Filter).

  • Pensez également à utiliser des chflags(1) sur vos fichiers. Pour plus d'informations, consultez Que sont les file chflags et quels sont-ils ?.

  • Utilisez aussi les niveaux de sécurité du noyau (securelevel). Pour plus d'informations, consultez Qu'est-ce que les niveaux de sécurité du noyau (securelevel) ?

  • Consultez régulièrement la page d'errata et des correctifs importants sans oublier de garder son système à jour.

  • Vérifiez systématiquement les rapports de votre système (maintenance et autres) via votre messagerie locale.

5. Personnalisation


5.1. Consoles

1) Voici une astuce pour effacer la console à chaque fois qu'un utilisateur se déconnecte.

Editez /etc/gettytab puis recherchez le bloc de texte:
P|Pc|Pc console:\
        :np:sp#9600:
Modifiez le de manière à obtenir:
P|Pc|Pc console:\
        :np:sp#9600:\
        :cl=\E[H\E[2J:
Sauvegardez et testez avec la commande # exit (2 fois), l'écran s'efface.

2) Voici une seconde astuce pour activer le support de la souris en mode console.

Editez /etc/rc.conf.local puis insérez la ligne:
wsmoused_flags=      # enabling console mouse support
Sauvegardez et démarrez ce démon.
# /usr/sbin/wsmoused

5.2. Shell

OpenBSD fournit de base, trois interpréteurs, csh(1), sh(1) et ksh(1) ou plutôt pdksh (Public Domain Korn Shell). D'autres sont disponibles via les paquets binaires ou le catalogue de logiciels portés, catégorie, shell notamment, bash et zsh.

infoN'utilisez pas un shell qui n'est pas situé sur la partition racine à l'utilisateur root (bash, zsh, etc.), car la partition /usr n'est pas monté dans le mode mono-utilisateur.
Que peut-on faire/personnaliser avec ksh ? Et consultez la page du manuel de ksh(1) et /etc/ksh.kshrc.


5.3. Mode mono-utilisateur

1) Voici une astuce pour protéger le mode single user.

Changez le niveau de sécurité de la console en éditant /etc/ttys puis en remplaçant:
console "/usr/libexec/getty Pc"         vt220   off secure
par
console "/usr/libexec/getty Pc"         vt220   off
Sauvegardez et testez. Redémarez OpenBSD et lors du démarrage appuyez sur une touche autre que Entrée et utilisez la commande boot(9):
boot /bsd -s
Vous devrez saisir le mot de passe de l'utilisateur root pour accéder à ce mode et entrer le chemin d'accès de votre shell ou bien garder celui proposé par défaut. Pour retourner au mode normal, pressez Ctrl + D ou tapez # exit.
Enter root password, or ^D to go multi-user
Password: motdepasse
Enter pathname of shell or RETURN for sh: /bin/ksh
infoN'oubliez pas le mot de passe de l'utilisateur root.

5.4. Partition swap

1) Voici deux solutions pour chiffrer sa partition swap.

Modifiez la variable d'état du noyau avec la commande sysctl(8).
# sysctl -w vm.swapencrypt.enable=1
vm.swapencrypt.enable: 1 -> 1
infoLes changements sont automatiquement pris en compte.
ou

Editez /etc/sysctl.conf, décommentez la ligne:
#vm.swapencrypt.enable=0
puis positionnez la variable à 1:
vm.swapencrypt.enable=1
infoSauvegardez et redémarrez pour activer les changements.

5.5. Partition altroot

1) Voici une astuce pour sauvegarder quotidiennement le système de fichiers root.

La sauvegarde va être réalisée sur la partition /altroot créée durant l'installation.

Editez le crontab de root avec la commande crontab(1).
# crontab -e
Positionnez la variable ROOTBACKUP=1 en fin de ligne:
# do daily/weekly/monthly maintenance
30      1   *    *      *    umask 077; /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | mail -s "`/bin/hostname` daily output" root; ROOTBACKUP=1
Sauvegardez et modifiez l'entrée correspondante dans /etc/fstab.
/dev/wd0k /altroot ffs xx 0 0
Sauvegardez et rafraîchissez les points de montage du fichier /etc/fstab sans redémarrer votre système.
# mount -a

5.6. Motd

MOTD (voir motd(5)), acronyme de Messages Of The Day, en français, message du jour. Il apparaît lors de votre identification sur une station de travail ou des serveurs tels SSH, FTP ou encore IRC. Il est utilisé en autre pour afficher des règles de fonctionnement, des informations concernant le système utilisé, des contacts administratifs, des dessins ASCII Art et autres.

Le motd par défaut sous OpenBSD:
Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
Notez que le fichier /etc/motd est modifié par /etc/rc chaque fois que le système a démarré. Pour garder intact tout message personnalisé, assurez-vous de laisser deux lignes vides en début de fichier, ou votre message sera écrasé.


6. Quotidien


6.1. Rapports système

OpenBSD exécute tous les jours (daily(8)), le week-end (weekly(8)) et le 1er du mois (monthly(8)), des opérations de maintenance. Suite à ces opérations, vous recevrez un/plusieurs courrier(s) électronique(s), un récapitulatif des tâches accomplies mais aussi celles que vous pouvez être amené à réaliser.

Ce courrier aura pour objet:
<hostname> daily/weekly/monthly insecurity output.
infoIl est donc important de consulter ce rapport régulièrement.
Il se présente sous la forme d'une liste composé d'une série de recommendations de sécurité comme l'illustre l'exemple ci-dessous.
var/mail:
        permissions (0755, 0775)
etc/daily:
        user (0, 3)
Suivez attentivement les conseils indiqués. Le réglage recommandé est la première valeur inscrite entre parenthèses, alors que le paramètre actuel est la deuxième.

infoCette liste est générée par mtree(8) en utilisant le fichier /etc/mtree/spéciale. Si besoin, utilisez les commandes chmod(1), chgrp(1) et chown(8).

6.2. Errata et correctifs

Vérifiez la page d'errata et des correctifs importants concernant exclusivement l'arborescence des sources pour OpenBSD 4.2 (les autres correctifs concernent l'arborescence actuelle de CVS et peuvent ne pas convenir sur une machine en production).

Durant la phase d'installation d'OpenBSD, il est probable que des failles aient été trouvées. Il est donc important de consulter cette page régulièrement. Tous les correctifs sont disponibles sur CVS via la branche OPENBSD_4_2.

ideaQue diriez-vous de mettre à jour OpenBSD en suivant la branche -stable ?
infoIl est conseillé et très utile d'envoyer une copie de votre dmesg aux développeurs OpenBSD. Cela permet de garder une trace de quels matériels fonctionnent, et de quels matériels ne fonctionnent pas parfaitement.

7. Remerciements

Je tiens à remercier x et y pour la relecture attentive de cet article.

Valid XHTML 1.1!Valid CSS!

Copyright © 2007 Olivier Regnier. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.