FreeBSD Installation
Un article de Casys (Canadian Sysadmins).
Auteur: Thomas Boutry
Description
FreeBSD est un autre système d'exploitation du type Unix, très performant ce qui est vraiment intéraissant avec FreeBSD est le système de Jail ainsi que l'organisation du système qui est très carré. L'objectif ici est d'avoir un système minimal, puis de faire la configuration du système le plus sécuritaire possible.
Installation
- Récupérez le boot install sur le site de freeBSD : http://www.freebsd.org/where.html
| Mount Point | Size (mb) |
|---|---|
| / (root) | 512MB |
| swap | 1024MB (ou le double de la RAM) |
| /var | 3096MB |
| /tmp | 2048MB |
| /usr | 4096MB (Ceci est le minimum , toutes les applications s'installerons dans cette partitions ainsi que les données.) /usr) |
| /jails | (OPTIONAL le reste de l'espace) |
- Installation minimal de FreeBSD.
- base
- man
- Une fois l'installation complété définir
- le mot de passe root
- Le Timezone
- Configurer le service SSH
- Définir une adresse ip au serveur
- Définir les DNS
- Créer un group sysadmin avec le GID 1001
- Créer un usagé membre du group sysadmin
- Redemarrez le serveur sans le CD d'installation.
Configuration du serveur
Configuration du compte root
- Établir une connexion sur le serveur sous l'usagé Root
- Modification des permissions du répertoire
chmod 750 /root
Installation du gestionnaire de package
- Installation de porteasy
Ceci nous permettra de faire la gestion des ports
pkg_add -rv porteasy
- Executez rehash, pour que les nouvelles commandes soit disponibles voir le man page de csh
rehash
Création des répertoire pour le système de révision
Nous créons les répertoire pour le système de révision RCS.
mkdir -p /etc/RCS /usr/local/etc/RCS /etc/ssh/RCS
Single user mode
Oblige l'entré de mot de passe quand le serveur est démarré en mode single user
vi /etc/ttys
- Changez la ligne suivante
console none unknown off secure
Pour:
console none unknown off insecure
ci -u /etc/ttys
Configure SSHD
Nous allons modifier la configurations pour respecté les critères suivants:
- Restriction de la configuration
- Limitation du nombre d'usagés pouvant établir une connection à la liste AllowUsers
- Uniquement le protocol V.2 est authorisé
- Ne pas permettre les connections ssh pour l'usagé root
- Message de bienvenue
vi /etc/ssh/sshd_config
# sshd_config # # $Id$ # # Configuration file for sshd(8). VersionAddendum Restricted Access AllowUsers xerus Protocol 2 PermitRootLogin no ClientAliveInterval 120 ClientAliveCountMax 2 Banner /etc/issue #EOF
- Commitez le fichiers dans le système de révision
ci -u /etc/ssh/sshd_config
- Création du message de restriction affiché quand le système demande le mot de passe a l'usagé.
echo "Restricted Access." > /etc/issue
- Redémarrage du service SSHD
/etc/rc.d/sshd restart
Installation de portaudit
Portaudit va nous permettre d'être informé si une application installée sur le système avec les ports à une vulnérabilité. Pour plus d'information sur portaudit voir le man page.
porteasy -uva ports-mgmt/portaudit cd /usr/ports/ports-mgmt/portaudit make install clean
- Execute le portaudit pour la permier fois :
rehash /usr/local/sbin/portaudit -Fda
Installation de sudo et configuration
Installation via le système de ports
porteasy -uva security/sudo cd /usr/ports/security/sudo make install clean
- Configuration du fichier de log pour sudo
touch /var/log/sudo.log chown root:wheel /var/log/sudo.log chmod 640 /var/log/sudo.log vi /etc/newsyslog.conf
- AJOUTEZ
/var/log/sudo.log root:wheel 640 7 100 * J
ci -u /etc/newsyslog.conf
- Définition du fichier de configuration pour sudo.
rehash visudo
# sudoers # # Configuration file for sudo(8). # # Boutry Thomas 29th July, 2008 # Send logs to /var/log/sudo.log only. # Defaults logfile = /var/log/sudo.log # Do not log via syslogd(8). # Defaults !syslog # Do not reset LOGNAME and USER environment when running commands as root. # Defaults>root !set_logname # SYSADMIN guys can do everything, but actually need to type their passwords. %sysadmin ALL = ALL # EOF
Gràce a cette configuration tout les membres du groupe sysadmin auront la possibilité de faire sudo pour tout les commandes !!! Par le fait même faire attention au personne membres de ce groupes.
Installation et configuration de BASH
- Installation
porteasy -uva shells/bash cd /usr/ports/shells/bash make install clean rehash
- Configuration des fichiers de bash
- ALIASES
vi ~xerus/.aliases
# .aliases # # Boutry Thomas, 3 Juillet 2008 alias c='clear' alias h='history 25' alias lsd='ls -alF | grep -i ' alias ls='ls -G' alias mq='sudo mailq; echo; sudo mailq -Ac' alias up='sudo cvsup -g -L 2 /root/cvs-supfile' # EOF
- PROFILE
vi ~xerus/.bash_profile
# .bash_profile
#
# Bourne Shell startup script for login shells
#
# Boutry Thomas, 3 Juillet, 2008
# remove /usr/games and /usr/X11R6/bin if you want
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/libexec"
export PATH
# Setting TERM is normally done through /etc/ttys. Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# Use cons25l1 for iso-* fonts
# TERM=cons25; export TERM
BLOCKSIZE=K; export BLOCKSIZE
EDITOR=vi; export EDITOR
PAGER=less; export PAGER
# Setup for porteasy(8). Either one or the other is fine,
# just as long as one of them answers.
#
# CVSROOT="anoncvs@anoncvs1.FreeBSD.org:/home/ncvs"
CVSROOT="freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs"
export CVSROOT
# Source aliases file.
if [ -f ~/.aliases ]; then
. ~/.aliases
fi
# Set usefull prompt.
PS1="[\u@\h] \W {\!}$ "
export PS1
# EOF
- BASHRC
vi ~xerus/.bashrc
# .bashrc
#
# User specific aliases and functions.
# Source aliases for use while running in screen(1).
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Source user aliases.
if [ -f ~/.aliases ]; then
. ~/.aliases
fi
# EOF
- Changez les permissions des fichiers pour être sur qu'ils sont bien à l'usager
chown -R xerus:sysadmin ~xerus
- Pour conclure nous modifions le shell par default de l'usagé
vipw
Modifiez /bin/sh pour /usr/local/bin/bash
- ATTENTION: ne pas changé le shell par default de l'usagé root, car si un jour vous avez un problème de disque dur et que le système n'arrive pas a mounté /usr vous aurez un GROS problème.
- À présent connectez-vous avec votre usagé toutes les autres opérations seront executées avec la command sudo afin d'avoir des logues des différentes commandes.
Configuration du point de montage tmp
- Nous désactivons la possibilité d'exécuter des fichiers dans le répertoire tmp
sudo vi /etc/fstab
Modifier la ligne /tmp attention le nom du device est surement différent
/dev/ad0s1e /tmp ufs rw,noexec,nosuid 2 2
sudo ci -u /tmp
- Modification des autres répertoire tmp sur le serveur
sudo rm -rf /usr/tmp 2>&1 >/dev/null sudo ln -s /tmp /usr/tmp sudo rm -rf /var/tmp 2>&1 >/dev/null sudo ln -s /tmp /var/tmp
Modification du message du jour
- Suppression du messages du jours
sudo cp /dev/null /etc/motd
Restriction d'accès à la console
- Nous allons limité la connextion à la console au goupe sysadmin
sudo vi /etc/login.access
Ajoutez ceci à la fin
-:ALL EXCEPT wheel shutdown sync sysadmin:console
sudo ci -u /etc/login.access
Configuration des paramètres kernel
- Restriction pour ne pas permettre de rebooté le server avec CTRL+ALT+DEL
- Restriction pour que les usagés régulier ne voit pas les process de l'usagé root
- Prévention contre les DOS
sudo rcsdiff /etc/sysctl.conf sudo co -l /etc/sysctl.conf sudo vi /etc/sysctl.conf
# sysctl.conf # # $Id$ # # Prevent users from rebooting servers via Ctrl-Alt-Del keys. # hw.syscons.kbd_reboot=0 # Uncomment this to prevent users from seeing information about processes that # are being run under another UID. security.bsd.see_other_uids=0 # Reduce chances of DDOS attacks. # Check: http://silverwraith.com/papers/freebsd-ddos.php # net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.icmp.icmplim=50 kern.ipc.somaxconn=32768 # EOF
sudo ci -u /etc/sysctl.conf
Mise à jour des paramètres réseaux
Si vous avez installé le serveur dans réseaux avec un serveur DHCP peut-être n'avez vous pas définie d'ip , il est temps de corriger ce problème
- Définition de l'ip Fixe du serveur
sudo rcsdiff /etc/rc.conf sudo co -l /etc/rc.conf sudo vi /etc/rc.conf
Nous allons éditer les lignes ifconfig (ex: ifconfig_le0="DHCP")
ifconfig_le0="inet 10.10.10.50 netmask 255.255.255.0" defaultrouter="10.10.10.1"
- Mise à jour du fichier hosts
sudo vi /etc/hosts
# hosts # # $Id$ # # Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. Do not try to invent your own network # numbers but instead get one from your network provider (if any) or # from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.) # Loopback. # 127.0.0.1 localhost localhost.xerus.net 10.10.10.50 satan.xerus.net # EOF
sudo ci -u /etc/hosts
Définition de variables pour les scripts periodic
- Mise en place d'une variable pour que lors de l'utilisation de df les inodes soit pris en considération
sudo vi /etc/periodic.conf
# periodic.conf # # $Id$ # # Make changes to this file. Do not use /etc/defaults/periodic.conf # # Boutry Thomas , 3 Juillet 2008 daily_status_disks_df_flags="-hi -t nonfs" # df(1) flags for check. # EOF
sudo ci -u /etc/periodic.conf
Suppression de l'usager toor
information sur cette usagé : http://www.freebsd.org/doc/en/books/faq/security.html#TOOR-ACCOUNT
sudo pw user del toor
Configuration du fichier make.conf
sudo vi /etc/make.conf
# make.conf # # $Id$ # # Configuration for particular ports and all make(1) commands. # See examples in /usr/share/examples/etc/make.conf # # David Robillard, March 9th, 2005. # Use CPU-specific compile flags and microcode. # CPUTYPE=i686 # Compiler optimization: # -O2: # All optimizations which do not cause the size of the resulting # executable to increase are turned on. This is useful for a speed/space tradeoff # # -pipe: # Decreases the amount of time taken to compile software by using pipes to # communicate between two compiler threads. # # -funroll-loops: # When a binary compiled with this option is run, the CPU does not have to run # through every possible itteration of the loop to get its result. Instead, # loops are replaces with with their equivilent non-looping code. This saves one # CPU register which would otherwise be tied up in tracking the itteration of the loop. # # CFLAGS=-O2 -pipe -funroll-loops # # Humm, let's be more conservative. # CFLAGS= -O -pipe # COPTFLAGS # COPTFLAGS= -O -pipe ## # Do not build the entire base software. ## ## # Do not build the entire base software. ## 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 NO_FORTRAN= true # do not build g77 and related libraries NO_GAMES= true # do not build games (games/ subdir) NO_GDB= true # do not build GDB NO_I4B= true # do not build isdn4bsd package NO_INET6= true # do not build IPv6 related programs and libraries NO_INFO= true # do not make or install info files NO_IPFILTER= true # do not build IP Filter package NO_LPR= true # do not build lpr and related programs NO_NIS= true # do not build NIS support and related programs. # # If NO_NIS is set, you might need to adopt your # # nsswitch.conf(5) and remove `nis' entries. NO_PF= true # do not build PF firewall package NO_SHAREDOCS= true # do not build the 4.4BSD legacy docs NO_USB= true # do not build usbd(8) and related programs NO_VINUM= true # do not build Vinum utilities ## # dns/bind9 port configuration. ## # Do not build bind from the source. # We use the ports system instead. # NO_BIND=true # Do not build and install the base distribution of sendmail. # NO_SENDMAIL= TRUE # Specify where the configuration directory is located. # SENDMAIL_CF_DIR=/usr/local/share/sendmail/cf # added by use.perl 2008-06-29 11:03:27 PERL_VER=5.8.8 PERL_VERSION=5.8.8 # EOF
sudo ci -u /etc/make.conf
Configuration de sendmail comme NullClient
La configuration de sendmail en nullClient définie que le courriel sera directement envoyé au serveur destination sans aucun traitement de la part du serveur sendmail. Contrairement au système de relayhost ou smarthost, dans ce dernier cas le fichier /etc/aliases est traité avant l'envoie au serveur de relay.
sudo porteasy -uva security/openssl sudo porteasy -uva mail/sendmail
cd /usr/ports/mail/sendmail sudo make -DSENDMAIL_WITHOUT_IPV6 -DSENDMAIL_WITHOUT_NIS -DSENDMAIL_WITH_TLS -DSENDMAIL_WITH_SMTPS \ -DSENDMAIL_WITH_BERKELEYDB_VER=42 -DSENDMAIL_WITH_SOCKETMAP -DSENDMAIL_WITH_PICKY_HELO_CHECK -DSENDMAIL_WITH_SHARED_MILTER sudo make tls-install sudo make install sudo make mailer.conf sudo make clean
- Préparation du répertoire /etc/mail
cd /etc/mail sudo mkdir RCS SAMPLES sudo mv *.sample SAMPLES
- Réalisation du fichier de configuration pour le serveur
sudo vi `hostname`.mc
divert(-1) # sendmail.mc # # This is the sendmail macro config file. If you make changes to this file, # then generate a new /etc/mail/sendmail.cf by running the following command: # # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf # # Or run "make install restart" in /etc/mail. # # Boutry Thomas, 3 Juillet 2008 divert(0) VERSIONID(`$Id$')dnl OSTYPE(`freebsd6')dnl FEATURE(`nullclient', `barabbas.xerus.net')dnl dnl # EOF
sudo ci -u `hostname`.mc
- Processe le fichier mc de sendmail et convertir ce fichier avec la syntax sendmail et redémarrage du service.
sudo make install restart
- test de configuration
mail -s " un test de `hostname`" votre@courriel.net
Configure Network Time Protocol
- Configuration du client ntp
sudo vi /etc/ntp.conf
# ntp.conf # # $Id$ # # Configuration file for ntpd(8). # # Boutry Thomas 5 juillet 2008 # server # List a hostname, not an IP, of a machine synchronise against. # server clock.via.net # driftfile # Full path to the drift file. # driftfile /etc/ntp/ntpd.drift # Prohibit general access to this service. restrict default ignore # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. # restrict 192.168.1.123 mask 255.255.255.0 noquery nomodify notrap # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 # EOF
sudo ci -u /etc/ntp.conf
- Mise en place de la rotation des logs de ntp
sudo touch /var/log/ntp.log sudo co -l /etc/newsyslog.conf sudo vi /etc/newsyslog.conf
- Ajoutez
/var/log/ntpd.log 600 7 100 * J
sudo ci -u /etc/newsyslog.conf
- Activation du service ntpd
sudo co -l /etc/rc.conf sudo vi /etc/rc.conf
- Ajoutez
ntpd_enable="YES" ntpd_flags="-p /var/run/ntpd.pid -l /var/log/ntpd.log" # Flags to ntpd (if enabled).
sudo ci -u /etc/rc.conf
Configuration du fichier rc.conf
Nous allons maintenant ajouter quelques configuration au fichiers rc.conf
sudo co -l /etc/rc.conf sudo vi /etc/rc.conf
- Ajoutez
accounting_enable="YES" # Enable accounting. check_quotas="YES" # Check quotas. clear_tmp_enable="YES" # Clear /tmp at startup. icmp_bmcastecho="NO" # Do not respond to broadcast ping packets. icmp_drop_redirect="YES" # Drop ICMP redirect. icmp_log_redirect="YES" # Log dropped ICMP redirect. inetd_enable="NO" # Don't run inetd(8). keyrate="normal" # Set normal keyboard repeat rate. saver="green" # Blank screen when idle. scrnmap="NO" # Screen map in /usr/share/syscons/scrnmaps/* (or NO). sendmail_enable="NO" # Bind sendmail(8) to locahost only. sshd_enable="YES" # Start sshd(8). syslogd_enable="YES" # Start syslogd(8). syslogd_flags="-ss" # Receive syslogd(8) from local machine only. tcp_drop_synfin="YES" # Prevent OS finger printing. tcp_keepalive="YES" # Enable stale TCP connection timeout (or NO). update_motd="NO" # Don't update motd(5) at startup. usbd_enable="YES" # Start usbd(8).
sudo ci -u /etc/rc.conf
Configuration du système de mise à jour - CVSUP
- Création du fichier de configuration
sudo vi /root/cvs-supfile
# cvs-supfile
#
# $Id$
#
# Supfile for upgrading world and kernel.
#
# Check /usr/share/examples/cvsup/cvs-supfile for more information.
#
# Boutry Thomas 5 juillet 2008
# Host from which files are fetched.
#
*default host=cvsup4.freebsd.org
# Directory where CVSup stores info about it's work.
# Will never grow beyond ~1MB and creates ${base}/sup.
# NOTE: The `refuse' file is thus: /var/db/cvsup/sup/refuse
#
*default base=/var/db/cvsup
# Directory where to place the downloaded files.
#
*default prefix=/usr
# Which version of FreeBSD do we want?
# Check http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvs-tags.html
#
*default tag=RELENG_7_0
# Defauts. Don't need to change this.
#
*default release=cvs delete use-rel-suffix compress
# What do we want to download?
#
src-all
# EOF
sudo mkdir /root/RCS sudo ci -u /root/cvs-supfile
- Création du répertoire pour l'application cvsup
sudo mkdir -p /var/db/cvsup/sup
- Copy du fichier refuse afin de ne pas télécharger certain répertoires
sudo cp /usr/share/examples/cvsup/refuse /var/db/cvsup/sup
- Récupération des fichiers du cvs
sudo cvsup -g -L 2 /root/cvs-supfile
Création du fichier de configue pour le Kernel
Nous allons recompiler le kernel avec de nouvelles configuration, ceci nous permettra d'avoir un kernel compilé sur le serveur et optimisé pour ce dernier et aussi nous permettre d'enlever certain module que nous n'utilisons pas telle que par exemple le support pour les cartes ISA.
- Définition des variables d'environnement
Nous allons définir la variable MYKERNEL avec le modele du serveur que nous utilisons ceci nous permettra de savoir le type de serveur que nous utilisons même si nous sommes connecté par SSH.
example pour un DELL 1950 le nom du kernel sera DELL1950.
export MYKERNEL=VMWARE_VM
- Création du fichier de config.
sudo mkdir -p /root/kernel sudo cp /usr/src/sys/i386/conf/GENERIC /root/kernel/$MYKERNEL sudo ln -s /root/kernel/$MYKERNEL /usr/src/sys/i386/conf sudo vi /root/kernel/$MYKERNEL
Vous pouvez mettre en commantaire les modules que vous ne voulez pas .
sudo ci -u /root/kernel/$MYKERNEL
Une fois l'opération terminé allez sur la page FreeBSD Mise à jour, pour les instructions de compilation du kernel et de la base du système.
Trucs & Astuces
ports
- Recherche d'une application dans les ports
- Mise a jour de l'index :
cd /usr/ports/ make fetchindex
- Recherche du package:
make search name=Nom_package
Références
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/
http://wiki.zerocatastrophe.com/wiki/UNIX/FreeBSD/Installation
