Plan du KiWi
Si vous n'avez pas trouvé votre bonheur dans les liens plus haut, le plan vous montrera les quelques pages “cachées” de ce kiwi !
Nous avons repris ce qui a été fait pour la partie desktop et qui sera modifié pour un serveur. Vous trouverez de la documentation pour installer et configurer correctement FreeBSD en suivant les liens ci-dessous :
Le chapitre installation du HandBook de FreeBSD. Le chapitre configuration de X11 de ce même HandBook. Un article de PC-entraide sur ces mêmes sujets. La partie française du site FreeBSD . Un fichier texte pour faire les premiers pas. Les archives des mailing lists FreeBSD.
Nous parlerons dans cette partie du partitionnement en nous plaçant dans le cas où le disque est consacré uniquement à FreeBSD.
Les noms donnés aux disques sous FreeBSD sont différents de ceux donnés sous Windows ou GNU/Linux :
ad0 : premier disque dur IDE ad1 : second disque dur IDE da0 : premier disque dur SCSI da1 : second disque dur SCSI
Dans notre cas, le disque où vous souhaitez installer FreeBSD devrait être ad0 ou ad1. C'est celui-ci que vous sélectionnez en arrivant à l'écran “Select Drive(s)”. Maintenant, vous devez avoir en tête que le terme “partition” sous Windows ou GNU/Linux est remplacé par le terme “slice” (ou tranche) sous FreeBSD. Pour être plus précis, une slice est une “partition primaire”. Pour rappel, un disque peut contenir 1 à 4 partitions primaires. L'outil permettant de créer votre partition FreeBSD lors de l'installation est “fdisk”.
Dans notre exemple, une fois le disque sélectionné et l'écran de fdisk affiché, vous n'avez qu'à appuyer sur trois touches :
A : pour utiliser la totalité du disque. S : pour que la slice créée soit démarrable. Q : pour terminer.
Pour finir, l'installateur vous demande où il doit installer le gestionnaire de démarrage de FreeBSD (Install Boot Manager). Si vous avez déjà un gestionnaire de démarrage (comme lilo ou grub) et que vous souhaitez le conserver, choisissez “None” et il ne fera rien. Sinon, choisissez “BootMrg” pour procéder à son installation. Si vous avez plusieurs disques (ad0 et ad1 par exemple), vous devez installer le gestionnaire de démarrage sur 'chaque' disque, même si vous n'installez FreeBSD que sur un seul.
Vous en avez maintenant terminé le partitionnement, mais pour FreeBSD, vous n'avez créé qu'une slice et installé un gestionnaire de démarrage. Il vous faut maintenant partitionner cette slice au sens FreeBSD, en y créant des partitions FreeBSD. Si vous préférez des sous-partitions sans équivalent sous Windows ou GNU/Linux. L'outil permettant de créer vos partitions FreeBSD lors de l'installation est “disklabel”. Arrivé à son écran, vous n'avez à appuyer que sur deux touches:
A : pour un partitionnement automatique. Q : pour terminer.
Cette fois vous en avez bel et bien terminé avec cette étape. Le résultat obtenu ne sera peut-être pas optimum, mais pour une première fois c'est déjà pas si mal.
Le choix de la distribution n'est pas fondamental mais choisir avec attention sa distribution permet d'éviter d'avoir des choses inutiles d'installés.
Dans le menu “Choose Distributions”, allez tout en bas et choisissez “Custom” puis :
Il n'y a plus qu’à attendre la fin de la copie des différents éléments.
Une fois la copie des différents fichiers terminés, l'assistant vous demande s'il y a un réseaux à configurer sur des périphériques de type Ethernet ou SLIP/PPP, répondez “yes”
Sélectionnez la carte réseaux, en règle générale c'est la première de la liste. Les éléments plip ou sl ne nous intéresse pas pour le moment.
La zone pour le nom d'hôte est assez petite et un PR a été soumis à ce sujet, mais cela n'est pas très gênant puisqu'on peut le changer dans le fichier /etc/rc.conf Je vous recommande de saisir dans la mesure du possible :
Par défaut, il n'y a que root, nous allons ajouter un utilisateur low-privilège ne serait que pour pouvoir se connecter en SSH sur notre serveur flambant neuf donc répondez “Yes”
On vous demande de définir un mot de passe pour root, s'il y a bien un compte qui doit avoir un mot de passe fort, très fort, c'est bien celui-là.
On vous demande ensuite si vous voulez revoir les options générale, répondez “No” Vous revenez au menu général donc on fait “Exit”. On vous dit qu'il faut enlever tous les média CD/DVD car la machine va rebooter.
Retenez votre souffle jusqu'a l'obtention du prompt, la machine reboote…
Bien si vous n'êtes pas mort c'est que la machine à rebooter correctement, sinon le FUG et google sont tes amis. A partir de là, personnellement je ne travaille plus qu'en SSH, premièrement ce n’est pas particulièrement sympa de travailler en chambre froide, euh salle machine, deuxième je préfère mon client SSH qui me propose un certain nombre de fonctionnalité que ma console n'a pas.
Bref, nous allons donc tout d'abord mettre à jour ce formidable, extraordinaire et mirifique outil que sont les ports.
Pouquoi ? Parce qu'il m'offre plus d'options, notamment la possibilité de chrooter mes utilisateurs sans avoir à m'embêter avec la mise en place de ce dernier. Ce sont unes des options que OpenSSH devrait avoir depuis longtemps mais puisque ce n'est pas encore au programme du jour….
Premièrement, on installe :
# cd /usr/ports/security/ssh2 # make install clean
Ensuite on va désactiver ssh en mettant cela dans /etc/rc.conf : (Attention, cette ligne peut exister à YES !) sshd_enable=“NO”
Et on rajoute la ligne suivante pour activer ssh2 au démarrage : sshd2_enable=“YES”
Après c'est assez “tendu” car il faut tuer sshd avec la commande suivante :
killall sshd
Mais vous allez vous faire dégager. Si vous avez un serveur dédié, vous irez plus vite à le faire redemarrez (sshd ne chargera pas mais ssh2 ira à sa place). Si vous êtes en face de la machine, ça ira plus vite de taper la commande. Une fois avoir tué sshd, on lance sshd2 :
# /usr/local/etc/rc.d/sshd2 start
Quand vous allez créer un compte utilisateur, soyez sûr de mettre son shell à nologin ou quelque chose de similaire. Rajoutez aussi l'utilisateur dans la config ssh2 pour le chrooté.
Avec cet config, votre utilisateur ne pourra pas se logguer en ssh, juste faire du sftp et sera bloqué dans son home dir (si c'est pour un serveur web, on le bloquera dans le repertoire web).
N'oubliez pas, si vous créez un utilisateur chrooté, celui ci ne pourra pas accèder à /usr/sbin/nologin car c'est à l'extérieur de son home ! Il faut copier /usr/sbin/nologin dans le home de l'utilisateur (où dans un répertoire bin à l'intérieur de sa home). N'oubliez pas de changer le path de son shell pour qu'il pointe vers l'executable à l'intérieur de sa home. Petite astuce si vous ne voulez pas qu'il puisse voir ce dossier depuis son accès sftp (nommez le avec un point devant) :
cp /usr/sbin/nologin /home/.bin/ chown -R 0:0 /home/.bin chmod -R 0755 /home/.bin
Depuis FreeBSD 6.2, il y a outil est intégré, il s'agit de CSup, successeur de CVSup, il permet de mettre à jour l'arborescence des ports et même des sources.
Si vous voulez en savoir plus sur les ports cf. : man ports Nous allons donc créer un petit fichier de config pour CSup/CVSup :
# cp /usr/share/examples/cvsup/ports-supfile /etc/cvsupfile
Editez le fichier /etc/cvsupfile et changez le “*default host=CHANGE_THIS.FreeBSD.org”, vous avez la liste des miroirs ici: http://www.freebsd.org/doc/handbook/mirrors.html mais vous pouvez utilisez celui-ci cvsup4.fr.freebsd.org en première approche.
Hip Hop, on met à jour :
# csup /etc/cvsupfile
Après une installation fraiche, il faut bien compter 30 à 40 min de mise à jour. Bon café…
”… c'est alors que Régis me dit : c'est pas possible de faire ca, IP c'est une techno Microsoft! Arf! qu'il est con ce Régis..” Ah pardon c'est finis la mise à jour ? Bien Moi je préfère bash à sh comme shell donc, hip hop, on installe bash grâce à ses ports tout neuf et à jour :
# cd /usr/ports/shells/zsh && make install clean
Comme c'est la première installation sur le système tout nu, l'installation va commencer par installer un certain nombre d'outils qui, de toute façon, seront utilisé après.
C'est un peu long aussi donc : 2ième café…
Voilà c'est fini donc, on le met en service pour root et pour notre utilisateur ;low-privilège” chéri:
# chpass -s /usr/local/bin/zsh ''(ca c'est pour root)'' # chpass -s /usr/local/bin/zsh marcel ''(ca c'est pour marcel...)''
N'oubliez pas pour votre utilisateur low-privilège, si vous voulez qu'il soit capable d'éxécuter des commandes en tant que root (via su), vous devez l'ajouter au groupe wheel ! Pour cela, éxécuter :
# pw user mod marcel -G wheel
On se délogue et on se relogue, voilà on travaille avec bash. Vous pouvez notez que le prompt a changer :
Pour root : [root@monserveurtoutneuf ~]# pour marcel : [marcel@monserveurtoutneuf ~]$
Pour la personnalisation de vos configs, je vous laisse faire, vous êtes grand !
Je ne sais pas vous, mais moi je ne supporte pas vi, je lui préfère grandement son pote vim. Pour l'installer :
#cd /usr/ports/editors/vim && make WITHOUT_X11=yes install clean
PS : N'oubliez pas, pour cherchez une application dans les ports, il vous suffit de faire :
#cd /usr/ports #make search name=votre_appli
Utilitaire bien pratique pour éviter d'être en root trop longtemps.
# cd /usr/ports/security/sudo # make install clean
Configurez vos utilisateurs dans le fichier “usr/local/etc/sudoers” et voilà !!
Voilà nous avons un serveur tout neuf mais surement pas à jour en terme de sécurité, nous allons donc, pour une fois, refaire le monde.
Comme pour les ports, nous allons utiliser csup pour mettre à jour les sources et du coup il nous faut un fichier de config. Voici celui qui j'utilise pour un freebsd 6.2,/etc/cvsupfileS :
*default host=cvsup5.fr.freebsd.org *default base=/var/db *default prefix=/usr *default release=cvs *default tag=RELENG_7_0 *default delete use-rel-suffix *default compress src-all
Maintenant il va me rapatrier des sources dont je n'ai pas besoins : les jeux. On créé donc un fichier /usr/sup/refuse contenant :
src/games*
Mettons à jours maintenant :
#csup /etc/cvsupfileS
Vous pouvez mettre à jour vos sources et vos ports ajouter “ports-all” à la suite de “src-all”. Vous pouvez bien sur spécifiez ce que vous voulez comme type de ports (regardez le fichier /etc/cvsupfile)
Voici les options de compilation que j'utilise quasiement tout le temps, à placer dans le fichier /etc/make.conf :
PPP_NOSUID= true ENABLE_SUID_SSH= true ENABLE_SUID_NEWGRP= true NO_ATM=true # do not build ATM related programs and libraries NO_AUTHPF=true # do not build and install authpf (setuid/gid) NO_BLUETOOTH=true # do not build Bluetooth related stuff (Necessite USB sinon) NO_CVS=true # do not build CVS NO_CXX=true # do not build C++ and friends NO_FORTRAN=true # do not build g77 and related libraries NO_GAMES=true # do not build games (games/ subdir) NO_I4B=true # do not build isdn4bsd package NO_INET6=true # do not build IPv6 related programs and libraries NO_IPFILTER=true # do not build IP Filter package NO_LPR=true # do not build lpr and related programs NO_PROFILE=true # Avoid compiling profiled libraries NO_RCMDS=true # do not build or install BSD r* commands (rsh, etc). NO_SENDMAIL=true # do not build sendmail and related programs NO_TCSH=true # do not build and install /bin/csh (which is tcsh) NO_USB=true # do not build usbd(8) and related programs PPP_NO_NAT=true # do not build with NAT support (see make.conf(5)) PPP_NO_NETGRAPH=true # do not build with Netgraph support PPP_NO_RADIUS=true # do not build with RADIUS support NO_MODULES= true # do not build modules with the kernel NO_BIND=true # Do not build any part of BIND MAKE_IDEA=true # IDEA (128 bit symmetric encryption) BOOTWAIT=0 DOC_LANG=en_US.ISO8859-1 NO_WPA_SUPPLICANT_EAPOL=true WITHOUT_X11=yes NO_X=true # avec cette option, aucun ports ne dependra de X11
D'autres options sont disponible, pour plus d'info consulter le fichier /usr/share/examples/etc/make.conf
Dans les options intéressantes pour la compilation, on peut aussi noter celles-ci :
CHOST=i686-pc-linux-gnu CFLAGS=-O2 -pipe -fomit-frame-pointer COPTFLAGS=-O2 -pipe -fomit-frame-pointer
Il est bon de se baser sur le fichier /usr/share/examples/etc/make.conf
Les sources sont à jour, le make.conf est configuré et bien c'est partis :
#cd /usr/src && make buildworld
Compile…Compile…Compile… Attention c'est long ! Compile…Install…Install… Finis ? Maintenant on passe au noyau :
#make buildkernel KERNCONF=GENERIC #make installkernel KERNCONF=GENERIC
Compile…Compile…Compile… Attention c'est long ! Compile…Install…Install… Tiens ca change !
Le paramètre KERNCONF prend le nom du fichier de configuration se trouvant dans l'arborescence /sys/i386/conf /sys étant un lien vers /usr/src/sys le sous-répertoire i386 marquant le type d'architecture de votre pc. Je vous conseille vivement de modifier ce fichier. Lisez le, lisez les commentaires et gardez ce dont vous avez besoin pour avoir un kernel au poil. J'y rajoute toujours ces options : (pour la compatibilité Linux)
options LINPROCFS options COMPAT_43 options COMPAT_LINUX32
Finis again, petit reboot alors ! Ici le handbook preconise de continuer en Single User, n'ayant pas forcement accès à la console, j'ai toujours fait la suite en multi-user sans problème à partir du moment où je suis le seul à me connecter.
#reboot
Si vous pouvez utiliser le mode 'single user', un simple “shudown now” vous y amènera.
On se loggue si tout va bien (mais y a pas de raison)
#mergemaster -p #make installworld #mergemaster -i #reboot
Nous voilà donc l'heureux possesseur d'un système tout neuf et à jour.
Personne (vous y compris), ne devrait jamais ouvrir une session sur votre système, en utilisant le compte root. Pour empêcher ceci de se produire, éditez /etc/ttys. Une fois passé une page entière de commentaires, vous noterez une section qui va de ttyv0 à ttyv8. Changez le mot secure sur chacune de ces lignes, en insecure. C'est un fichier que vous ne voudrez pas éditer deux fois, ainsi vérifiez soigneusement une deuxième fois vos changements. Testez par l'essai d'une procédure de connexion comme root sur un de vos terminaux. Vous devriez recevoir un message Login incorrect. Personnellement, je tends à utiliser chacun des neuf terminaux sur mon ordinateur de bureau. Sinon, vous pouvez également changer le mot ON en OFF sur seulement quelques ttys dans /etc/ttys. Rappelez-vous de laisser au moins un terminal en fonction, ou bien, il ne sera pas possible d'ouvrir une session, ce qui entravera sévèrement l'usage de votre système. Vous noterez également que ttyv8 est OFF par défaut, ce qui signifie que vous devez lancer manuellement une session X. Si vous voulez que X démarre automatiquement au boot, changez ce OFF en ON.
Vous pouvez éditez le fichier /etc/ttys pour changez quelque petit paramètre. Par exemple en changeant secure en insecure pour tous les ttys, vous interdiez à root de se connectez. Vous pouvez également activez ou désactivez des ttys. J'en laisse un d'actif (on n'est jamais trop prudent!) et je supprime tous les autres car je me connecte principalement en connection réseau. A vous de voir !
Pour le bien de vos yeux et de vos encodages divers et variés, passons notre système en UTF-8, pour ce faire, editez le fichier ”/etc/login.conf” (en tant que root) et mettez y les lignes suivantes :
:charset=UTF-8:\ :lang=fr_FR.UTF-8:
Tant que vous êtes dans ce fichier, voyons pour changer l'algorithme de cryptage en blowfish :
:passwd_format=blf:\
Et vu que FreeBSD utilise une base de donnée générés à partir de ce fichier et non pas le fichier directement, à chaque modification, vous devez faire :
cap_mkdb /etc/login.conf
passwd username
Afin de générer à nouveau cette base. Déconnectez vous, reconnectez vous et faîtes un
# locale
et admirez ! Pour vérifier que vous utilisez bien le blowfish et que vous n'avez oublié aucun utilisateur:
more /etc/master.passwd
Tous les mots de passe de vos utilisateurs devraient commencer par $2.
En conclusion, configurez l'utilitaire adduser pour utiliser blowfish à chaque fois que vous créez un nouvel utilisateur, en éditant /etc/auth.conf. Changez la ligne crypt_default, de sorte qu'elle ressemble à ceci:
crypt_default=blf
Pour empêcher SendMail au démarrage si vous n'en voulez pas, éditez le fichier /etc/rc.conf et cherchez sendmail_enable=“YES”, passez le à “NONE”, si la ligne n'existe pas, créez la.
Si vous faîtes sockstat -4, vous devriez voir 2 ports pour les mails ports 25 (smtp) et 587 (submission).
Pas besoin du port 587 pour envoyer et reçevoir des mails ! Pour le fermer éditez /etc/mail/sendmail.cf. Trouvez la ligne :
O DaemonPortOptions=Port=587, Name=MSA, M=E
Commentez-la, et relançez le service :
killall -HUP sendmail
Refaite un ptit coup de sockstat et le port 587 ne devrait plus etre ouvert.
127.0.0.1 localhost mamachine **mamachine.mondomaine**
Pareillement, si vous n'utilisez pas de serveur DNS (je passe par Gandi), vous pouvez tuez named et dans /etc/rc/conf, mettre la ligne named_enable=“YES” à NO, si elle n'existe pas, créez la.
syslogd_enable=“YES” syslogd_flags=”-s” Disable logging from remote hosts ”-ss” will disable opening udp 514 port It will also disable logging to central logging server
icmp_drop_redirect= "YES"
Pour dropper toutes les redirections ICMP qui peuvent être à l'origine d'une attaque DDOS (vous pouvez aussi rajoutez
icmp_log_redirect= "YES"
mais attention, si vous victime d'une attaque, les logs peuvent dépasser la capacité de votre répertoire d'enregistrement.)
accounting_enable=“YES” Enable Process Accounting
update_motd= “NO” No more update of the motd with the current version.
log_in_vain=“YES” Permez de loger les tentatives de conections sur des ports non ouverts.
clear_tmp_enable=“YES” Enable cleaning up /tmp directory on startup
kern_securelevel_enable=“YES” Enable Kernel Secure Level kern_securelevel=“1” The kernel secure level is set to 1 during boot
Ces 2 derniers levels sont vraiment paranoid et uniquement adaptes dans le cas d'une configuration de tres haute securite avec une utilisation statique.
Je rajoute ici quelque options que je rajoute, elles concernent notamment la sécurité sur FreeBSD, je vous engage à lire de la documentation, je les laisse ici pour me faire un post-it plus qu'autre chose :
sysctl -w net.inet.tcp.syncookies=1 sysctl -w net.inet.ip.check_interface=1 sysctl -w net.inet.udp.blackhole=1 sysctl -w net.inet.tcp.blackhole=2 sysctl -w net.inet.icmp.icmplim=200 sysctl -w net.inet.ip.rtexpire=2 sysctl -w net.inet.ip.rtminexpire=2
Installons NTPD aussi. Normalement il est fourni de base avec FreeBSD, pas besoin de l'installer. La config se trouve dans /etc/ntp.conf. Une fois que vous l'avez config, vous pourrez rajouter cela à votre /etc/rc.conf :
ntdate_enable="YES" ntpdate_flags="-p /var/run/ntpd.pid" ntpd_enable="YES"
Et voilà, votre serveur de temps roule au poil !
Si vous voulez changer le nom de votre machine, vous pouvez le faire grâce à la commande hostname :
#hostname nouveau-nom
Ne pas oublier de rajouter le nouveau-nom dans le fichier /etc/hosts. Ce qui doit vous donner :
::1 localhost nouveau-nom
127.0.0.1 localhost nouveau-nom
N'oubliez pas de configurer votre démon SSH pour éviter les login de root et autres petites surprises.
Un petit outil de sécurité bien pratique étant Logwatch qui m'envoie un mail tous les jours avec un résumé de l'activité de mon serveur, pour se faire :
# portsnap fetch update # /usr/ports/sysutils/logwatch # make install clean
Modifier la configuration par défaut :
# vi /usr/local/etc/logwatch/defaults/logwatch.conf
Mettez votre adresse mail dans la config : (vous pouvez en mettre plusieurs)
MailTo = admin@f00.fr, admin@example.com
N'oubliez pas de mettre
Print = No
(autrement vous n'allez jamais recevoir d'email !)
Installons le cronjob kivabien :
# vi /etc/crontab
Et on rajoute :
### Logwatch cron job ### 0 2 * * * root /usr/local/sbin/logwatch.pl
N'oubliez pas que vous avez besoin d'un serveur smtp pour que ça marche (laissez sendmail ou installez postfix !)
Pour retirer le copyright au login de la session, faîtes ceci :
touch /etc/COPYRIGHT
Vous pouvez vous amuser avec une bannière ou encore la modification du fichier /etc/motd. La banniere est un message qui s'affiche AVANT la connection d'un utilisateur. Vous n'avez qu'à créer le fichier et indiquer l'emplacement dans le fichier de config (c'est une ligne commenté par défaut).
Vous pouvez aussi changer le texte qui apparaît à la demande de procédure de connexion. Editez /etc/gettytab. Trouvez la ligne dans la section default:\ qui commence par:
cb:ce:ck:lc
Soigneusement, changez le texte entre \ r \ n et \ r \ n \ r \ n: par le texte que vous souhaitez. Vérifiez une deuxième fois que vous avez la bonne quantité de \rs et \ns et sauvegardez votre changement. Par exemple, ma demande de procédure de connexion ressemble à ceci:
Je suis un noeud dans le cyberespace. Qui êtes-vous ? login:
Et voilà !