2017-06-19 11:03:13 +02:00
<!doctype html>
< html lang = "fr" >
< head >
< meta charset = "utf-8" >
< title > Formation Evolix : administration système et réseau< / title >
< meta name = "description" content = "A framework for easily creating beautiful presentations using HTML" >
< meta name = "author" content = "Hakim El Hattab" >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black-translucent" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" >
2017-06-19 16:46:03 +02:00
< link rel = "stylesheet" href = "reveal.js/css/reveal.css" >
< link rel = "stylesheet" href = "reveal.js/css/theme/beige.css" id = "theme" >
2017-06-19 11:03:13 +02:00
<!-- Theme used for syntax highlighting of code -->
2017-06-19 16:46:03 +02:00
< link rel = "stylesheet" href = "reveal.js/lib/css/zenburn.css" >
2017-06-19 11:03:13 +02:00
<!-- Printing and PDF exports -->
< script >
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
2017-06-19 16:46:03 +02:00
link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js/css/print/pdf.css' : 'reveal.js/css/print/paper.css';
2017-06-19 11:03:13 +02:00
document.getElementsByTagName( 'head' )[0].appendChild( link );
< / script >
<!-- [if lt IE 9]>
2017-06-19 16:46:03 +02:00
< script src = "reveal.js/lib/js/html5shiv.js" > < / script >
2017-06-19 11:03:13 +02:00
<![endif]-->
< / head >
< body >
< div class = "reveal" >
<!-- Any section element inside of this container is displayed as a slide -->
< div class = "slides" >
2017-06-19 18:33:19 +02:00
< section >
< h1 > Formation Evolix< / h1 >
2017-06-19 21:41:32 +02:00
< h3 > Administration système & réseau & sécurité< / h3 >
2017-06-19 18:33:19 +02:00
< / section >
2017-06-19 11:03:13 +02:00
< section >
2017-06-19 23:52:26 +02:00
< section >
< h2 > Cron< / h2 >
2017-06-20 03:19:14 +02:00
Démon de planification de tâches
2017-06-19 23:52:26 +02:00
< / section >
2017-06-19 22:51:36 +02:00
2017-06-19 23:52:26 +02:00
< section >
2017-06-19 23:59:40 +02:00
< h3 > Les fichiers de cron< / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# systemctl status cron
2017-06-19 23:52:26 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# vim /etc/crontab
# vim /etc/default/cron
2017-06-19 23:59:40 +02:00
< / code >
< / pre >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# vim /etc/cron.d/example
2017-06-19 23:52:26 +02:00
< / code >
2017-06-19 23:59:14 +02:00
30 05 * * 0 www-data /usr/local/adm/savelog-weekly
2017-06-19 23:52:26 +02:00
< / pre >
< / section >
2017-06-19 22:51:36 +02:00
2017-06-19 23:52:26 +02:00
< section >
2017-06-20 00:01:09 +02:00
< h3 > Éditer une table< / h3 >
2017-06-19 23:52:26 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
$ crontab -e
< / code >
< code data-trim class = "hljs nohighlight" >
# crontab -u jdoe -e
< / code >
2017-06-19 23:59:14 +02:00
0,30,45,51 * * * * /usr/local/adm/send-data
*/15 * * * * /usr/local/adm/check-nis 1>/dev/null 2>& 1
00 01 * * * nice -10 find /inf -name core -exec rm -f {} \;
10 03 * * 1-6 nice -10 /usr/local/adm/sauvegarde-daily
30 05 * * 0 /usr/local/adm/savelog-weekly
30 06 1 * * /usr/local/adm/savelog-monthly
00 00 1 1 * /usr/local/bin/happy-new-year
MAILTO=alert@example.com
@daily /usr/local/bin/minuit-check
2017-06-19 23:52:26 +02:00
< / pre >
< / section >
< section >
2017-06-20 00:01:09 +02:00
< h3 > Documentation et consultation< / h3 >
2017-06-19 23:52:26 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
$ man 5 crontab
2017-06-19 23:52:26 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
$ crontab -l
2017-06-19 23:52:26 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# crontab -u jdoe -l
2017-06-19 23:52:26 +02:00
< / code >
< / pre >
< / section >
2017-06-19 11:03:13 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:23:11 +02:00
< section >
< h2 > ntpd< / h2 >
2017-06-20 01:12:41 +02:00
Démon de protocole de temps réseau.
2017-06-20 00:23:11 +02:00
< / section >
< section >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
$ date
2017-06-20 00:23:11 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# apt install ntp
2017-06-20 00:23:11 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 22:48:58 +02:00
# vim /etc/ntp.conf :
2017-06-20 00:23:11 +02:00
< / code >
2017-06-20 00:12:08 +02:00
server ntp.evolix.net
2017-06-20 22:48:58 +02:00
< code data-trim class = "hljs nohighlight" >
# syctemctl restart ntp
# syctemctl status ntp
< / code >
2017-06-20 00:23:11 +02:00
< / pre >
< / section >
2017-06-19 23:59:14 +02:00
< section >
2017-06-20 00:23:11 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# ntpq -p
2017-06-20 00:23:11 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
$ timedatectl
2017-06-20 00:23:11 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# hwclock --show
2017-06-20 00:23:11 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# hwclock --systohc
2017-06-20 00:23:11 +02:00
< / code >
< / pre >
2017-06-19 23:59:14 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:12:08 +02:00
< section >
2017-06-20 00:23:11 +02:00
< h2 > systemd< / h2 >
2017-06-20 01:12:41 +02:00
Gestionnaire système et service
2017-06-20 00:12:08 +02:00
< / section >
< section >
< h3 > systemd est un gestionnaire de services< / h3 >
< p > Alternative au System V, installé par défaut depuis Debian 8.< / p >
< pre >
2017-06-20 00:23:11 +02:00
< code data-trim class = "hljs nohighlight" > # systemctl status< / code >
< code data-trim class = "hljs nohighlight" > # systemctl list-units< / code >
< code data-trim class = "hljs nohighlight" > # systemctl --failed< / code >
< code data-trim class = "hljs nohighlight" > # systemctl list-unit-files< / code >
2017-06-20 00:12:08 +02:00
< / pre >
< / section >
2017-06-19 22:59:55 +02:00
2017-06-20 00:12:08 +02:00
< section >
2017-06-20 00:23:11 +02:00
< ul >
< li > Unités par défaut : /usr/lib/systemd/system/< / li >
< li > Modifications manuelles : /etc/systemd/system/< / li >
< / ul >
< pre >
< code data-trim class = "hljs nohighlight" > # systemctl start < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl stop < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl restart < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl reload < unité> < / code >
< / pre >
2017-06-20 00:12:08 +02:00
< / section >
2017-06-19 22:59:55 +02:00
2017-06-20 00:12:08 +02:00
< section >
2017-06-20 00:23:11 +02:00
< pre >
< code data-trim class = "hljs nohighlight" > # systemctl status < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl is-enabled < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl enable < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl disable < unité> < / code >
< / pre >
2017-06-20 00:12:08 +02:00
< / section >
2017-06-19 22:59:55 +02:00
2017-06-20 00:12:08 +02:00
< section >
2017-06-20 00:23:11 +02:00
< pre >
< code data-trim class = "hljs nohighlight" > # systemctl reboot< / code >
< code data-trim class = "hljs nohighlight" > # systemctl poweroff< / code >
< code data-trim class = "hljs nohighlight" > # systemd-analyze< / code >
< / pre >
2017-06-20 00:12:08 +02:00
< / section >
2017-06-19 22:59:55 +02:00
2017-06-20 00:12:08 +02:00
< section >
2017-06-20 00:23:11 +02:00
< h2 > Modifier une unité< / h2 >
< pre >
< code data-trim class = "hljs nohighlight" > # cp -a /lib/systemd/system/< service> .service /etc/systemd/system/< / code >
< code data-trim class = "hljs nohighlight" > # vim /etc/systemd/system/< service> .service< / code >
< code data-trim class = "hljs nohighlight" > # systemctl cat ssh< / code >
< code data-trim class = "hljs nohighlight" > # systemctl edit < unité> < / code >
< code data-trim class = "hljs nohighlight" > # systemctl daemon-reload< / code >
< / pre >
2017-06-20 00:12:08 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-19 23:31:43 +02:00
< section >
< h2 > Postfix< / h2 >
2017-06-20 01:12:41 +02:00
Agent de transport de courriers électroniques
2017-06-19 23:31:43 +02:00
< / section >
< section >
2017-06-20 01:12:41 +02:00
< h3 > Installation et configuration< / h3 >
2017-06-19 23:31:43 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
2017-06-20 00:17:16 +02:00
# apt install postfix
2017-06-19 23:31:43 +02:00
< / code > < / pre >
< ul >
< li > process : /etc/postfix/master.cf< / li >
< li > options : /etc/postfix/main.cf< / li >
< / ul >
< / section >
< section >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" > # vim main.cf< / code >
2017-06-19 23:11:44 +02:00
smtpd_banner = $myhostname ESMTP mail server
biff = no
append_dot_mydomain = no
myhostname = hosting.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination = $myhostname localhost.localdomain localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
disable_vrfy_command = yes
2017-06-20 00:23:11 +02:00
< / pre >
< / section >
2017-06-19 23:11:44 +02:00
2017-06-20 00:23:11 +02:00
< section >
< pre >
< code class = "hljs nohighlight" data-trim style = "max-height: 500px" >
2017-06-19 23:11:44 +02:00
# date | mail -s test jdoe@example.com
# mailq
# qshape deferred
# postcat -vq < queue_id > > message.txt
# postsuper -d < queue_id >
# postsuper -d ALL
# postsuper -r < queue_id >
# postsuper -r ALL
2017-06-19 23:31:43 +02:00
# mailq | tail -n +2 | \
awk 'BEGIN { RS = "" } /example\.com$/ { print $1 }' | \
tr -d '*!' | postsuper -d -
2017-06-20 00:23:11 +02:00
< / code > < / pre >
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:38:59 +02:00
< section >
< h2 > syslog< / h2 >
< p > Rsyslog est le démon syslog par défaut sous Debian. < / p >
< / section >
< section >
< h3 > Le protocole syslog gère la journalisation< / h3 >
Les messages sont :
< ul >
< li > émis par diverses applications (messages kernel, user, daemon, mail, etc.)< / li >
< li > triés par < em > facility< / em > (LOG_KERN, LOG_CRON, LOG_DAEMON, LOG_MAIL, LOG_AUTH, etc.)< / li >
< li > ordonnés par < em > severity< / em > (LOG_EMERG, LOG_ALERT, LOG_ERR, LOG_WARNING, etc.) ;< / li >
< li > reçus par un démon qui les répartit dans différents fichiers situés dans le répertoire < tt > /var/log/< / tt > ou par d’ autres façons (serveur syslog distant, terminal, etc.)< / li >
< / ul >
< / section >
< section >
< pre >
< code data-trim class = "hljs nohighlight" > # systemctl status rsyslog< / code >
< code data-trim class = "hljs nohighlight" > # vim /etc/rsyslog.conf< / code >
2017-06-19 23:32:08 +02:00
*.*;auth,authpriv.none;cron,mail,local4,local5,local7.none -/var/log/syslog
cron.* /var/log/cron.log
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err
local0.* /var/log/postgresql.log
local1.* /var/log/sympa.log
local4.* -/var/log/openldap.log
local5.* -/var/log/haproxy.log
local7.* -/var/log/dhcp.log
2017-06-20 00:38:59 +02:00
< / pre >
< / section >
< section >
< h3 > Journaux principaux :< / h3 >
< ul >
< li > auth.log : authentification système (login, su, getty)< / li >
< li > daemon.log : relatif aux daemons< / li >
< li > mail.* : relatifs aux mails< / li >
< li > kern.log : générés par le noyau< / li >
< li > user.log : générés par des programmes utilisateur< / li >
< li > debug : messages de debug< / li >
< li > messages : messages d'infos< / li >
< li > syslog : tous les messages (sauf exceptions définies)< / li >
< / ul >
< / section >
2017-06-19 23:32:08 +02:00
< / section >
2017-06-20 00:42:19 +02:00
< section >
2017-06-20 00:56:00 +02:00
< section >
< h2 > logrotate< / h2 >
< p > Le logiciel logrotate permet de gérer la rotation des journaux système et applicatif de façon précise et ordonnée.< / p >
< / section >
< section >
< ul >
< li > Logrotate est exécuté tous les jours (cron.daily)< / li >
< li > selon la fréquence choisie les journaux sont compressés et datés< / li >
< li > des actions spécifiques sont possibles (relance du service, gérénation de stats…)< / li >
< / ul >
< / section >
2017-06-19 23:46:53 +02:00
2017-06-20 00:56:00 +02:00
< section >
2017-06-20 01:12:41 +02:00
< h3 > Exemple de configuration< / h3 >
2017-06-20 00:56:00 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-19 23:46:53 +02:00
# vim /etc/logrotate.d/dpkg
2017-06-20 00:56:00 +02:00
< / code >
2017-06-19 23:46:53 +02:00
/var/log/dpkg.log {
monthly
rotate 12
compress
delaycompress
missingok
notifempty
create 644 root root
}
2017-06-20 00:56:00 +02:00
< / pre >
< p > Note : le programme "savelog" permet une rotation ultrasimple de journaux en ajoutant un suffixe et conservant 7 versions.< / p >
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:42:19 +02:00
< section >
2017-06-20 00:56:00 +02:00
< h2 > log2mail< / h2 >
< p > Pour surveiller précisement un fichier journal et recevoir immédiatemment des
alertes par mail si certains termes apparaissent dans ce fichier.< / p >
2017-06-20 00:42:19 +02:00
< / section >
< section >
2017-06-20 01:12:41 +02:00
< h3 > Installation, configuration et gestion< / h3 >
2017-06-20 00:56:00 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-19 23:57:29 +02:00
# apt install log2mail
2017-06-20 00:56:00 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-19 23:57:29 +02:00
# vim /etc/log2mail/config/default
2017-06-20 00:56:00 +02:00
< / code >
2017-06-19 23:57:29 +02:00
file = /var/log/mail.log
pattern = "fatal"
mailto = admin@example.com
template = /etc/log2mail/mail
2017-06-20 00:56:00 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-19 23:57:29 +02:00
# /etc/init.d/log2mail restart
2017-06-20 00:56:00 +02:00
< / code >
< / pre >
2017-06-20 00:42:19 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:42:19 +02:00
< section >
2017-06-20 00:56:00 +02:00
< h2 > logcheck< / h2 >
< p > Logcheck envoie par mail, les lignes inconnues (non répertoriées dans ses règles) trouvées dans certains journaux.< / p >
2017-06-20 00:42:19 +02:00
< / section >
< section >
2017-06-20 01:12:41 +02:00
< h3 > Installation et configuration< / h3 >
2017-06-20 00:56:00 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:01:56 +02:00
# aptitude install logcheck logcheck-database
2017-06-20 00:56:00 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 22:48:58 +02:00
# vim /etc/logcheck/logcheck.conf
2017-06-20 00:56:00 +02:00
< / code >
2017-06-20 00:01:56 +02:00
REPORTLEVEL="server"
SENDMAILTO="alert@example.com"
MAILASATTACH=0
FQDN=1
TMP="/tmp"
2017-06-20 00:42:19 +02:00
< / section >
2017-06-20 00:56:00 +02:00
2017-06-20 00:42:19 +02:00
< section >
2017-06-20 22:48:58 +02:00
Exceptions dans /etc/logcheck/ignore.d.server/
2017-06-20 00:56:00 +02:00
< pre >
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: \[IPTABLES DROP\] : IN=eth0 OUT= MAC=.*
2017-06-20 00:01:56 +02:00
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ nrpe\[[0-9]+\]: INFO: SSL Socket Shutdown.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ntpd\[[0-9]+\]: clock is now [[:alnum:]]+$
2017-06-20 00:56:00 +02:00
< / pre >
2017-06-20 00:42:19 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 00:48:04 +02:00
< section >
2017-06-20 01:12:41 +02:00
< h2 > fail2ban< / h2 >
< p > Exécute des actions à la détection de comportements anormaux.< / p >
2017-06-20 00:48:04 +02:00
< / section >
< section >
2017-06-20 01:12:41 +02:00
< h3 > Installation et commandes utiles< / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:13:29 +02:00
# apt install fail2ban
2017-06-20 01:12:41 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:13:29 +02:00
# fail2ban-client status
2017-06-20 01:12:41 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:13:29 +02:00
# fail2ban-client status ssh
2017-06-20 01:12:41 +02:00
< / code >
< / pre >
< / section >
< section >
< h3 > Exemple de filtre< / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:13:29 +02:00
# vim /etc/fail2ban/filter.d/demo :
2017-06-20 01:12:41 +02:00
< / code >
2017-06-20 00:13:29 +02:00
[Definition]
failregex = warning: \[< HOST > \]: authentication failed:
ignoreregex =
2017-06-20 01:12:41 +02:00
< / pre >
2017-06-20 00:48:04 +02:00
< / section >
< section >
2017-06-20 01:12:41 +02:00
< h3 > Exemple de < em > jail< / em > < / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:13:29 +02:00
# vim /etc/fail2ban/jail.local
2017-06-20 01:12:41 +02:00
< / code >
2017-06-20 00:13:29 +02:00
[demo-rule]
2017-06-20 01:12:41 +02:00
enabled = true
port = http,https
filter = demo
logpath = /var/log/demo.log
2017-06-20 00:13:29 +02:00
maxretry = 3
findtime = 1800
2017-06-20 01:12:41 +02:00
bantime = 3600
< / pre >
2017-06-20 00:48:04 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 00:13:29 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-19 18:33:19 +02:00
< section >
< h2 > Introduction à Git< / h2 >
< / section >
< section >
< h3 > Qu'est-ce que Git ?< / h3 >
< p > Système de contrôle de versions, open-source, décentralisé, conçu pour être efficace et rapide.< / p >
< / section >
< section >
< h4 > Contrôle de versions< / h4 >
< ul >
< li > conserver différentes versions dans le temps< / li >
< li > naviguer dans l'historique< / li >
2017-06-19 22:53:07 +02:00
< li > gérer des branches< / li >
2017-06-19 18:33:19 +02:00
< li > travailler en équipe< / li >
< / ul >
< / section >
< section >
< h4 > outils connus ?< / h4 >
< ul >
< li > cp-old < pre > cp main.c main.c.old< / pre > < / li >
< li > RCS, CVS, SVN< / li >
< li > GIT, Mercurial, Bazar, Darcs, GNU Arch…< / li >
< li > Perforce, IBM Rational, Visual SourceSafe…< / li >
< / ul >
< / section >
< section >
< h4 > Open-source< / h4 >
< ul >
< li > License GPL v2< / li >
< li > Créé par Linus Torvalds pour le noyau Linux< / li >
< li > multi-plateformes< / li >
< / ul >
< / section >
< section >
< h4 > Décentralisé< / h4 >
< ul >
2017-06-19 22:53:07 +02:00
< li > Tout est local (le plus souvent)< / li >
2017-06-19 21:41:32 +02:00
< li > échanges possibles entre dépôts (FS ou réseau)< / li >
2017-06-19 18:33:19 +02:00
< li > tout l'historique est disponible< / li >
< li > pereine et fiable (copies autonomes et complètes)
< / ul >
< / section >
< section >
< h4 > Rapide, efficace< / h4 >
< ul >
< li > simple base de données clés/valeurs< / li >
< li > écrit en C, très portable< / li >
< li > adapté à toutes les tailles de projets< / li >
< / ul >
< / section >
< section >
< h3 > Concepts de base< / h3 >
< / section >
< section >
< h4 > Historique< / h4 >
< ul >
< li > métadonnées sur le commit< / li >
< li > liaison(s) avec le(s) parent(s)< / li >
< li > visualisation chonologique< / li >
< / ul >
< / section >
< section >
2017-06-19 21:41:32 +02:00
< h4 > < em > commit< / em > , < em > tree< / em > , < em > blob< / em > < / h4 >
2017-06-19 18:33:19 +02:00
< ul >
2017-06-19 21:41:32 +02:00
< li > un commit pointe sur un arbre< / li >
2017-06-19 18:33:19 +02:00
< li > chaque élément pointe sur un autre arbre< / li >
2017-06-19 21:41:32 +02:00
< li > … ou sur un "blob" (contenu final)< / li >
2017-06-19 18:33:19 +02:00
< / ul >
< / section >
< section >
< h4 > les branches< / h4 >
< ul >
< li > la botte secrète de Git< / li >
< li > faciles à créer, fusionner, détruire< / li >
< li > éphémères ou durables< / li >
< li > locales ou partagées< / li >
< li > la base d'un workflow d'équipe< / li >
< / ul >
< / section >
< section >
< h4 > 3 zones< / h4 >
< ul >
2017-06-19 21:41:32 +02:00
< li > < em > working copy< / em > : ce que voit votre éditeur< / li >
< li > < em > staging area< / em > : préparer des commits< / li >
< li > < em > repository< / em > : la base de données interne< / li >
2017-06-19 18:33:19 +02:00
< / ul >
< / section >
< section >
< h4 > Utilisation< / h4 >
< ul >
< li > en ligne de commande< / li >
< li > dans un outil (graphique) dédié< / li >
< li > intégré aux éditeurs…< / li >
< / ul >
< / section >
< section >
2017-06-19 21:41:32 +02:00
< h3 > En pratique : /etc/.git< / h3 >
2017-06-19 21:21:59 +02:00
< p > Une < em > bonne pratique< / em > Evolix.< / p >
2017-06-19 18:33:19 +02:00
< / section >
2017-06-19 22:53:07 +02:00
< section >
< h4 > Installation de Git< / h4 >
2017-06-20 02:20:47 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
2017-06-19 22:53:07 +02:00
# apt install git
# git --version
git version 2.11.0
< / code > < / pre >
< / section >
2017-06-19 18:33:19 +02:00
< section >
2017-06-19 21:21:59 +02:00
< h4 > Initialisation du dépôt< / h4 >
2017-06-20 02:20:47 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
2017-06-19 21:41:32 +02:00
$ cd /etc
2017-06-19 18:33:19 +02:00
$ su
2017-06-19 22:53:07 +02:00
# git init
2017-06-19 18:33:19 +02:00
# git status
# git add .
# git commit -m "commit initial"
< / code > < / pre >
< / section >
2017-06-19 21:21:59 +02:00
< section >
< h4 > Premières modifications< / h4 >
2017-06-20 02:20:47 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
2017-06-19 21:21:59 +02:00
# echo "127.0.0.1 foo" >> /etc/hosts
# git status
# git diff [HEAD]
# git commit --all --message "Ajout de foo dans /etc/hosts"
# git log
# git show
< / code > < / pre >
< / section >
< section >
< h3 > Aller plus loin< / h3 >
< p > Le livre < strong > Pro Git< / strong > est incontournable,< br > pour le débutant comme pour l'expert.< / p >
< p > < a href = "https://git-scm.com/book/fr/v2" > git-scm.com/book/fr/v2< / a > < / p >
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:40:24 +02:00
< h2 > Monitoring< / h2 >
< ul >
< li > statistiques
< ul >
< li > nombreuses métriques locales< / li >
< li > Munin, Collectd/Grafana, Beats/ELK< / li >
< / ul >
< / li >
< li > alerting
< ul >
2017-06-20 22:48:58 +02:00
< li > surveillance de services HTTP, SMTP, POP3, SQL etc. + ressources (charge processeur, utilisation des disques, etc.)< / li >
2017-06-20 01:40:24 +02:00
< li > Nagios, Icinga, Zabbix, Monit< / li >
< / ul >
< / li >
< / ul >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:40:24 +02:00
< section >
< h2 > Sécurité< / h2 >
< / section >
2017-06-20 01:00:22 +02:00
< section >
2017-06-20 01:40:24 +02:00
< h3 > Sécurité physique< / h3 >
< ul >
< li > protection du BIOS par mot de passe< / li >
< li > protection du boot loader< / li >
< li > empêcher le reboot< / li >
< li > clear_console< / li >
< li > reporting< / li >
< li > fermeture de session en cas d'inactivité< / li >
< / ul >
2017-06-20 01:00:22 +02:00
< / section >
< section >
2017-06-20 01:40:24 +02:00
< h3 > Sécurité logicielle< / h3 >
< ul >
< li > gestion des mots de passe< / li >
< li > configuration sécurisée< / li >
< li > veille< / li >
< li > mises à jour de sécurité< / li >
< li > sauvegardes< / li >
< li > firewall< / li >
< / ul >
2017-06-20 01:00:22 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:08:33 +02:00
< section >
< h2 > Réseau / iptables< / h2 >
2017-06-20 01:40:24 +02:00
< / section >
< section >
< h3 > Rappels réseau< / h3 >
< ul >
< li > Couche physique : Ethernet (adresses MAC)< / li >
< li > Couche réseau : IPv4 (adressage, HostID, NetID, Masque, Brodcast, protocole ARP, ICMP)< / li >
< li > Couche transport : TCP, UDP (notion de ports, mode connecté)< / li >
< li > Couche application : HTTP, SMTP, DNS, etc.< / li >
< / ul >
2017-06-20 01:08:33 +02:00
< / section >
2017-06-20 01:40:24 +02:00
2017-06-20 01:08:33 +02:00
< section >
2017-06-20 01:40:24 +02:00
< h3 > Afficher les règles du firewall< / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:49:58 +02:00
# iptables -L -t filter -v
2017-06-20 01:40:24 +02:00
< / code >
< / pre >
< / section >
< section >
< ul >
< li > INPUT: les chaînes appliquées sur INPUT concerneront tout paquet à destination de localhost< / li >
< li > OUTPUT: les chaînes appliquées sur OUTPUT concerneront tout paquet en provenance de localhost< / li >
< li > FORWARD: le paquet n'est pas destiné à la machine locale, mais il doit être relayé sur une autre interface.
Les chaînes de FORWARD ne concerneront pas les paquets à destination ou venant de la machine locale.< / li >
< / ul >
2017-06-20 01:08:33 +02:00
< / section >
2017-06-20 01:40:24 +02:00
2017-06-20 01:08:33 +02:00
< section >
2017-06-20 01:40:24 +02:00
< h3 > Exemple de règles :< / h3 >
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-20 00:49:58 +02:00
# iptables -A INPUT -i eth1 -j ACCEPT
2017-06-20 01:40:24 +02:00
< / code >
< code data-trim class = "hljs nohighlight" >
# iptables -A INPUT -p tcp --sport 143 --dport 1024:65535 \
-s 31.170.8.33 -m state --state ESTABLISHED,RELATED -j ACCEPT
< / code >
< / pre >
< / section >
< section >
< h3 > Analyse de minifirewall< / h3 >
< ul >
2017-06-20 22:48:58 +02:00
< li > Dépôt du projet : < a href = "https://forge.evolix.org/projects/minifirewall/repository/" > forge.evolix.org/projects/minifirewall/repository/< / a > < / li >
2017-06-20 01:40:24 +02:00
< li > Instruction d'installation : < a href = "https://forge.evolix.org/projects/minifirewall/wiki" > forge.evolix.org/projects/minifirewall/wiki< / a > < / li >
< / ul >
2017-06-20 01:08:33 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-19 22:02:56 +02:00
< section >
< h2 > Introduction à Ansible< / h2 >
< / section >
2017-06-19 23:20:45 +02:00
< section >
< h3 > Qu'est-ce qu'Ansible ?< / h3 >
< h4 > Automatisation de configuration d'infrastructure et déploiement< / h4 >
< / section >
2017-06-19 22:02:56 +02:00
< section >
2017-06-19 23:16:23 +02:00
< h3 > Objectifs d'Ansible< / h3 >
< ul >
< li > homogénéité< / li >
< li > fiabilité< / li >
< li > rapidité< / li >
< / ul >
2017-06-19 22:02:56 +02:00
< / section >
< section >
2017-06-19 23:16:23 +02:00
< h4 > Parfait pour< / h4 >
< ul >
< li > tâches répétitives< / li >
< li > actions urgentes< / li >
< li > demandes spécifiques< / li >
< / ul >
2017-06-19 22:02:56 +02:00
< / section >
2017-06-19 22:53:07 +02:00
< section >
2017-06-19 23:16:23 +02:00
< h3 > Principes fondateurs< / h3 >
2017-06-19 22:53:07 +02:00
< ul >
2017-06-19 23:16:23 +02:00
< li > Idempotence< / li >
< li > Pas d'agent< / li >
< li > Souplesse et légèreté< / li >
2017-06-19 22:53:07 +02:00
< / ul >
< / section >
< section >
2017-06-19 23:16:23 +02:00
< h3 > Installation< / h3 >
< p > Paquets pour de nombreuses distributions< / p >
2017-06-20 22:48:58 +02:00
< pre > < code class = "hljs nohighlight" data-trim >
2017-06-19 23:16:23 +02:00
# apt install ansible
# ansible --version
ansible 2.2.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
< / code > < / pre >
< / section >
< section >
< h3 > Commandes de base< / h3 >
< pre > < code class = "hljs nohighlight" data-trim >
$ ansible localhost --module-name ping
$ ansible localhost --module-name ping --one-line
$ ansible localhost --module-name setup
$ ansible localhost --module-name setup --args "filter=ansible_mem*"
$ ansible localhost --module-name lineinfile --args \
"dest=/etc/hosts regexp=example.com line='192.168.0.25 example.com'"
2017-06-19 23:59:40 +02:00
< / code > < / pre >
2017-06-19 23:16:23 +02:00
< / section >
< section >
< h3 > Éléments de base< / h3 >
< / section >
< section >
< h4 > Modules< / h4 >
< ul >
< li > couche d'abstraction du shell< / li >
< li > homogénéité< / li >
< li > idempotence< / li >
< / ul >
< / section >
< section >
< h4 > < i > Tasks< / i > / < i > Handlers< / i > < / h4 >
< ul >
< li > invocation d'un module avec des paramètres< / li >
< li > le handler n'est exécuté qu'une fois< / li >
< / ul >
< / section >
< section >
< h4 > < i > Playbooks< / i > < / h4 >
< ul >
< li > exécution procédurale de tâches< / li >
< li > définition du contexte< / li >
< li > orchestration complexe< / li >
< / ul >
< / section >
< section >
< h4 > Rôles< / h4 >
< ul >
< li > comme un paquet autonome< / li >
< li > contient < em > tasks< / em > , < em > handlers< / em > , variables, < em > templates< / em > …< / li >
< li > inclus dans des < em > playbooks< / em > < / li >
< li > stockés localement ou récupérés dans un registre< / li >
< / ul >
< / section >
< section >
< h4 > Inventaire et variables< / h4 >
< ul >
< li > liste des serveurs< / li >
< li > moyens d'accès< / li >
< li > variables spécifiques (par hôte ou groupe)< / li >
< / ul >
< / section >
< section >
< pre > < code class = "hljs nohighlight" data-trim >
2017-06-19 23:59:40 +02:00
inventory/
├── group_vars
│ ├── all.yml
│ ├── hypervisors.yml
│ └── proxies.yml
├── hosts
├── hosts-dev
└── host_vars
├── stack01-data01.yml
├── stack01-front01-web01.yml
└── stack01-front01.yml
< / code > < / pre >
2017-06-19 23:16:23 +02:00
< / section >
< section >
< pre > < code class = "hljs ini" data-trim style = "max-height: 600px" >
2017-06-19 23:59:40 +02:00
kvm01 ansible_host=192.168.2.1
kvm02 ansible_host=192.168.2.2
2017-06-19 23:16:23 +02:00
2017-06-19 23:59:40 +02:00
stack01-front01 ansible_host=192.168.2.1 ansible_port=22020
stack01-front01-web01 ansible_host=192.168.2.1 ansible_port=22101
stack01-data01 ansible_host=192.168.2.1 ansible_port=22010
2017-06-19 22:53:07 +02:00
2017-06-19 23:59:40 +02:00
[hypervisors]
kvm01
kvm02
2017-06-19 22:53:07 +02:00
2017-06-19 23:59:40 +02:00
[fronts]
stack01-front01
2017-06-19 22:53:07 +02:00
2017-06-19 23:59:40 +02:00
[dbs]
stack01-data01
2017-06-19 22:53:07 +02:00
2017-06-19 23:59:40 +02:00
[web]
stack01-front01-web01
< / code > < / pre >
2017-06-19 22:53:07 +02:00
< / section >
< section >
2017-06-19 23:16:23 +02:00
< h4 > Variables< / h4 >
< ul >
< li > sources multiples (< em > facts< / em > ou configuration)< / li >
< li > règles de précédence pour personnalisation< / li >
< / ul >
2017-06-19 22:53:07 +02:00
< / section >
< section >
2017-06-19 23:16:23 +02:00
< h3 > Un playbook< / h3 >
< / section >
< section >
< pre > < code class = "hljs yaml" data-trim >
---
- hosts: localhost
tasks:
- name: example.com in /etc/hosts
lineinfile:
dest: /etc/hosts
regexp: example.com
line: '192.168.0.25 example.com'
state: present
< / code > < / pre >
< pre > < code class = "hljs bash" > $ ansible-playbook playbook.yml< / code > < / pre >
2017-06-19 22:53:07 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:39:02 +02:00
< section >
2017-06-20 01:47:00 +02:00
< h2 > OpenSSH< / h2 >
Client et serveur pour connexions shell à distance.
< / section >
< section >
< h3 > SSH: Secure Shell< / h3 >
< ul >
< li > Client: ssh, scp, sftp< / li >
< li > Serveur: ssh-add, ssh-agent, ssh-keygen, ssh-keysign, ssh-keyscan, et sftp-server< / li >
< / ul >
< / section >
< section >
< h2 > Configuration du serveur< / h2 >
< pre >
2017-06-20 22:48:58 +02:00
< code data-trim class = "hljs nohighlight" > # vim /etc/ssh/sshd_config< / code >
2017-06-20 01:20:19 +02:00
Port 22
Port 2222
PermitRootLogin yes/no/without-password
AllowUsers foo bar baz
Match Address 192.0.2.1,192.0.2.2
PasswordAuthentication yes
Match User foo,bar
PasswordAuthentication no
2017-06-20 01:47:00 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-20 01:20:19 +02:00
$ ssh-keygen
$ cat .ssh/id_rsa.pub
$ vim .ssh/authorized_keys
2017-06-20 01:47:00 +02:00
< / code >
< / pre >
< / section >
< section >
< h2 > Agent SSH< / h2 >
< pre >
< code data-trim class = "hljs nohighlight" > $ ssh-agent< / code >
< code data-trim class = "hljs nohighlight" > $ scp fichier-local identité-distante@hôte-distant:chemin/fichier< / code >
< code data-trim class = "hljs nohighlight" > $ scp identité-distante@hôte-distant:chemin/fichier fichier-local< / code >
< / pre >
2017-06-20 01:39:02 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:39:02 +02:00
< section >
2017-06-20 01:47:00 +02:00
< h2 > Sauvegardes< / h2 >
2017-06-20 01:39:02 +02:00
< / section >
2017-06-20 02:20:47 +02:00
2017-06-20 01:39:02 +02:00
< section >
2017-06-20 02:20:47 +02:00
< p >
File-system (totales ou incrémentales)
< pre >
< code data-trim class = "hljs nohighlight" >
tar -cpvf
cpio, pax
dump/restore, partimage
dd
< / code >
< code data-trim class = "hljs nohighlight" >
umount /file-system
< / code >
< code data-trim class = "hljs nohighlight" >
dump 0uf /dev/rst0 /file-system
< / code >
2017-06-20 01:39:02 +02:00
< / section >
2017-06-20 02:20:47 +02:00
2017-06-20 01:39:02 +02:00
< section >
2017-06-20 02:20:47 +02:00
< h2 > LA solution magique...< / h2 >
< pre >
< code data-trim class = "hljs nohighlight" >
rsync -av --delete
cp -al
< / code >
< / pre >
< p > EvoBackup :< br > < a href = "https://forge.evolix.org/projetcs/evobackup" > forge.evolix.org/projetcs/evobackup< / a > < / p >
2017-06-20 01:39:02 +02:00
< / section >
2017-06-20 02:20:47 +02:00
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 01:23:40 +02:00
< section >
2017-06-20 02:20:47 +02:00
< h2 > Gestion des droits< / h2 >
< p > Sous les systèmes de type Unix ou Linux, il existe plusieurs types de fichiers:
< ul >
< li > les fichiers,< / li >
< li > les répertoires,< / li >
< li > les liens symboliques,< / li >
< li > les fichiers-périphériques.< / li >
< / ul >
< / p >
2017-06-20 01:47:57 +02:00
< / section >
< section >
2017-06-20 02:20:47 +02:00
< p > Un fichier appartient à un utilisateur (en fait un numéro d'utilisateur) et à un groupe (en fait un numéro de groupe).< / p >
< p > Les 3 droits fondamentaux sont la < b > lecture, l'écriture et l'éxecution< / b > .< / p >
2017-06-20 01:23:40 +02:00
< / section >
2017-06-20 01:47:00 +02:00
< section >
< p > Pour un fichier, ces 3 droits sont définis pour 3 catégories:
2017-06-20 01:23:40 +02:00
< ul >
< li > l'utilisateur,< / li >
< li > le groupe< / li >
< li > et le "reste du monde".< / li >
2017-06-20 02:10:53 +02:00
< / ul >
< / p >
< p > Pour chacune de ces catégories: on note les droits sous la forme rwx.< / p >
2017-06-20 01:23:40 +02:00
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" > [s:sst] u:rwx g:rwx o:rwx< / code >
2017-06-20 01:23:40 +02:00
< / pre >
< / section >
< section >
< h2 > Commandes utiles/essentielles :< / h2 >
< ul >
< li > ls -l, stat, chmod, chown, chgrp< / li >
< li > su, newgrp, login, who, w, w.procps< / li >
< / ul >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-20 02:10:53 +02:00
$ chmod < catégorie > +< nouveau_droit > fichier
2017-06-20 01:23:40 +02:00
< / code >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-20 02:10:53 +02:00
$ chmod < nouveaux_droits > fichier
2017-06-20 01:23:40 +02:00
< / code >
< / pre >
< / section >
< section >
2017-06-20 02:20:47 +02:00
< p > Droits pour un répertoire :< / p >
< pre >
< code data-trim class = "hljs nohighlight" > r = lister, x = traverser, w = écrire (et même effacer !!)< / code >
< / pre >
< p > Droits spéciaux :
< ul >
< li > Exécutables setuid ou setgid< / li >
< li > Répertoire setgid ou stickybit< / li >
< / ul >
< / p >
2017-06-20 01:23:40 +02:00
< / section >
< section >
2017-06-20 02:10:53 +02:00
< p > Notation décimale :< / p >
2017-06-20 01:23:40 +02:00
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-19 11:03:13 +02:00
777 = ?
700 = ?
600 = ?
644 = ?
755 = ?
775 = ?
701 = ?
2017-06-20 01:23:40 +02:00
< / code >
2017-06-20 02:10:53 +02:00
< / pre >
2017-06-20 01:23:40 +02:00
< p >
umask : Pour gérer droit niveau utilisateurs : commande umask
Fixé dans le fichier profile ou bashrc (local ou général...)
< / p >
< / section >
2017-06-20 01:04:41 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 01:04:41 +02:00
< section >
2017-06-20 01:47:57 +02:00
< section >
2017-06-20 02:20:47 +02:00
< h2 > NFS< / h2 >
< pre >
< code data-trim class = "hljs nohighlight" >
# apt install nfs-kernel-server
< / code >
< code data-trim class = "hljs nohighlight" >
# vim /etc/exports
< / code >
/srv/nfs 192.0.2.4(rw,root_squash,sync,no_subtree_check)
/srv/nfs2 192.0.2.0/27(ro) 192.0.242(rw)
< / pre >
2017-06-20 01:47:57 +02:00
< / section >
< section >
2017-06-20 02:20:47 +02:00
< pre >
< code data-trim class = "hljs nohighlight" >
# apt install nfs-common
# mount -t nfs -o nfsvers=3 192.0.2.1:/srv/nfs /mnt
< / code >
< / pre >
2017-06-20 01:47:57 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 02:10:53 +02:00
< section >
< h2 > DRBD< / h2 >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" > #apt install drbd-utils< / code >
2017-06-20 02:10:53 +02:00
< / pre >
< / section >
< section >
< p > Sur une installation DRBD on définit :
< ul >
2017-06-20 02:25:06 +02:00
< li > des < b > ressources< / b > : chaque ressource DRBD a plusieurs paramètres, notamment le second serveur vers qui envoyer/recevoir la réplication< / li >
< li > des < b > volumes< / b > : chaque ressource DRBD peut avoir un ou plusieurs volumes, chaque volume est accessible via un périphérique unique nommé /dev/drbdXX< / li >
2017-06-20 02:10:53 +02:00
< / ul >
< / p >
< / section >
< section >
< p > Exemple simple d’ une ressource foo avec un volume /dev/drbd42 définie dans un fichier /etc/drbd.d/foo.res entre deux serveurs nommés tic et tac :< / p >
< pre >
2017-06-20 01:04:41 +02:00
resource "foo" {
volume 0 {
device minor 42;
disk /dev/sdz1;
meta-disk internal;
}
on tic {
address 192.0.2.1:7014;
}
on tac {
address 192.0.2.2:7014;
}
}
2017-06-20 02:10:53 +02:00
< / pre >
2017-06-20 02:25:06 +02:00
< / section >
< section >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" > # drbdadm -d adjust all
2017-06-20 01:04:41 +02:00
# drbdadm adjust all
# drbdadm dump
# drbdadm create-md [ressource]
# drbdadm attach/detach [ressource]
# drbdadm connect/disconnect [ressource]
# drbdadm adjust/adjust-with-progress [ressource]
# drbdadm primary/secondary [ressource]
2017-06-20 02:10:53 +02:00
< / code >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
2017-06-20 01:04:41 +02:00
$ cat /proc/drbd
# drbd-overview
2017-06-20 02:10:53 +02:00
< / code >
2017-06-20 02:25:06 +02:00
< / pre >
2017-06-20 02:10:53 +02:00
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 02:10:53 +02:00
< section >
2017-06-19 18:33:19 +02:00
< h2 > Virtualisation< / h2 >
2017-06-20 02:10:53 +02:00
< ul >
< li > KVM/libvirt< / li >
< li > Xen< / li >
< li > VMware< / li >
< / ul >
< p > Focus sur KVM :< / p >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" > # apt install qemu-kvm bridge-utils qemu-utils libvirt-bin virtinst< / code >
< code data-trim class = "hljs nohighlight" > # apt install netcat-openbsd< / code >
2017-06-20 02:10:53 +02:00
< / pre >
< / section >
< section >
2017-06-20 02:20:47 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
# virsh list --all
2017-06-20 02:25:06 +02:00
# virsh start < vm-name >
# virsh shutdown < vm-name >
# virsh destroy < vm-name >
# virsh edit < vm-name >
# virsh undefine < vm-name >
2017-06-20 01:04:41 +02:00
# virsh define template.xml
2017-06-20 02:10:53 +02:00
< / code > < / pre >
< / section >
< section >
2017-06-20 02:20:47 +02:00
< pre > < code data-trim class = "hljs nohighlight" >
2017-06-20 01:04:41 +02:00
# virt-install --connect=qemu:///system \
--name=template \
--cpu mode=host-passthrough --vcpus=1 \
--ram=512 \
2017-06-20 02:25:06 +02:00
--disk path=/path/template.qcow2, \
bus=virtio,cache=none,size=42,format=qcow2 \
2017-06-20 01:04:41 +02:00
--network=bridge:br0,model=virtio \
--noautoconsole --graphics vnc,listen=127.0.0.1,keymap=fr \
--cdrom=/home/images/debian-8.6.0-amd64-netinst.iso
2017-06-20 02:10:53 +02:00
< / code > < / pre >
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 02:29:36 +02:00
< section >
2017-06-20 01:04:41 +02:00
< h2 > Conteneur< / h2 >
2017-06-20 02:29:36 +02:00
< h3 > LXC< / h3 >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
# apt install lxc bridge-utils debootstrap
2017-06-20 01:04:41 +02:00
# lxc-create -t debian -n foo
# lxc-start -n foo -d
# lxc-attach -n foo
# lxc-stop -n foo
# lxc-info -n foo
# lxc-console -n foo
# lxc-halt -n foo
2017-06-20 02:29:36 +02:00
# lxc-destroy -n foo< / code >
< / pre >
< / section >
< section >
2017-06-20 22:48:58 +02:00
< h2 > Conteneur< / h2 >
2017-06-20 02:29:36 +02:00
< h3 > Docker< / h3 >
< pre >
2017-06-20 02:20:47 +02:00
< code data-trim class = "hljs nohighlight" >
# apt install docker-engine
2017-06-20 01:04:41 +02:00
$ docker ps [options]
$ docker run [options] IMAGE [commande]
$ docker stop|kill [options] CONTENEUR
$ docker rm [options] CONTENEUR
$ docker rmi [options] IMAGE
2017-06-20 02:29:36 +02:00
$ docker exec [options] CONTENEUR COMMANDE< / code >
< / pre >
< / section >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-19 16:46:03 +02:00
< section >
2017-06-20 02:20:47 +02:00
< section >
< h2 > Authentification< / h2 >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 02:20:47 +02:00
< section >
< h3 > /etc/passwd< / h3 >
Historiquement sous Unix, l'authentification est gérée par une < strong > liste des utilisateurs avec les mots de passe chiffrés accessible à tous< / strong > , à savoir le fameux fichier < strong > /etc/passwd< / strong > accessible en lecture et la commande passwd « set-uid root »
< / section >
< section >
< h3 > /etc/shadow recommandé< / h3 >
Le mot de passe chiffré est dans le fichier /etc/shadow inaccessible en lecture.
Commande pour activer/désactiver l'authentification shadow :
< pre >
< code data-trim class = "hljs nohighlight" >
2017-06-19 11:03:13 +02:00
# shadowconfig on/off
2017-06-20 02:20:47 +02:00
< / code >
< / pre >
< / section >
< section >
< h3 > Groupes UNIX< / h3 >
Les groupes d'un système sont dans le fichier /etc/group
< / section >
< section >
< h3 > Gestion des utilisateurs< / h3 >
2017-06-20 03:11:54 +02:00
< h4 > Utilitaires basiques : paquet Debian "passwd"< / h4 >
useradd, groupadd, userdel, groupdel, usermod, groupmod, chsh, chfn
< / section >
< section >
< h3 > Gestion des utilisateurs< / h3 >
< h4 > Utilitaires convivaux : paquet Debian "adduser"< / h4 >
adduser, addgroup, deluser et delgroup
< br > Ils tiennent sont configurables via /etc/adduser.conf :
2017-06-20 02:20:47 +02:00
< pre >
DSHELL=/bin/bash
DHOME=/home
SKEL=/etc/skel
QUOTAUSER="forquota"
DIR_MODE=0750
< / pre >
< / section >
< section >
2017-06-20 03:11:54 +02:00
< h3 > « Profil » pour un utilisateur créé< / h3 >
2017-06-19 11:03:13 +02:00
Il se trouve dans le répertoire /etc/skel/
2017-06-20 03:11:54 +02:00
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
Les utilisateurs
< ul >
< li > sont identifiés par leur nom de compte< / li >
< li > appartiennent à un groupe primaire (voir /etc/passwd)< / li >
2017-06-20 22:48:58 +02:00
< li > peuvent appartenir à des groupes secondaires (voir /etc/group)< / li >
2017-06-20 03:11:54 +02:00
< / ul >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< pre >
< code data-trim class = "hljs nohighlight" > jdoe@serveur:~$ whoami< / code >
2017-06-19 11:03:13 +02:00
jdoe
2017-06-20 03:11:54 +02:00
< code data-trim class = "hljs nohighlight" > jdoe@serveur:~$ groups< / code >
2017-06-20 22:48:58 +02:00
jdoe dialout cdrom audio video plugdev
2017-06-20 03:11:54 +02:00
< code data-trim class = "hljs nohighlight" > jdoe@serveur:~$ id< / code >
2017-06-20 22:48:58 +02:00
uid=1000(jdoe) gid=1000(jdoe) groupes=20(dialout),24(cdrom),29(audio),44(video)
2017-06-20 03:11:54 +02:00
< / pre >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h3 > Restriction de login< / h3 >
< pre >
2017-06-20 22:48:58 +02:00
< code data-trim class = "hljs nohighlight" > # vim /etc/login.defs< / code >
2017-06-19 11:03:13 +02:00
FAIL_DELAY 10 \ delai minimum entre deux tentatives de login
FAILLOG_ENAB yes \ journaliser les tentatives ratées
LOG_UNKFAIL_ENAB yes \ retenir les identifiants iconnus essayés
LOG_OK_LOGINS yes \ retenir les tentatives réussies
LOGIN_TIMEOUT 60 \ delai maximim pour authentification
CHFN_RESTRICT rwh \ restriction pour la commande chfn
2017-06-20 03:11:54 +02:00
< / pre >
Complété par… Linux-PAM (à suivre)
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h3 > /etc/shadow< / h3 >
Contient les infos sécurisées, notamment le mot de passe, mais également des paramètres d'expiration.
< pre > < code data-trim class = "hljs nohighlight" > # vipw -s< / code >
2017-06-19 11:03:13 +02:00
foo:$1$mYploS2J$uSouKZPBjUF6D094HPgGj/:13853:0:99999:7:::
2017-06-20 03:11:54 +02:00
< / pre >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h3 > Politique de gestion des mots de passe< / h3 >
< ul >
< li > Mot de passe aléatoire ou quasi-aléatoire< / li >
< li > Trace écrite bannie< / li >
< li > Empêcher mot de passe trop simple pour les utilisateurs: librairie cracklib< / li >
< li > Programme de génération de mot de passe: otp, apg, makepasswd, pwgen< / li >
< li > Programme pour cracker les mots de passe: John the Ripper< / li >
< / ul >
< / section >
< section >
< h3 > Qui est root ?< / h3 >
< ul >
< li > UID=0< / li >
< li > su, su -, su -c< / li >
< / ul >
< / section >
< section >
< h3 > sudo< / h3 >
< ul >
< li > Droits délégués (administration partagée, utilisation de scripts, etc.)< / li >
< li > Éditer les droits : commande visudo< / li >
< li > sudo -u, sudo sh -c,< / li >
< / ul >
< pre > < code data-trim class = "hljs nohighlight" > # apt install sudo< / code > < / pre >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h3 > Configuration< / h3 >
< pre > < code data-trim class = "hljs nohighlight" > # visudo< / code >
2017-06-19 11:03:13 +02:00
jdoe ALL = ALL
jdoe ALL = NOPASSWD: ALL
jdoe ALL = /usr/sbin/tcpdump
jdoe ALL = (foo) /bin/kill
jdoe ALL = (ALL) sudoedit /etc/hosts
2017-06-20 03:11:54 +02:00
< / pre >
Pour lister les droits :
< pre > < code data-trim class = "hljs nohighlight" > # sudo -l< / code > < / pre >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h3 > Système de gestion des utilisateurs< / h3 >
< h3 > !=< / h3 >
< h3 > Système d'authentification des utilisateurs< / h3 >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< ul >
< li > Les UID et GID peuvent exister sans entrée dans /etc/password< / li >
< li > Correspondances UID< - > login, GID< - > group faites par < em > libnss< / em > (Name Services Switch)< / li >
< li > Idem pour les noms de services, protocoles, machines (DNS)< / li >
< / ul >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
2017-06-20 22:48:58 +02:00
< pre > < code data-trim class = "hljs nohighlight" > # vim /etc/nsswitch.conf< / code >
2017-06-19 11:03:13 +02:00
passwd: compat
group: compat
shadow: compat
hosts: files dns
2017-06-20 03:11:54 +02:00
< / pre >
< / section >
< section >
< h3 > Pluggable Authentication Module – PAM< / h3 >
< ul >
< li > Système de gestion très modulaire< / li >
< li > Abstraction transparente des système d'authentification< / li >
< li > Utilisable directement par les applications< / li >
< / ul >
< / section >
< section >
< h4 > Modules PAM< / h4 >
< ul >
< li > NIS< / li >
< li > LDAP< / li >
< li > Kerberos< / li >
< / ul >
< p > Ils deviennent interchangeables sans reconfiguration ou recompilation des services.< / p >
< / section >
< section >
< ul >
< li > Configuration : /etc/pam.d/< / li >
< li > Comportement par défaut : /etc/pam.d/other< / li >
< li > Syntaxe : "type niveau module arguments"< / li >
< li > /etc/security/access.conf : permissions de login< / li >
< li > /etc/security/limits.conf : limites diverses< / li >
< / ul >
< / section >
2017-06-19 11:03:13 +02:00
2017-06-20 03:11:54 +02:00
< section >
< h4 > Syntaxe des fichiers : "type"< / h4 >
< ul >
< li > auth : authentification< / li >
< li > account : vérification des types de services autorisés< / li >
< li > session : tâches à effectuer avant/après l'accès< / li >
< li > password : mécanismes d'authentification< / li >
< / ul >
< / section >
< section >
< h4 > Syntaxe des fichiers : "niveau"< / h4 >
< ul >
< li > required : le succès à cette étape est nécessaire< / li >
< li > requisite : le succès est nécessaire et l'accès est refusé en cas d'erreur< / li >
< li > sufficient : le succès à cette étape suffit< / li >
< li > optional : l'accès pourra etre refusé en fonction d'autres paramètres< / li >
< / ul >
< / section >
< section >
< h4 > Exemple /etc/pam.d/login< / h4 >
< pre >
# Authenticate the user
auth required pam_unix.so
# Ensure users account and password are still active
account required pam_unix.so
# Change the users password, but at first check the strength
# with pam_cracklib(8)
password required pam_cracklib.so retry=3 minlen=6 difok=3
password required pam_unix.so use_authtok nullok md5
session required pam_unix.so
< / pre >
2017-06-19 16:46:03 +02:00
< / section >
2017-06-20 03:11:54 +02:00
< / section >
2017-06-19 11:03:13 +02:00
< / div >
< / div >
2017-06-19 16:46:03 +02:00
< script src = "reveal.js/lib/js/head.min.js" > < / script >
< script src = "reveal.js/js/reveal.js" > < / script >
2017-06-19 11:03:13 +02:00
< script >
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
2017-06-19 16:46:03 +02:00
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
2017-06-19 11:03:13 +02:00
]
});
< / script >
< / body >
< / html >