OBSD4* : wiki

Version de traduction basée sur la 6.4 officielle (25/10/2018)


FAQ - Administration Système

Mises à jour de Sécurité

Quand un bogue critique est trouvé, la correction sera envoyée à l'arbre -current aussi vite que possible. À partir de là, les problèmes sont traités différemment selon qu'ils étaient dans le système de base d'OpenBSD ou dans un package tiers. Cette section détaille comment garder votre système à jour entre chaque version.

Pour le système de base d'OpenBSD, il y a quatre options :

  • Appliquer les correctifs des binaires.
    Si vous fonctionnez sur la version la plus récente d'OpenBSD, vous pouvez utiliser simplement l'utilitaire syspatch(8) pour mettre à jour tout fichier qui a besoin de corrections de sécurité ou de fiabilité. Ceci est la méthode la plus simple et la plus rapide pour mettre à jour le système de base. Notez que les correctifs de binaires sont seulement disponibles pour les architectures amd64 et i386. Les avis de Sécurité sont envoyés sur la liste de diffusion announce.
  • Mettre à niveau votre système vers -stable.
    Récupérez ou mettez à jour l'arbre des sources avec CVS, puis recompilez le noyau et l'espace utilisateur.
  • Corrigez les fichiers affectés individuellement.
    Bien qu'appliquer des corrections depuis la page errata prend typiquement moins de temps qu'une sortie/mise-à-jour et recompilation CVS, il n'y a pas d'instructions universelles pour faire cela. Parfois, vous devez corriger et recompiler une application, parfois vous devez faire plus.
  • Mettre à niveau votre système vers -current.
    De même que toutes les corrections sont appliquées au code de base de -current, mettre à jour votre système vers le dernier instantané est une bonne manière d'avoir toutes les corrections en une seule fois. Cependant, fonctionner sur -current n'est pas pour tout le monde.

Pour les logiciels tierces installés via packages, il y a deux options :

  • Mettre à niveau votre système vers -current et utiliser les packages.
    Les binaires pour les instantanés de -current sont reconstruits sur une base régulière, tous les nouveaux paquets incluront toutes les corrections de sécurité qui seront publiées. Appelez simplement pkg_add(1) avec le drapeau -u pour obtenir les nouveaux fichiers.
  • Utiliser l'arbre des ports -stable.
    Récupérez (ou mettez à jour) l'arborescence des ports, exécutez le script /usr/ports/infrastructure/bin/out-of-date pour lister tous les packages qui ont besoin d'être reconstruits, puis faites make update dans le répertoire du port affecté. Afin d'être alerté des mises à jour du port, veuillez suivre la liste de diffusion ports-changes.

Les démons système

Les démons système (ou “services”) sont démarrés, stoppés et contrôlés par le script rc(8) via rc.d(8).

La plupart des démons et services fournis avec OpenBSD sont contrôlés au démarrage par des variables définies dans /etc/r.conf. Vous devriez voir des lignes similaire à celle-ci :

  httpd_flags=NO

Cela informe que httpd(8) n'est pas démarré depuis rc(8) à chaque démarrage. Chacune des lignes a un commentaire vous montrant quels drapeaux existent pour un commun usage du démon ou service.

N'altérez pas directement rc.conf(8). Au lieu de cela, utilisez l'utilitaire rcctl(8) pour maintenir le fichier /etc/rc.conf.local. Cela rend les futures mise à niveau plus faciles parce que toutes les modifications qui sont faites dans ce seul fichier ne sont pas touchées durant la mise à niveau.

Par exemple, pour démarrer le démon apmd(8) pour la gestion du processeur, on pourrait faire :

  # rcctl enable apmd
  # rcctl set apmd flags -A
  # rcctl start apmd

Exécuter des commandes sous un autre utilisateur

L'outil doas(1) laisse à l'administrateur système le choix de permettre à certains utilisateurs d'exécuter des commandes spécifiques avec les droits d'un autre utilisateur. Les utilisateurs réguliers peuvent utiliser des commandes d'administration, il est seulement requit de s'authentifier eux-mêmes, sans avoir besoin du mot de passe root.

Par exemple, si elle est configurée de manière appropriée, la commande suivante affichera le contenu du fichier crontab(5) de root :

$ doas -u root crontab -l

Les commandes invoquées par doas(1) sont enregistrées par défaut dans /var/log/secure. Vérifiez le manuel de doas.conf(5) pour voir les exemples de configuration.

Éditer le fichier des mots de passe

Le fichier principal des mots de passe d'OpenBSD est /etc/master.passwd et il est seulement lisible par root. L'utilitaire pwd_mkdb(8) génère le fichier /etc/passwd lisible publiquement et les bases de données des mots de passe (/etc/pwd.db et /etc/spwd.db) depuis le fichier principal. Le format du fichier est décrit dans passwd(5).

Utilisez toujours vipw(8) pour éditer votre fichier de mots de passes. Après votre édition, il vérifiera en premier les changements, et recréera /etc/passwd et les bases de données des mots de passe, puis finalement il installera une copie en place du fichier original /etc/master.passwd.

Utiliser S/Key

S/Key est une système d'authentification à mot-de-passe unique “one-time password”. Il génère une séquence de mots-de-passe (à utilisation unique) depuis la passe-phrase secrète de l'utilisateur selon un challenge reçu par le serveur, utilisant une des fonctions de hash : md5, sha1 ou rmd160.

ATTENTION : Les systèmes de mots-de-passe “one-time” protègent seulement l'information d'authentification. Ils ne préviennent pas des accès réseaux non désirés qui essayent d'accéder aux informations privées. En outre, si vous accédez à un système sécurisé A, il est recommandé que vous le fassiez depuis un autre système de confiance B, afin de s'assurer que personne n'accède au système A par l'enregistrement de vos frappes au clavier ou par la capture et/ou en forgeant l'entrée et la sortie de vos terminaux.

Paramétrer S/Key

Pour commencer, le répertoire /etc/skey doit exister. Si le répertoire n'existe pas, l'administrateur doit le créer en faisant :

# skeyinit -E

Utilisez alors skeyinit(1) pour initialiser votre S/Key. En premier, il vous sera demande votre mot-de-passe de connexion, puis votre passe-phrase secrète S/Key, qui devra être au moins longue de 10 caractères :

$ skeyinit
Reminder - Only use this method if you are directly connected
           or have an encrypted channel.  If you are using telnet,
           exit with no password and use skeyinit -s.
Password:
[Adding ericj with md5]
Enter new secret passphrase:
Again secret passphrase:

ID ericj skey is otp-md5 100 oshi45820
Next login password: HAUL BUS JAKE DING HOT HOG

Notez l'information des deux dernières lignes. Le programme utilisé pour créer votre mot-de-passe S/Key est otp-md5(1), le numéro de séquence est 100 et la clé secrète est oshi45820. Les six petits mots HAUL BUS JAKE DING HOT HOG constitue, avec le numéro de séquence 100, le mot-de-passe S/Key.

Générer des mots de passe S/Key

Pour générer des mots de passe S/Key pour de nouvelles connexions, utilisez skeyinfo(1) pour trouver quelle commande utiliser :

$ skeyinfo -v
otp-md5 95 oshi45820
$ otp-md5 95 oshi45820
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:
NOOK CHUB HOYT SAC DOLE FUME

Afin de générer une liste de mots de passe S/Key, faites :

$ otp-md5 -n 5 95 oshi45820
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:
91: SHIM SET LEST HANS SMUG BOOT
92: SUE ARTY YAW SEED KURD BAND
93: JOEY SOOT PHI KYLE CURT REEK
94: WIRE BOGY MESS JUDE RUNT ADD
95: NOOK CHUB HOYT SAC DOLE FUME

Utiliser S/Key pour se connecter

Voici un exemple de session utilisant S/Key pour se connecter à un serveur ftp sur localhost. Pour effectuer une connexion S/Key, ajoutez :skey à votre identifiant de connexion.

$ ftp localhost
Connected to localhost.
220 oshibana.shin.ms FTP server (Version 6.5/OpenBSD) ready.
Name (localhost:ericj): ericj:skey
331- otp-md5 93 oshi45820
331 S/Key Password: JOEY SOOT PHI KYLE CURT REEK
[...]
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

Pareil, pour ssh(1) :

$ ssh -l ericj:skey localhost
otp-md5 91 oshi45821
S/Key Password: SHIM SET LEST HANS SMUG BOOT
Last login: Thu Apr  7 12:21:48 on ttyp1 from 156.63.248.77
$

Services d'Annuaire

OpenBSD peut être utilisé pour les serveurs et clients de bases de données contenant les informations d'identification utilisateur, de groupe et autre donnée relative au réseau.

Bien-sûr, vous pourriez utiliser divers services d'annuaire sur OpenBSD. Mais YP est le seul qui peut être accéder directement en utilisant les fonctions de librairies C standards telles que getpwent(3), getgrent(3), gethostbyname(3). Ainsi, si vous gardez vos données dans la base de données YP, vous n'avez pas besoin de la copier vers les fichiers de configuration locaux, tel que master.passwd(5) avant de l'utiliser, pour par exemple authentifier les utilisateurs systèmes.

YP est un service d'annuaire compatible avec le NIS (Network Information System - Système d'Information Réseau) de Sun Microsystems. Regardez yp(8) pour avoir un aperçu des pages de manuel disponibles. Faites attention, certains systèmes d'exploitation contiennent des services d'annuaire dont le nom semble similaire tout en étant incompatibles, par exemple NIS+.

Pour utiliser d'autres services d'annuaire qu'YP, vous avez besoin de remplir les fichiers de configuration locaux depuis l'annuaire, ou depuis l'interface frontale d'YP. Par exemple, vous pouvez utiliser le port sysutils/login_ldap quand vous choisissez le premier, tandis que le démon ypldap(8) fournit ce dernier.

Pour quelques applications, synchroniser simplement un petit nombre de fichiers de configuration en amont d'un groupe de machines utilisant les outils tels que rdist(1), cron(8), scp(1) ou rsync (disponibles depuis les ports) constitue une alternative facile et robuste à un service d'annuaire complet.

YP : Considérations de sécurité

Pour des raisons de compatibilités, toutes les fonctionnalités de sécurité intégrées à l'implémentation YP d'OpenBSD sont positionnées sur off par défaut. Même quand elles sont positionnées sur on, le protocol NIS est encore peu sûr pour deux raisons : Toutes les données, incluant les données sensibles, tels que les hachages des mots-de-passe, sont transmises non chiffrées sur le réseau, et ni le client, ni le serveur ne peut vérifier de manière fiable l'identité de chacun.

Ainsi, avant de paramétrer un serveur YP, vous devrez considérer quels défauts de sécurité inhérents sont acceptables dans votre contexte. En particulier, YP est inadéquate si de potentiels attaquants ont un accès physique à votre réseau. Toute personne obtenant les accès root sur n'importe quel ordinateur connecté à votre segment réseau, dans lequel est le trafic YP, peut aveugler votre domaine YP et récupérer ses données. Dans certains cas, faire passer le trafic d'YP au-travers de tunnels SSL ou d'IPSec peut être une option.

Paramétrer un serveur YP

Un serveur YP qui sert un groupe de clients est appelé un “domaine”. Vous devrez en premier sélectionner un nom de domaine ; cela peut être une chaîne arbitraire et n'a pas besoin d'être relatif à des noms de domaines DNS. Choisir un nom aléatoire tel que “Eepoo5vi” peut marginalement améliorer la sécurité, bien que l'effet tienne plus de la sécurité par l'obscurité. Dans le cas où vous devez maintenir plusieurs domaines YP distincts, il est probablement mieux de choisir des noms descriptifs tels que “ventes”, “marketing” et “recherche” afin de prévenir les erreurs d'administration système liées à l'obscurité. Notez aussi que certaines versions de SunOS requiert l'usage d'un hôte ayant la fonction de nom de domaine DNS, votre choix pourrait être ainsi restreint dans un réseau incluant de tels hôtes.

Utilisez l'utilitaire domainname(1) pour paramétrer le nom du domaine, et le mettre dans le fichier defaultdomain(5) pour qu'il soit configuré automatiquement au démarrage du système.

  # echo "puffynet" > /etc/defaultdomain
  # domainname `cat /etc/defaultdomain`

Initialisez le serveur YP en utilisant la commande interactive :

# ypinit -m

À ce point, il n'est pas encore nécessaire de spécifier de serveurs esclaves. Pour ajouter des serveurs esclaves, vous devez ré-utiliser ypinit(8) plus tard, en utilisant l'option -u. Paramétrer au moins un serveur esclave pour chaque domaine est utile pour lutter contre les interruptions de service. Par exemple, si le serveur maître s'arrête ou qu'il y ait une perte de connectivité réseau, les processus clients essayant d’accéder aux cartes YP se bloquent indéfiniment jusqu'à ce qu'ils reçoivent l'information requise. Ainsi, les interruptions de service YP rendent typiquement le client hôte inutilisable jusqu'à ce que le service d'YP soit de retour.

Décidez où enregistrer les fichiers sources générés par vos cartes YP. Gardez la configuration du serveur séparée de celle servie aide à contrôler quelle information sera servie ou non, ainsi le défaut /etc n'offre pas le meilleur choix.

Le seul inconvénient causé par le changement du répertoire source est que vous ne serez pas capable d'ajouter, supprimer et de modifier les utilisateurs et les groupes dans le domaine YP en utilisant les utilitaires tels que user(8) et group(8). En lieu et place, vous devrez éditer les fichiers de configuration avec un éditeur de texte.

Pour définir le répertoire source, éditez le fichier /var/yp/`domainname`/Makefile et changez la variable DIR, tel que :

    DIR=/etc/yp/src/puffynet

Considérez la personnalisation des autres variables dans /var/yp/`domainname`/Makefile. Lisez Makefile.yp(8) pour plus de détails.

Par exemple, même dans le cas où vous utilisez le répertoire source par défaut, vous n'avez pas besoin de tous les comptes et groupes existant sur le serveur sur tous les clients hôtes. En particulier, le fait de ne pas servir le compte root et ainsi de garder le hachage du mot-de-passe root confidentiel est bénéfique pour la sécurité. Examinez les valeurs de MINUID, MAXUID, MINGID et MAXGID et ajustez-les selon vos besoins.

Si tous les clients YP fonctionnent sur OpenBSD ou FreeBSD, excluez les mots-de-passes chiffrés depuis les cartes passwd en paramétrant UNSECURE=“” dans /var/yp/`domainname`/Makefile.

L'ancienne pratique d'édition du fichier modèle /var/yp/Makefile.yp n'est plus recommandée. Les changements de ce fichier affecte tous les domaines initialisés après le changement, mais pas ceux initialisés avant, ceci est propice aux erreurs de toute façon : vous risquez que les changements envisagés ne prennent pas effet, de les oublier et de les affecter à d'autres domaines, auxquels ils n'étaient jamais destinés.

Créez le répertoire source et remplissez-le avec les fichiers de configuration dont vous avez besoin. Voyez Makefile.yp(8) pour apprendre quels fichiers sources sont requis pour quelles cartes YP. Pour le format de fichiers de configuration individuelle, référez-vous à passwd(5), group(5), hosts(5), et regardez les exemples dans /etc.

Créez la version initiale de vos cartes YP en utilisant les commandes :

  # cd /var/yp
  # make

Ne vous inquiétez pas des messages d'erreurs de yppush(8) à ce moment. Le serveur YP n'est pas encore fonctionnel.

YP utilise rpc(3) (remote procedure calls - appels de procédure à distance ) pour communiquer avec les clients, ainsi il est nécessaire d'activer portmap(8). Pour faire cela, utilisez rcctl(8).

  # rcctl enable portmap
  # rcctl start portmap

Considérez l'usage des fonctionnalités de sécurité securenet(5) ou ypserv.acl(5) du démon du serveur YP. Mais soyez conscient que ces deux éléments ne fournissent qu'un contrôle d'accès basé sur IP. Ainsi, ils ne contribuent que si les attaquants potentiels n'ont ni un accès physique au matériel du réseau transportant votre trafic YP, ni un accès root à aucun des hôtes connectés aux segments de réseau.

Finalement, démarrez le service du serveur YP :

    # rcctl enable ypserv
    # rcctl start ypserv

Pour tester le nouveau serveur, considérez la création de votre propre client, en suivant les instructions de la première partie de la section prochaine. Dans le cas où vous ne voulez pas que le serveur utilise ses propres cartes, vous pouvez désactiver la partie du client après le test avec les commandes suivantes :

    # rcctl stop ypbind
    # rcctl disable ypbind

Souvenez-vous que chaque fois que vous changez un fichier géré par une carte YP, vous devez régénérer vos cartes YP.

    # cd /var/yp
    # make

Cela met-à-jour les fichiers de bases de données dans /var/yp/`domainname`, à l'exception d'un seul : le fichier ypservers.db, listant tous les serveurs maîtres et esclaves associés à un domaine, qui est créé directement depuis ypinit -m et modifié exclusivement par ypinit -u. Dans le cas où vous l'auriez effacé accidentellement, exécutez ypinit -u pour le recréer depuis ses sources.

Paramétrer un client YP

Paramétrer un client implique deux parties distinctes. La première, votre service client YP doit être fonctionnel, liant votre client hôte à votre serveur YP. Compléter les étapes suivantes permettra de récupérer les données depuis le serveur YP, mais les données ne seront pas encore utilisées par le système :

Tout comme sur le serveur, vous devez paramétrer le nom de domaine et activer le portmapper :

    # echo "puffynet" > /etc/defaultdomain
    # domainname `cat /etc/defaultdomain`
    # rcctl enable portmap
    # rcctl start portmap

Il est recommandé de fournir une liste des serveurs YP dans le fichier de configuration /etc/yp/`domainname`. Autrement, le service du client YP utilisera les diffusions du réseau pour trouver les serveurs YP de son domaine. Spécifier explicitement les serveurs est plus robuste et offre marginalement moins de surface d'attaque. Si vous n'avez paramétré aucun serveur esclave, écrivez juste le nom de l'hôte du serveur maître dans /etc/yp/`domainname`.

Activez et démarrez le service du client YP, ypbind(8).

    # rcctl enable ypbind
    # rcctl start ypbind

Si tout c'est bien passé, vous devriez être capable d'interroger le serveur YP en utilisant ypcat(1) et de voir votre carte passwd retournée.

   # ypcat passwd
    bob:*:5001:5000:Bob Nuggets:/home/bob:/usr/local/bin/zsh
    ...

Un autre outil utile pour déboguer votre démarrage d'YP est ypmatch(1).

La seconde partie de la configuration d'un client YP implique l'édition des fichiers locaux de configuration de sorte à ce que certaines cartes YP soient utilisées par divers aménagements système. Tous les serveurs ne desservent pas toutes les cartes standards supportées par le système d'exploitation, quelques serveurs servent des cartes additionnelles non standards, ce qui signifie que vous n'êtes pas obligé d'utiliser toutes ces cartes. Laquelle des cartes disponibles doit être ou non utilisée, et pour quelle raison elles doivent être utilisées, est à l'entière discrétion de l'administrateur système de l'hôte client.

Pour avoir une liste des cartes standards d'YP et leur usage standard, voyez Makefile.yp(8).

Si vous voulez inclure tous les comptes utilisateurs depuis votre domaine YP, ajoutez le marqueur YP par défaut au fichier maître de mot-de-passe et reconstruisez la base de données des mots de passe :

    # echo '+:*::::::::' >> /etc/master.passwd
    # pwd_mkdb -p /etc/master.passwd

Pour les détails sur l'inclusion ou l'exclusion sélective de comptes utilisateurs, voyez passwd(5). Pour tester laquelle des inclusions actuellement fonctionne, utilisez l'utilitaire id(1).

Si vous voulez inclure tous les groupes de votre domaine YP, ajoutez le marqueur YP au fichier de groupe :

    # echo '+:*::' >> /etc/group

Pour les détails sur l'inclusion sélective de groupe, voyez group(5).


Cette page est la traduction officieuse de la page “System Management” de la FAQ officielle d'OpenBSD.
En cas de doute, merci de vous y référer !

Si vous voulez participer à l'effort de traduction, merci de lire ce topic.