Linux
De la ligne de commande à l'administration système
Jérémy Gak
Avant-propos
Chapitre 1
Introduction à Linux
1. Les origines de Linux9
2. Les différentes distributions de Linux12
2.1 Slackware13
2.2 Debian14
2.3 Red Hat Enterprise Linux (RHEL)15
2.4 Fedora17
2.5 Ubuntu19
2.6 Arch Linux20
Chapitre 2
La ligne de commande
1. Les commandes de base de Linux23
2. Les permissions, la sécurité et les ACL26
2.1 Les permissions26
2.1.1 Généralités26
2.1.2 Gestion des permissions et des propriétaires de fichiers/dossiers31
2.2 Les niveaux de sécurité33
2.2.1 SELinux33
2.2.2 AppArmor35
2.3 Les ACL40
Chapitre 3
Configuration du système
1. Configuration du réseau45
1.1 ifconfig47
1.2 ip49
1.3 netstat51
1.4 ss53
1.5 ping55
1.6 traceroute56
2. Gestion des utilisateurs et des groupes56
2.1 Gestion des utilisateurs58
2.2 Gestion des groupes58
Chapitre 4
Administration système
1. Gestion des packages et des mises à jour61
1.1 Debian et le système APT62
1.1.1 Gestion des packages62
1.1.2 Mise à niveau64
1.1.3 Recherche et information65
1.2 Fedora et le système DNF66
1.2.1 Gestion des packages66
1.2.2 Gestion des groupes68
1.2.3 Mise à niveau69
1.2.4 Recherche et information70
2. Gestion des services système71
2.1 Commandes de base de systemctl71
2.2 Commandes supplémentaires73
3. Gestion des tâches et des processus73
3.1 Gestion des tâches avec cron et crontab74
3.2 Gestion des processus75
Chapitre 5
Administration avancée
1. Les outils de monitoring et de diagnostic77
1.1 top - Surveillance des processus en temps réel77
1.2 htop, une alternative colorée80
1.3 free, l'utilitaire pour la mémoire vive82
1.4 Nagios83
1.5 Zabbix89
1.6 Quelle solution privilégier ?96
1.6.1 Nagios96
1.6.2 Zabbix97
2. Les sauvegardes et la restauration98
2.1 Pourquoi sauvegarder ?98
2.2 Pourquoi restaurer ?98
2.3 Sauvegardes99
2.4 Restauration99
3. La virtualisation et les containers100
3.1 Virtualisation101
3.2 Containerisation102
Chapitre 6
Déploiement et gestion de serveurs
1. La mise en place d'un serveur LAMP105
1.1 Comment fonctionnent les modules Apache ?112
1.2 Activation des modules Apache113
2. La gestion d'un serveur de fichiers116
3. La gestion des serveurs avec SSH119
Chapitre 7
Réseaux avancés avec Linux
1. Introduction aux réseaux avancés125
2. Configuration de réseaux VLAN et VPN128
2.1 Les VLAN129
2.2 Les VPN137
3. Utilisation de serveurs proxy149
3.1 Squid : optimisation et contrôle150
3.2 Privoxy : confidentialité et filtrage150
3.3 Implémentation et gestion150
3.4 Avantages additionnels151
3.5 Ce qu'il faut retenir151
4. Configuration de serveurs DNS152
5. Utilisation de serveurs DHCP156
6. Configuration de pare-feu158
6.1 Configuration de base160
6.2 Pour aller plus loin152
Chapitre 8
Outils d'automatisation avec Docker
1. Les bases de Docker et les microservices171
1.1 Origines de Docker : un changement paradigmatique dans la conteneurisation173
1.2 Le décollage de Docker et l'adoption communautaire173
1.3 L'influence croissante de Docker dans le développement logiciel174
2. La mise en place de microservices avec Docker174
2.1 Les conteneurs sur Docker174
2.2 Les Dockerfiles : script de construction d'images175
2.3 Dockerfile pour une application web basique en Node. js175
2.4 Dockerfile pour une application Python/Flask176
2.5 Dockerfile pour une application Java avec Maven176
2.6 Dockerfile pour une base de données MySQL177
2.7 Dockerfile pour une application en Go177
2.8 Le rôle crucial des registries Docker dans la conteneurisation178
2.9 Docker Hub : un pilier de la communauté Docker178
2.10 Utiliser Docker Hub : pratiques et considérations179
2.1.1 Installation de Docker180
2.12 Création de compte sur Docker Hub182
2.13 Options courantes190
3. La gestion de microservices avec Docker190
3.1 Les commandes populaires de Docker190
3.2 Commandes supplémentaires pour la gestion des volumes195
3.3 Orchestration avec Docker Compose197
3.4 Structure de base199
3.5 Eléments clés à retenir199
3.6 Explications de notre fichier201
Chapitre 9
Outils d'automatisation avec Puppet et Ansible
1. Les principes de base de l'automatisation avec Puppet207
1.1 Avantages de Puppet208
1.2 Inconvénients de Puppet209
1.3 Architecture maître-agent (master-slave)210
1.4 Echange de certificats210
1.5 Création des manifestes et compilation en catalogues211
1.6 Exécution du catalogue sur le client212
1.7 Installation et configuration de Puppet212
1.8 Générer et signer le certificat de l'agent215
1.9 Ecrire et déployer des manifestes217
2. Les principes de base de l'automatisation avec Ansible220
2.1 Architecture sans agent222
2.2 Modules222
2.3 Playbooks223
2.3.1 Installation et démarrage d'un serveur web Apache224
2.3.2 Création d'utilisateurs224
2.3.3 Mise à jour de tous les paquets sur des serveurs Debian225
2.3.4 Appliquer un playbook225
2.4 Inventaire227
2.4.1 Exemple en format INI228
2.4.2 Exemple en format YAML228
2.5 Variables229
2.5.1 Variables définies dans un playbook229
2.5.2 Variables dans les fichiers d'inventaire230
2.5.3 Variables dans les fichiers de variables séparés230
2.5.4 Passage de variables en ligne de commande230
2.5.5 Utilisation de variables dans les templates Jinja2231
2.6 Facts231
2.6.1 Exemple d'utilisation des facts dans un playbook231
2.6.2 Exemples de facts couramment utilisés232
2.7 Rôles232
2.7.1 Structure du fichier defaults/main. yml233
2.7.2 Structure du fichier handlers/main. yml233
2.7.3 Structure du fichier meta/main. yml234
2.7.4 Structure du fichier tasks/main. yml236
2.7.5 Structure du fichier templates/nginx. conf. j2237
2.7.6 Structure du fichier vars/main. yml239
2.8 Fonctionnement global240
2.9 Installation et configuration de Ansible240
2.10 Ajout de la clé publique SSH sur une autre machine241
2.11 Configuration de base d'Ansible pour utiliser la machine243
3. Exemples pratiques d'utilisation de Puppet et Ansible245
3.1 Scénario A : configuration d'un serveur web NGINX avec SSL et redirection246
3.2 Scénario B : configuration d'un serveur de base de données PostgreSQL avec réplication249
3.3 Scénario C : configuration d'un serveur web NGINX253
3.4 Scénario D : mise en place de règles de pare-feu avec UFW256
3.5 Scénario E : réplication de base de données PostgreSQL258
3.6 Scénario F : automatisation des sauvegardes262
Chapitre 10
Gestion des privilèges et sécurité sous Linux
1. Les risques de sécurité courants et escalade de privilèges265
1.1 Énumération sur la machine270
1.2 Mécanismes internes280
1.2.1 Interfaces réseau280
1.2.2 Dernière connexion des utilisateurs281
1.2.3 Historique des commandes281
1.2.4 Trouver des fichiers d'historique281
1.2.5 Proc282
1.2.6 Services282
1.2.7 Recherche des identifiants286
1.2.8 Clés SSH287
1.3 Abus de droits sudo287
1.4 Capacités (capabilities)289
1.5 Scripts et outils automatisés295
1.6 Permissions spéciales296
1.7 Abus de PATH299
2. Mesures de prévention contre l'escalade de privilèges301
Conclusion
1. Les perspectives et les enjeux de Linux303
2. Les bonnes pratiques pour une utilisation optimale304
Index307