Install et conf de base d’une Debian
Remarques pour la suite:
- Ce n’est pas précisé dans la suite, mais la commande de gestion de package à utilisé est aptitude, il faut oublier apt-get;
- Cette documentation s’applique pour une installation en mode TEXTE et EXPERT ;
- Je fais en sorte que ça m’installe le moins de merde possible, typiquement là, je sélectionne rien ;
- Le document n’aborde pas la mise en place d’un RAID soft dès l’installation, en fouillant, ça se fait assez facilement avec l’outils de partitionnement ;
- Idem pour les partoches cryptées ;
- Personnellement, je fais l’installation en anglais, et j’aime bien avoir un système compatible avec unicode, du coup, mon choix de langue ou de locale est en_US.UTF-8 ;
- Après le premier boot du système, il faut installer au moins le paquet openssh-server (enfin, surtout pour un serveur auquel on a pas prévu de brancher d’ecran et de clavier).
Mon partitionnement standard:
- montage: /boot, taille: 150MB, type: ext3, options: nodev,nosuid ,noexec, label: /boot, “bootable flag”: oui ;
- montage: none, taille: 2GB, type: swap, label: swap (si on prévois de mettre le système en veille avec un suspend to disk, on peut mettre 2x la quantité de RAM de la machine) ;
- montage: /, taille: 20GB, type: ext4, options: relatime, label: / ;
- montage: /tmp, taille: 10GB, type: ext4, options: relatime,nodev,nosuid,noexec, label: /tmp (logique – on peut s’en passer, surtout si on compte passer le /tmp en tmpfs plus tard) ;
- montage: /var, taille: 10GB, type: ext4, options: relatime,nodev, label: /var (logique) ;
- montage: /home, taille: tout le reste, type: ext4, options: relatime,nodev,nosuid, label: /home (logique – sur un serveur, je limite à 10GB, j’ai souvent une partition de data en prime) ;
- montage /var/log, type: XFS options: noatime,nodiratime,nodev,nosuid,noexec, label: logs (celle-là, je la met surtout sur mes serveurs, et je la prévois aussi grande que possible, on peut compléter les options avec ce qui est décrit là)
Configuration de base 1/2:
Pour le gestionnaire de package, le fichier /etc/apt/sources.list
doit contenir au moins (pour stable):
deb http://ftp2.fr.debian.org/debian/ squeeze main contrib non-free deb http://security.debian.org/ squeeze/updates main contrib non-free deb http://ftp2.fr.debian.org/debian squeeze-updates main contrib non-free deb http://backports.debian.org/debian-backports squeeze-backports main
On peut remplacer stable par testing sur un desktop/laptop et ajouter ces sources:
deb http://www.debian-multimedia.org testing main
deb http://dl.google.com/linux/chrome/deb/ stable main
deb http://deb.opera.com/opera/ sid non-free
deb http://deb.playonlinux.com/ squeeze main
deb http://download.virtualbox.org/virtualbox/debian squeeze non-free
Sur un serveur ou une machine restreinte en espace disque, je créé aussi un fichier /etc/apt/apt.conf.d/10reco_and_suggests, qui contient:
APT::Install-Recommends "0"; APT::Install-Suggests "0";
Ensuite, lancer les commandes:
# aptitude update # aptitude safe-upgrade
Installation des packages de base:
J’installe au moins:
# aptitude install vim-nox xfsprogs hdparm ethtool sudo screen pciutils nfs-common smartmontools pciutils dmidecode inetutils-telnet snmp ntpdate bsd-mailx logrotate multitail tcpdump nmap lsof inotify-tools ssmtp bind9-host resolvconf atop iptraf psmisc less parted mlocate mtr minicom lshw python rsync unzip dnsutils read-edid whois
Sur un serveur, j’ajoute aussi tout ça:
# aptitude install mdadm reiserfsprofs vlan ifenslave bridge-utils nagios-nrpe-server cron-apt ocsinventory-agent nagios-plugins geoip-database snmpd
Configuration de base 2/2:
- Éditeur par défaut:
update-alternatives --set editor /usr/bin/vim.nox
-
Pager par défaut:
update-alternatives --set pager /bin/less
- Configuration de vim:
syntax on set hls set showmatch set laststatus=2 set statusline=%t\\ %y%r%{&ff}%m%=[%c%V,%l,%P] set modeline set modelines=1 set titlestring=%{expand($USER)}@%{hostname()}:vim\\ %F%m%r set title
- Configuration du “serveur” SMTP local - /etc/ssmtp/ssmtp.conf:
root=moi@mondomain.net mailhub=smtp.mondomain.net:465 rewriteDomain=mondomain.net FromLineOverride=YES AuthUser=moi AuthPass=monMotDePasse UseTLS=YES
- Configuration du portmaper - /etc/default/portmap:
OPTIONS="-i 127.0.0.1"
- Configuration du client NFS - /etc/default/nfs-common:
NEED_STATD=no STATDOPTS= NEED_IDMAPD=no NEED_GSSD=no
- [serveur] Configuration du serveur SNMP - /etc/default/snmpd (1/2):
export MIBS= SNMPDRUN=yes SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1 X.Y.Z.T' TRAPDRUN=no TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid' SNMPDCOMPAT=yes
- [serveur] Configuration du serveur SNMP - /etc/snmp/snmpd.conf (2/2):
com2sec local localhost coincoin com2sec mynetwork X.Y.0.0/16 coincoin group MyRWGroup v1 local group MyRWGroup v2c local group MyRWGroup usm local group MyROGroup v1 mynetwork group MyROGroup v2c mynetwork group MyROGroup usm mynetwork view all included .1 80 access MyROGroup "" any noauth exact all none none access MyRWGroup "" any noauth exact all all none syslocation qqpart syscontact MOI - moi@mondomain.net proc sshd 0 1 disk / 10000 load 4 6 8
- Configuration de SSHd - /etc/ssh/sshd_config:
Port 22 #ListenAddress x.y.z.t # si on veut binder le service sur une seul IP/interface de la machine Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin no StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding no # bon, là, ça dépend de ce qu'on veut faire X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes ClientAliveInterval 3600 ClientAliveCountMax 0 UseDNS no # ça, ça me gonfle souvent
- [serveur] Configuration de NRPE:
Convention: X.Y.Z.T est l’IP de la machine, Lm1, Lm5, Lm15, LM1, LM5, LM15 sont les valeurs à adapter en fonction de la machine pour les charges min (m) et max (M).
il faut que le fichier /etc/nagios/nrpe.cfg
ressemble à ça:
log_facility=daemon pid_file=/var/run/nrpe.pid server_port=5666 server_address=X.Y.Z.T nrpe_user=nagios nrpe_group=nagios dont_blame_nrpe=1 debug=0 command_timeout=60 connection_timeout=300 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_dead_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s D command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 include=/etc/nagios/nrpe_local.cfg include_dir=/etc/nagios/nrpe.d/
Le fichier /etc/nagios/nrpe_local.cfg doit contenir au moins (les scripts check_*.sh seront copiés-collés en annexe):
command[check_load]=/usr/lib64/nagios/plugins/check_load -w Lm1,Lm5,Lm15 -c LM1,LM5,LM15 command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 10% -c 5% command[check_space]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p $ARG1$ command[check_mount]=/usr/local/bin/check_mount.sh $ARG1$ $ARG2$ command[check_ofiles]=/usr/local/bin/check_ofiles.sh command[check_bonding]=/usr/local/bin/check_bonding.sh
- [serveur] Initialiastion de l’agent OCS Inventory:
/usr/bin/ocsinventory-agent -s http://172.16.99.253/ocsinventory
- Configuration de logrotate:
daily rotate 31 create include /etc/logrotate.d /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }
Annexes:
check_bonding.sh
#!/bin/bash
if [ -r /proc/net/bonding/bond0 ] then m=`grep -i -m1 "bonding mode:" /proc/net/bonding/bond0 | cut -d':' -f2 | sed -e 's/^\\s*//' -e 's/\\s*$//'`
if [ "$m" != "adaptive load balancing" ] then echo "KO: bonding mode is [$m]" else declare -i N=`cat /proc/net/bonding/bond0 | grep -i "MII Status" | grep -u up | wc -l | sed 's/^0*//'` if [ $N -lt 1 ] then echo "WARNING: bonding mode is OK, but no interfaces are UP!" else echo "OK: bonding mode is [$m], $((N - 1)) interfaces UP" fi fi else echo "OK: no bonding configured" fi
check_mount.sh
#!/bin/sh
if [ $# -ne 2 ] then echo "Usage: $0 fs mount_point" exit $STATE_CRITICAL fi
STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4
ls -1An "$2" &> /dev/null
s=`mount | grep "$1" | grep -m 1 -F "$2 "`
if [ -z "$s" ] then echo "CRITICAL: $2 not mounted!" exit $STATE_CRITICAL else echo "OK: $s" exit $STATE_OK fi
check_ofiles.sh
#!/bin/bash
STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4
declare -i max declare -i all declare -i soc
declare -i p
max=`cat /proc/sys/fs/file-max` all=`cat /proc/sys/fs/file-nr | sed 's/^\\([0-9][0-9]*\\).*$/\\1/'` soc=`snmpwalk -v 2c -c coincoin -O q -O v 127.0.0.1 .1.3.6.1.2.1.6.9.0` p=$((100 * all / max))
if [ $p -lt 80 ] then echo "OK: ${soc} sockets, $((all - soc)) files, max = ${max}" exit $STATE_OK elif [ $p -lt 90 ] then echo "WARNING: ${all}/${max} (${p}%) opened files" exit $STATE_WARNING else # [ $p -ge 90 ] echo "CRITICAL: ${all}/${max} (${p}%) opened files!" exit $STATE_CRITICAL fi
echo "UNKNOWN: ${soc} sockets, $((all - soc)) files, max = ${max} / ${p}% of ${max} opened files..." exit $STATE_UNKNOWN