tuto2: Update for 2023 students
This commit is contained in:
parent
7925fd8a65
commit
0ebf69f4cd
@ -39,18 +39,25 @@ ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer.
|
|||||||
Résultat attendu
|
Résultat attendu
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
À la fin de cette partie, vous devez être en mesure de pouvoir déployer une
|
À la fin de cette partie, vous devez être en mesure de déployer une nouvelle
|
||||||
nouvelle machine, identique à celle que vous venez de configurer, à partir
|
machine, identique à celle que vous venez de configurer, à partir d'une ISO et
|
||||||
d'une ISO et d'un nouveau disque.
|
d'un nouveau disque.
|
||||||
|
|
||||||
Le fichier à rendre est un playbook `login-x-TP2/basis.yml`, accompagné de
|
Le fichier à rendre est un *playbook* `login-x-TP2/basis.yml`, accompagné de
|
||||||
toutes ses dépendances : celui-ci doit faire les configurations basiques du
|
toutes ses dépendances : celui-ci doit faire les configurations basiques du
|
||||||
système et des utilisateurs.
|
système et des utilisateurs.
|
||||||
|
|
||||||
Un deuxième playbook est à rendre : `login-x-TP2/vitrine.yml`, celui-ci doit
|
Un deuxième playbook est à rendre : `login-x-TP2/vitrine.yml`, celui-ci doit
|
||||||
permettre de déployer (en parallèle de tous les autres), une page vitrine
|
permettre de déployer, une page vitrine typique d'une entreprise (cf. la 4e
|
||||||
typique d'une entreprise (cf. la 4e question de cours ;)). Cette page doit être
|
question de cours ;)). Cette page doit être accessible depuis votre domaine
|
||||||
accessible depuis votre domaine <https://login-x.adlin2022.p0m.fr/>.
|
<https://login-x.adlin2023.example.tld/>.\
|
||||||
|
|
||||||
|
::::: {.warning}
|
||||||
|
|
||||||
|
Il est attendu que la vitrine soit générée avec [Hugo](https://gohugo.io/), sur
|
||||||
|
la machine exécutant Ansible (et non pas sur la machine où elle sera hébergée).
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
|
|
||||||
Mon première commande
|
Mon première commande
|
||||||
@ -73,11 +80,15 @@ all:
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
::::: {.more}
|
||||||
|
|
||||||
Vous pouvez lancer une autre machine virtuelle à ce stade et ajouter son IP sur
|
Vous pouvez lancer une autre machine virtuelle à ce stade et ajouter son IP sur
|
||||||
une nouvelle ligne du fichier `hosts`.
|
une nouvelle ligne du fichier `hosts`.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
Plus tard, c'est dans ce fichier que vous pourrez créer des groupes de machines
|
Plus tard, c'est dans ce fichier que vous pourrez créer des groupes de machines
|
||||||
(par exemple pour regrouper les serveurs web, les bases de données, etc.) ou
|
(pour, par exemple, regrouper les serveurs web, les bases de données, etc.) ou
|
||||||
donner des caractéristiques spécifiques à vos machines.
|
donner des caractéristiques spécifiques à vos machines.
|
||||||
|
|
||||||
|
|
||||||
@ -97,12 +108,15 @@ Lancez ensuite la commande suivante :
|
|||||||
|
|
||||||
Vous devriez avoir un retour similaire à celui-ci, indiquant simplement que la
|
Vous devriez avoir un retour similaire à celui-ci, indiquant simplement que la
|
||||||
connexion a bien été effectuée et que le nécessaire est bien installé sur la
|
connexion a bien été effectuée et que le nécessaire est bien installé sur la
|
||||||
machine distance.
|
machine distance.\
|
||||||
|
|
||||||
|
::::: {.question}
|
||||||
|
|
||||||
Si votre clef SSH n'a pas été récupérée depuis le CRI, vous pouvez rajouter
|
Si votre clef SSH n'a pas été récupérée depuis le CRI, vous pouvez rajouter
|
||||||
l'option `--ask-pass`, afin de pouvoir indiquer le mot de passe de connexion au
|
l'option `--ask-pass`, afin de pouvoir indiquer le mot de passe de connexion au
|
||||||
compte, sinon vous obtiendrez une erreur plutôt incrompréhensible.
|
compte, sinon vous obtiendrez une erreur plutôt incompréhensible.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
### Confort
|
### Confort
|
||||||
|
|
||||||
@ -145,7 +159,7 @@ exister. À l'application de cette nouvelle recette, si un tel utilisateur est
|
|||||||
trouvé, il sera donc supprimé.
|
trouvé, il sera donc supprimé.
|
||||||
|
|
||||||
|
|
||||||
### Collecte du lundi
|
### Collecte ~~du lundi~~ d'informations
|
||||||
|
|
||||||
Parmi les modules de base, le module `setup` permet de récupérer un grand
|
Parmi les modules de base, le module `setup` permet de récupérer un grand
|
||||||
nombre de caractéristiques de la machine distance, voyez plutôt :
|
nombre de caractéristiques de la machine distance, voyez plutôt :
|
||||||
@ -156,7 +170,7 @@ ansible -i hosts all -m setup
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Les informations récupérées (quelque soit le module), sont ensuite accessible
|
Les informations récupérées (quelque soit le module), sont ensuite accessibles
|
||||||
dans des variables afin de permettre de compléter des modèles ou pour faire de
|
dans des variables afin de permettre de compléter des modèles ou pour faire de
|
||||||
l'exécution conditionnelle d'état (par exemple on pourra utiliser la variable
|
l'exécution conditionnelle d'état (par exemple on pourra utiliser la variable
|
||||||
`ansible_facts.ansible_distribution` pour distinguer les gestionnaires de
|
`ansible_facts.ansible_distribution` pour distinguer les gestionnaires de
|
||||||
@ -238,10 +252,10 @@ Voici à quoi ressemblerait votre premier playbook créant l'utilisateur
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
La création de l'utilisateur se fait à l'aide du module
|
La création de l'utilisateur se fait à l'aide du module
|
||||||
[`user`](http://docs.ansible.com/ansible/latest/user_module.html).
|
[`user`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html).
|
||||||
|
|
||||||
À vous maintenant, à l'aide [des modules à votre
|
À vous maintenant, à l'aide [des collections de modules à votre
|
||||||
disposition](http://docs.ansible.com/ansible/latest/modules_by_category.html)
|
disposition](https://docs.ansible.com/ansible/latest/collections/index.html)
|
||||||
de copier vos fichiers de configuration à leur place et avec les bons droits
|
de copier vos fichiers de configuration à leur place et avec les bons droits
|
||||||
(`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous
|
(`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous
|
||||||
aviez installé à la main (client DHCP, `htop`, ...).
|
aviez installé à la main (client DHCP, `htop`, ...).
|
||||||
@ -281,13 +295,14 @@ Il est attendu que le nom de la notification corresponde à l'attribut `name`
|
|||||||
d'un handler.
|
d'un handler.
|
||||||
|
|
||||||
Voir [la
|
Voir [la
|
||||||
documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handlers-running-operations-on-change)
|
documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html)
|
||||||
pour davantage de détails et d'exemples.
|
pour davantage de détails et d'exemples.
|
||||||
|
|
||||||
La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes
|
La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes
|
||||||
énoncés par ces deux articles :
|
énoncés par ces deux articles :
|
||||||
|
|
||||||
- <https://linuxhandbook.com/ssh-hardening-tips/> ;
|
- <https://linuxhandbook.com/ssh-hardening-tips/> ;
|
||||||
|
- <https://www.ssi.gouv.fr/guide/recommandations-pour-un-usage-securise-dopenssh/> ;
|
||||||
- <https://stribika.github.io/2015/01/04/secure-secure-shell.html>.
|
- <https://stribika.github.io/2015/01/04/secure-secure-shell.html>.
|
||||||
|
|
||||||
Mettez en place un *handler* pour relancer votre serveur SSH en cas de
|
Mettez en place un *handler* pour relancer votre serveur SSH en cas de
|
||||||
|
@ -9,10 +9,10 @@ gestionnaire de configuration.
|
|||||||
Après cet échauffement, vous devriez être prêt à créer un *playbook*
|
Après cet échauffement, vous devriez être prêt à créer un *playbook*
|
||||||
dédié à l'installation d'un serveur [Matrix](https://matrix.org/) :
|
dédié à l'installation d'un serveur [Matrix](https://matrix.org/) :
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
Vous connaissez et utilisez sans doute Slack, un service de messagerie
|
Vous connaissez et utilisez sans doute Discord ou Slack, un service de messagerie
|
||||||
instantannée qui a supplanté IRC, Jabber, ... Il vient avec le gros
|
instantannée qui a supplanté IRC, Jabber, ... Il vient avec le gros
|
||||||
inconvénient qu'il est centralisé, qu'il ne permet pas de faire discuter des
|
inconvénient qu'il est centralisé, qu'il ne permet pas de faire discuter des
|
||||||
personnes qui, bien qu'utilisant le même service, ne sont pas dans le même
|
personnes qui, bien qu'utilisant le même service, ne sont pas dans le même
|
||||||
@ -24,9 +24,25 @@ une solution de messagerie décentralisée et permet de réaliser du chiffrement
|
|||||||
de bout-en-bout.
|
de bout-en-bout.
|
||||||
|
|
||||||
Vous trouverez la documentation d'installation précise et détaillée à :
|
Vous trouverez la documentation d'installation précise et détaillée à :
|
||||||
<https://github.com/matrix-org/synapse/blob/master/README.rst> (attention,
|
<https://matrix-org.github.io/synapse/latest/>.\
|
||||||
pensez à vous fixer une version, n'utilisez pas la branche master qui risque de
|
|
||||||
ne plus fonctionner au moment du moulinétage de votre rendu).
|
::::: {.warning}
|
||||||
|
|
||||||
|
Vous avez 5 solutions pour réaliser cette partie, mais 2 sont à proscrire. Vous pouvez :
|
||||||
|
|
||||||
|
- utiliser [le playbook officiel](https://github.com/spantaleev/matrix-docker-ansible-deploy) ;
|
||||||
|
- installer [les paquets officiels de la dernière version
|
||||||
|
stable](https://matrix-org.github.io/synapse/latest/setup/installation.html#debianubuntu)
|
||||||
|
et réaliser le playbook vous-même (quitte à recopier des bouts du playbook
|
||||||
|
officiel) ;
|
||||||
|
- installer [les modules Python depuis PyPI](https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-as-a-python-module-from-pypi).
|
||||||
|
|
||||||
|
Vous ne pouvez pas :
|
||||||
|
|
||||||
|
- déployer le conteneur Docker ;
|
||||||
|
- déployer à partir des sources.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
Vous devrez attacher une importance tout particulière à la sécurité de
|
Vous devrez attacher une importance tout particulière à la sécurité de
|
||||||
la solution que vous déployez : configurations durcies, utilisateur
|
la solution que vous déployez : configurations durcies, utilisateur
|
||||||
@ -34,9 +50,17 @@ dédié lorsque c'est possible (pas de `root` !), droits d'accès et
|
|||||||
permissions des répertoires, etc.
|
permissions des répertoires, etc.
|
||||||
|
|
||||||
Profitez des [modules de base de
|
Profitez des [modules de base de
|
||||||
données](https://docs.ansible.com/ansible/2.9/modules/list_of_database_modules.html)
|
données](https://docs.ansible.com/ansible/latest/collections/community/postgresql/index.html)
|
||||||
pour l'initialiser correctement. Et bien entendu de l'ensemble des
|
pour l'initialiser correctement. Et bien entendu de l'ensemble des
|
||||||
modules décrits dans la documentation standard !
|
modules décrits dans la documentation standard !\
|
||||||
|
|
||||||
|
::::: {.warning}
|
||||||
|
|
||||||
|
L'utilisation des modules
|
||||||
|
[`ansible.builtin.command`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#ansible-collections-ansible-builtin-command-module)
|
||||||
|
et assimilés est interdite en toute circonstance.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
|
|
||||||
## Configurations
|
## Configurations
|
||||||
@ -44,9 +68,28 @@ modules décrits dans la documentation standard !
|
|||||||
Tous les éléments de configuration (mot de passes de connexion à la
|
Tous les éléments de configuration (mot de passes de connexion à la
|
||||||
base de données, chemins, etc.) sont à déclarer comme variables dans
|
base de données, chemins, etc.) sont à déclarer comme variables dans
|
||||||
le fichier `vars/matrix-config.yml`, que vous prendrez soin d'importer
|
le fichier `vars/matrix-config.yml`, que vous prendrez soin d'importer
|
||||||
dans votre *Playbook*.
|
dans votre *Playbook*.\
|
||||||
|
|
||||||
Vous devrez générer un certificat TLS afin de joindre les autres serveurs.
|
::::: {.warning}
|
||||||
|
|
||||||
|
Vous devez utiliser `ansible-vault` pour stocker de manière sûre les données
|
||||||
|
sensibles tels que les mots de passes. Vous pouvez ajouter un second fichier de
|
||||||
|
variables pour cela, si cela vous paraît plus opportun.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
|
Vous devrez générer un certificat TLS afin de joindre les autres serveurs.\
|
||||||
|
|
||||||
|
::::: {.warning}
|
||||||
|
|
||||||
|
À aucun moment la clef privée de votre certificat ne doit faire parti de votre
|
||||||
|
dépôt. Dans certaines circonstances, il peut être pratique d'avoir cette clef
|
||||||
|
dans un *vault*, mais ici ce que l'on attend c'est que le certificat soit
|
||||||
|
généré s'il n'existe pas déjà ou qu'il a expiré. Éventuellement, une solution
|
||||||
|
automatisant son renouvellement automatique serait appréciable (mais non
|
||||||
|
obligatoire).
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
|
|
||||||
## Backup
|
## Backup
|
||||||
@ -60,7 +103,7 @@ de données. Le *dump* obtenu est à placer dans `/var/backups/`.
|
|||||||
Vous n'êtes pas tenu d'installer un client. Pour vos tests, vous pouvez
|
Vous n'êtes pas tenu d'installer un client. Pour vos tests, vous pouvez
|
||||||
utiliser <https://app.element.io/>, en changeant l'adresse du serveur Matrix pour
|
utiliser <https://app.element.io/>, en changeant l'adresse du serveur Matrix pour
|
||||||
votre sous-domaine dédié à Matrix (normalement
|
votre sous-domaine dédié à Matrix (normalement
|
||||||
<https://matrix.login-x.srs.p0m.fr/>). (Conservez le serveur d'identité à
|
<https://matrix.login-x.srs.example.tld/>). (Conservez le serveur d'identité à
|
||||||
<https://vector.im>).
|
<https://vector.im>).
|
||||||
|
|
||||||
|
|
||||||
@ -71,4 +114,4 @@ Pour valider l'installation de votre serveur, rejoignez le canal
|
|||||||
`#adlin:nemunai.re` et envoyez un message « Ping ! » pour signaler votre
|
`#adlin:nemunai.re` et envoyez un message « Ping ! » pour signaler votre
|
||||||
présence.
|
présence.
|
||||||
|
|
||||||
Vous devriez également pouvoir tester entre-vous.
|
Vous devriez également pouvoir tester en communiquant entre-vous.
|
||||||
|
@ -4,15 +4,19 @@ Maatma
|
|||||||
======
|
======
|
||||||
|
|
||||||
Maatma sera votre bureau d'enregistrement (*registrar*) et votre fournisseur
|
Maatma sera votre bureau d'enregistrement (*registrar*) et votre fournisseur
|
||||||
d'accès à une plage d'IPv6 routable sur Internet.
|
d'accès à une plage d'IPv6 routable sur Internet.\
|
||||||
|
|
||||||
**Avertissement :** Ce service vous est proposé à titre éducatif. Vous savez
|
::::: {.warning}
|
||||||
|
|
||||||
|
Ce service vous est proposé à titre éducatif. Vous savez
|
||||||
combien Internet peut être un milieu hostile, il est donc de votre devoir de ne
|
combien Internet peut être un milieu hostile, il est donc de votre devoir de ne
|
||||||
pas tenter le diable et de prendre toutes les mesures qui s'imposent pour vous
|
pas tenter le diable et de prendre toutes les mesures qui s'imposent pour vous
|
||||||
protéger en conséquence. D'autre part, il va de soit que ce service vous est
|
protéger en conséquence. D'autre part, il va de soit que ce service vous est
|
||||||
fourni en échange de votre consentement à ne pas l'utiliser d'une manière
|
fourni en échange de votre consentement à ne pas l'utiliser d'une manière
|
||||||
condamnable (mais libre à vous de tester la plate-forme en elle-même).
|
condamnable (mais libre à vous de tester la plate-forme en elle-même).
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
L'interface de Maatma est accessible à cette adresse :
|
L'interface de Maatma est accessible à cette adresse :
|
||||||
<https://adlin.nemunai.re/maatma/>. Utilisez votre identifiant CRI pour vous y
|
<https://adlin.nemunai.re/maatma/>. Utilisez votre identifiant CRI pour vous y
|
||||||
connecter.
|
connecter.
|
||||||
@ -57,8 +61,8 @@ Votre passerelle répond aux `ping`, une fois la connexion établie, vous devrie
|
|||||||
pouvoir `ping 2a01:e0a:2b:2252::1`.
|
pouvoir `ping 2a01:e0a:2b:2252::1`.
|
||||||
|
|
||||||
|
|
||||||
Domaine de test
|
IPs et domaine de test
|
||||||
---------------
|
----------------------
|
||||||
|
|
||||||
En plus de vous fournir une IPv6, vous disposerez d'un nom de domaine ainsi
|
En plus de vous fournir une IPv6, vous disposerez d'un nom de domaine ainsi
|
||||||
qu'une délégation sur un sous-domaine.
|
qu'une délégation sur un sous-domaine.
|
||||||
|
@ -13,10 +13,10 @@ Voici les grandes étapes :
|
|||||||
* choisir un serveur DNS autoritaire (BIND, NSD, Knot, PowerDNS, djbDNS, ...) ;
|
* choisir un serveur DNS autoritaire (BIND, NSD, Knot, PowerDNS, djbDNS, ...) ;
|
||||||
* éditer la zone de votre domaine ;
|
* éditer la zone de votre domaine ;
|
||||||
* configurer ce serveur pour qu'il réponde effectivement aux requêtes de votre zone ;
|
* configurer ce serveur pour qu'il réponde effectivement aux requêtes de votre zone ;
|
||||||
* tester avec `dig @votreIPv4locale ANY login-x.srs.p0m.fr` que votre serveur réagit bien correctement ;
|
* tester avec `dig @votreIPv4locale ANY login-x.srs.example.tld` que votre serveur réagit bien correctement ;
|
||||||
* publier sur Maatma le nom de domaine où votre serveur de nom est joignable (généralement `ns.login-x.srs.p0m.fr`), il s'agit d'un enregistrement `NS` ;
|
* publier sur Maatma le nom de domaine où votre serveur de nom est joignable (généralement `ns.login-x.srs.example.tld`), il s'agit d'un enregistrement `NS` ;
|
||||||
* publier également sa *GLUE*, afin de résoudre le problème de poule et d'œuf (le domaine de votre serveur de noms étant dans la zone qu'il est sensé servir, le bureau d'enregistrement enverra également l'IP correspondant au domaine) ;
|
* publier également sa *GLUE*, afin de résoudre le problème de poule et d'œuf (le domaine de votre serveur de noms étant dans la zone qu'il est sensé servir, le bureau d'enregistrement enverra également l'IP correspondant au domaine) ;
|
||||||
* tester avec `dig @9.9.9.9 AAAA login-x.srs.p0m.fr` que votre serveur est bien joignable.
|
* tester avec `dig @9.9.9.9 AAAA login-x.srs.example.tld` que votre serveur est bien joignable.
|
||||||
|
|
||||||
Un ouvrage de référence, qui répondra à l'intégralité de vos questions et manières d'utiliser votre serveur DNS se trouve à <http://www.zytrax.com/books/dns/>.
|
Un ouvrage de référence, qui répondra à l'intégralité de vos questions et manières d'utiliser votre serveur DNS se trouve à <http://www.zytrax.com/books/dns/>.
|
||||||
|
|
||||||
@ -26,14 +26,14 @@ Un ouvrage de référence, qui répondra à l'intégralité de vos questions et
|
|||||||
Pourquoi une telle complexité apparente pour déléguer une zone DNS ?
|
Pourquoi une telle complexité apparente pour déléguer une zone DNS ?
|
||||||
|
|
||||||
Vous êtes sur le point d'obtenir le contrôle total d'un domaine :
|
Vous êtes sur le point d'obtenir le contrôle total d'un domaine :
|
||||||
`login-x.srs.p0m.fr.`. Cela signifie que vous allez pouvoir décider,
|
`login-x.srs.example.tld.`. Cela signifie que vous allez pouvoir décider,
|
||||||
depuis votre propre serveur de noms (respectueux des
|
depuis votre propre serveur de noms (respectueux des
|
||||||
[standards](https://www.ietf.org/rfc/rfc1034.txt)), comment vous allez
|
[standards](https://www.ietf.org/rfc/rfc1034.txt)), comment vous allez
|
||||||
répondre aux serveurs résolveurs des utilisateurs.
|
répondre aux serveurs résolveurs des utilisateurs.
|
||||||
|
|
||||||
Le protocole DNS étant décentralisé, mais basé sur une arborescence
|
Le protocole DNS étant décentralisé, mais basé sur une arborescence
|
||||||
unique, il est nécessaire que les serveurs faisant autorité sur une
|
unique, il est nécessaire que les serveurs faisant autorité sur une
|
||||||
zone (`fr.`, `srs.p0m.fr.`, ...) fournissent toutes les informations
|
zone (`fr.`, `srs.example.tld.`, ...) fournissent toutes les informations
|
||||||
nécessaire pour que cette délégation fonctionne.
|
nécessaire pour que cette délégation fonctionne.
|
||||||
|
|
||||||
À cet instant, vous connaissez l'adresse IPv6 routable sur Internet de votre
|
À cet instant, vous connaissez l'adresse IPv6 routable sur Internet de votre
|
||||||
@ -44,7 +44,7 @@ autorité.
|
|||||||
|
|
||||||
Concrètement, vous allez devoir vous attribuer un sous-domaine pour votre
|
Concrètement, vous allez devoir vous attribuer un sous-domaine pour votre
|
||||||
serveur de noms, car c'est grâce à un enregistrement `NS` figurant dans la zone
|
serveur de noms, car c'est grâce à un enregistrement `NS` figurant dans la zone
|
||||||
parente (pour vous, la zone parente c'est `srs.p0m.fr`) que la délégation va se
|
parente (pour vous, la zone parente c'est `srs.example.tld`) que la délégation va se
|
||||||
faire.
|
faire.
|
||||||
|
|
||||||
Dans le cas basique, on va utiliser les serveurs de quelqu'un d'autre (d'un
|
Dans le cas basique, on va utiliser les serveurs de quelqu'un d'autre (d'un
|
||||||
@ -52,6 +52,7 @@ hébergement spécialisé par exemple, ou celui de son bureau d'enregistrement
|
|||||||
s'ils proposent ce service). Auquel cas, on fera figurer ce genre
|
s'ils proposent ce service). Auquel cas, on fera figurer ce genre
|
||||||
d'informations :
|
d'informations :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ dig @e.ext.nic.fr. NS epita.fr.
|
42sh$ dig @e.ext.nic.fr. NS epita.fr.
|
||||||
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 17590
|
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 17590
|
||||||
@ -69,6 +70,7 @@ epita.fr. 172800 IN NS banjo.ionis-it.com.
|
|||||||
;; Time 2042-12-04 13:42:23 CET
|
;; Time 2042-12-04 13:42:23 CET
|
||||||
;; From 2a00:d78:0:102:193:176:144:22@53(UDP) in 13.9 ms
|
;; From 2a00:d78:0:102:193:176:144:22@53(UDP) in 13.9 ms
|
||||||
```
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
La commande est envoyée spécifiquement aux serveurs de l'AFNIC, faisant
|
La commande est envoyée spécifiquement aux serveurs de l'AFNIC, faisant
|
||||||
autorité pour la zone `fr.`. Les serveurs de l'AFNIC nous indiquent en retour,
|
autorité pour la zone `fr.`. Les serveurs de l'AFNIC nous indiquent en retour,
|
||||||
@ -79,6 +81,7 @@ Mais dans votre cas, vous hébergez vous-même votre propre serveur au sein de
|
|||||||
votre zone, vous n'avez pas d'autre domaine à votre disposition. C'est
|
votre zone, vous n'avez pas d'autre domaine à votre disposition. C'est
|
||||||
également le cas de Wikipédia :
|
également le cas de Wikipédia :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
|
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
|
||||||
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
|
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
|
||||||
@ -94,6 +97,7 @@ wikipedia.org. 86400 IN NS ns1.wikimedia.org.
|
|||||||
|
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
On voit ici que pour résoudre les sous-domaines de `wikipedia.org.`, il faut
|
On voit ici que pour résoudre les sous-domaines de `wikipedia.org.`, il faut
|
||||||
demander à `nsX.wikimedia.org.`. Mais comment obtenir alors, l'adresse de ces
|
demander à `nsX.wikimedia.org.`. Mais comment obtenir alors, l'adresse de ces
|
||||||
@ -103,6 +107,7 @@ C'est là que les *GLUE records* entrent en jeu !
|
|||||||
|
|
||||||
J'ai volontairement tronqué la sortie de la commande précédente, en entier, c'est :
|
J'ai volontairement tronqué la sortie de la commande précédente, en entier, c'est :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
|
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
|
||||||
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
|
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
|
||||||
@ -125,6 +130,7 @@ ns2.wikimedia.org. 86400 IN A 91.198.174.239
|
|||||||
;; Time 2042-12-04 13:42:23 CET
|
;; Time 2042-12-04 13:42:23 CET
|
||||||
;; From 2001:500:f::1@53(UDP) in 15.2 ms
|
;; From 2001:500:f::1@53(UDP) in 15.2 ms
|
||||||
```
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
Afin d'éviter de tourner en rond sans jamais avoir réponse à notre question, en
|
Afin d'éviter de tourner en rond sans jamais avoir réponse à notre question, en
|
||||||
même temps que de nous répondre sur qui sont les serveurs faisant autorité pour
|
même temps que de nous répondre sur qui sont les serveurs faisant autorité pour
|
||||||
|
@ -29,10 +29,6 @@ login_x-TP2/basis.yml
|
|||||||
login_x-TP2/vitrine.yml
|
login_x-TP2/vitrine.yml
|
||||||
login_x-TP2/name-server.yml
|
login_x-TP2/name-server.yml
|
||||||
login_x-TP2/matrix.yml
|
login_x-TP2/matrix.yml
|
||||||
login_x-TP2/vars/matrix-config.yml
|
|
||||||
login_x-TP2/pgdump.sh
|
|
||||||
login_x-TP2/homeserver.yaml
|
|
||||||
login_x-TP2/matrix.nginx.conf
|
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
@ -49,17 +45,20 @@ Dans les deux cas, si vous n'en avez pas déjà une, vous devrez créer une clef
|
|||||||
PGP à **votre nom et prénom**.
|
PGP à **votre nom et prénom**.
|
||||||
|
|
||||||
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
|
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
|
||||||
**séparément**. Vous avez le choix de la téléverser sur un serveur de clefs,
|
**séparément**. Vous avez le choix de l'uploader sur un serveur de clefs, soit
|
||||||
soit de me fournir votre clef en main propre, soit de l'envoyer dans un
|
de me fournir votre clef en main propre, soit de l'envoyer dans un courriel
|
||||||
courriel **distinct**.
|
distinct.
|
||||||
|
|
||||||
### Signature du courriel
|
### Signature du courriel
|
||||||
|
|
||||||
[Enigmail](https://enigmail.net) est une extension très bien réputée pour
|
Une version récente de [Thunderbird](https://www.thunderbird.net/fr/) vous
|
||||||
signer ses courriels depuis Thunderbird.
|
permettra d'envoyer des courriels signés. Si vous n'avez qu'une version
|
||||||
|
ancienne, l'extension [Enigmail](https://enigmail.net) est très bien réputée
|
||||||
|
pour signer ses mails depuis Thunderbird. Bien entendu, de nombreuses autres
|
||||||
|
solutions sont disponibles.
|
||||||
|
|
||||||
Utilisez le service automatique <signcheck@nemunai.re> pour savoir si votre
|
Utilisez le service automatique <signcheck@nemunai.re> pour savoir si votre
|
||||||
message est correctement signé et que je suis en mesure de vérifier la
|
courriel est correctement signé et que je suis en mesure de vérifier la
|
||||||
signature.
|
signature.
|
||||||
|
|
||||||
|
|
||||||
@ -75,20 +74,18 @@ Si vous recevez un rapport avec l'erreur suivante :
|
|||||||
|
|
||||||
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
|
gpg: Signature made Tue Jan 01 16:42:23 2014 CET
|
||||||
gpg: using RSA key 842807A84573CC96
|
gpg: using RSA key 842807A84573CC96
|
||||||
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net
|
gpg: requesting key E2CCD99DD37BD32E from hkp server keys.openpgp.org
|
||||||
gpg: Can't check signature: No public key
|
gpg: Can't check signature: No public key
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
C'est que votre clef publique n'est pas dans mon trousseau et que les méthodes
|
C'est que votre clef publique n'est pas dans mon trousseau et que les
|
||||||
de récupération automatique[^methods] n'ont pas permis de la trouver. Uploadez
|
méthodes de récupération automatique n'ont pas permis de la
|
||||||
votre clef sur un serveur de clefs (et attendez quelques minutes sa
|
trouver. Uploadez votre clef sur [un serveur de
|
||||||
propagation) ou envoyez un courriel au service signcheck avec votre clef
|
clefs](https://keys.openpgp.org/) ou envoyez un courriel au service
|
||||||
publique en pièce-jointe, avant de retenter votre rendu.
|
avec votre clef publique en pièce jointe, avant de retenter votre
|
||||||
|
rendu.
|
||||||
|
|
||||||
[^methods]: Le service va rechercher : un enregistrement PKA, un enregistrement
|
|
||||||
DANE OPENPGPKEY, un Web Key Directory, un enregistrement DNS CERT ou sur un
|
|
||||||
keyserver (soit keys.openpgp.org, soit pool.sks-keyservers.net).
|
|
||||||
|
|
||||||
#### Not explicit username
|
#### Not explicit username
|
||||||
|
|
||||||
@ -103,3 +100,18 @@ Si vous recevez un rapport avec l'erreur suivante :
|
|||||||
Votre clef ne contient sans doute pas vos noms et prénoms ou l'adresse
|
Votre clef ne contient sans doute pas vos noms et prénoms ou l'adresse
|
||||||
électronique associée à la clef n'est pas celle que j'ai dans ma base de
|
électronique associée à la clef n'est pas celle que j'ai dans ma base de
|
||||||
données.
|
données.
|
||||||
|
|
||||||
|
|
||||||
|
#### I've decided to skip your e-mail
|
||||||
|
|
||||||
|
Si vous recevez un rapport concluant ainsi :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```
|
||||||
|
After analyzing your e-mail, I've decided to SKIP it.
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Cela signifie que la lecture de votre courriel qui a été préférée n'est pas
|
||||||
|
celle d'un rendu. Vérifiez que vous n'envoyez pas votre clef publique avec
|
||||||
|
votre rendu.
|
||||||
|
@ -13,7 +13,7 @@ possédant les caractéristiques suivantes :
|
|||||||
|
|
||||||
Le choix de la technologie de virtualisation est laissé à votre
|
Le choix de la technologie de virtualisation est laissé à votre
|
||||||
appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*KVM*
|
appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*KVM*
|
||||||
(macOS, Linux, Windows) et VMware (macOS, Windows).
|
(macOS, Linux, Windows) et VMware (macOS, Windows).\
|
||||||
|
|
||||||
L'hyperviseur qui vous laissera le plus de liberté (et avec lequel vous pourrez
|
L'hyperviseur qui vous laissera le plus de liberté (et avec lequel vous pourrez
|
||||||
apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
|
apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
|
||||||
@ -42,17 +42,32 @@ de vous permettre de commencer à travailler sans plus attendre !
|
|||||||
Gérer le réseau de son hyperviseur
|
Gérer le réseau de son hyperviseur
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
|
::::: {.more}
|
||||||
|
|
||||||
|
Cette section est là pour vous donner un aperçu du fonctionnement de votre
|
||||||
|
installation, pour que plus jamais, vous ne puissiez vous demander « On la met
|
||||||
|
en NAT ou en Bridge la VM ? », sans vraiment savoir de quoi vous parler.
|
||||||
|
|
||||||
|
On vous encourage évidemment à comprendre les éléments présentés et à tester
|
||||||
|
par vous-même avec `qemu`, mais tous les hyperviseurs fonctionnent de la même
|
||||||
|
manière et vous pouvez donc tester avec votre hyperviseur habituel.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
Rares sont les machines qui, aujourd'hui, ne sont pas connectées à Internet (ou
|
Rares sont les machines qui, aujourd'hui, ne sont pas connectées à Internet (ou
|
||||||
au moins à un réseau local, pour permettre d'y apporter les mises à jour).
|
au moins à un réseau local, pour permettre d'y apporter les mises à jour).
|
||||||
|
|
||||||
La première chose qu'il va falloir faire avec notre hyperviseur, est donc de
|
La première chose qu'il va falloir faire avec notre hyperviseur, est donc de
|
||||||
lui indiquer comment notre machine virtuelle accédera au réseau.
|
lui indiquer comment notre machine virtuelle accédera au réseau.\
|
||||||
|
|
||||||
**Note :** Nous ne présenterons ici que les méthodes qui permettent d'obtenir un
|
::::: {.question}
|
||||||
|
|
||||||
|
Nous ne présenterons ici que les méthodes qui permettent d'obtenir un
|
||||||
réseau ayant toutes les caractéristiques d'utilisation et de contrôle que l'on
|
réseau ayant toutes les caractéristiques d'utilisation et de contrôle que l'on
|
||||||
pourrait en attendre. Nous ne verrons donc pas le mode `user` de *qemu* par
|
pourrait en attendre. Nous ne verrons donc pas le mode `user` de *qemu* par
|
||||||
exemple.
|
exemple.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
### Interface physique
|
### Interface physique
|
||||||
|
|
||||||
@ -224,6 +239,15 @@ où `wlp3s0` correspond à l'interface de notre route par défaut.
|
|||||||
Démarrer la machine virtuelle
|
Démarrer la machine virtuelle
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
::::: {.more}
|
||||||
|
|
||||||
|
Comme pour la section précédentes, les exemples sont donnés pour `qemu`. Ils
|
||||||
|
sont à adapter en fonction de votre hyperviseur. Avec `qemu`, les exemples sont
|
||||||
|
à combiner avec la ligne de commande établie précédemment, il faut accumuler
|
||||||
|
les arguments avant de lancer la machine virtuelle.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
### Ajouter un disque vierge
|
### Ajouter un disque vierge
|
||||||
|
|
||||||
Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
|
Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
|
||||||
@ -294,8 +318,8 @@ pouvoir émettre un paquet sur le réseau.
|
|||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ ip link
|
42sh$ ip link
|
||||||
1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
|
1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ title: Administration Linux avancée -- TP n^o^ 2
|
|||||||
subtitle: "Maatma : l'hébergeur DIY"
|
subtitle: "Maatma : l'hébergeur DIY"
|
||||||
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
|
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
|
||||||
institute: EPITA
|
institute: EPITA
|
||||||
date: Jeudi 4 mars 2021
|
date: Mercredi 9 mars 2022
|
||||||
abstract: |
|
abstract: |
|
||||||
Durant ce deuxième TP, nous allons apprendre à déployer des services sur un
|
Durant ce deuxième TP, nous allons apprendre à déployer des services sur un
|
||||||
serveur, de manière industrielle !
|
serveur, de manière industrielle !
|
||||||
@ -11,10 +11,10 @@ abstract: |
|
|||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
La partie 5 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
|
La partie 5 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
|
||||||
le **jeudi 18 mars 2021 à 12 h 42**. Consultez la dernière
|
le **jeudi 31 mars 2021 à 23 h 42**. Consultez la dernière
|
||||||
section de chaque partie pour plus d'information sur les éléments à
|
section de chaque partie pour plus d'information sur les éléments à
|
||||||
rendre. Et n'oubliez pas de répondre aux [questions de
|
rendre. Et n'oubliez pas de répondre aux [questions de
|
||||||
cours](https://adlin.nemunai.re/quiz/9).
|
cours](https://adlin.nemunai.re/quiz/20).
|
||||||
|
|
||||||
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
||||||
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
||||||
|
@ -16,28 +16,40 @@ Faites le tour des configurations afin de vous assurer qu'elles sont
|
|||||||
suffisamment durcies. Pensez à noter vos changements, vous devrez les
|
suffisamment durcies. Pensez à noter vos changements, vous devrez les
|
||||||
reporter dans un fichiers au chapitre suivant !
|
reporter dans un fichiers au chapitre suivant !
|
||||||
|
|
||||||
|
À ce stade, vous devez suivre les recommandations de l'ANSSI que vous
|
||||||
|
jugez adaptées à votre déploiement :
|
||||||
|
<https://www.ssi.gouv.fr/guide/recommandations-de-securite-relatives-a-un-systeme-gnulinux/>
|
||||||
|
|
||||||
|
|
||||||
Ma première vitrine
|
Ma première vitrine
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Sur le domaine `login-x.adlin2022.p0m.fr`, déployez une vitrine d'entreprise
|
Sur le domaine `login-x.adlin2023.example.tld`, déployez une vitrine
|
||||||
basique (pas besoin d'un Wordpress, un simple lot de pages HTML fera l'affaire).
|
d'entreprise basique. Vous n'allez pas déployer tout un Wordpress, mais un
|
||||||
|
simple lot de pages HTML ... générées avec Hugo.
|
||||||
|
|
||||||
Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre
|
Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre
|
||||||
discrétion.
|
discrétion.
|
||||||
|
|
||||||
Vous pouvez utiliser les services de [Let's Encrypt](https://letsencrypt.org/)
|
Vous pouvez utiliser les services de [Let's Encrypt](https://letsencrypt.org/)
|
||||||
pour obtenir un certificat TLS. Compte tenu des limitations imposées, vous ne
|
pour obtenir un certificat TLS.\
|
||||||
pourrez pas tous en créer un aujourd'hui, mais n'hésitez pas à retenter un peu
|
|
||||||
plus tard dans la semaine. Vous pouvez également obtenir vos certificats depuis
|
::::: {.warning}
|
||||||
de nombreux autres services gratuits similaire :
|
|
||||||
[ZeroSSL](https://zerossl.com/), [buypass](https://www.buypass.com/), ...
|
Compte tenu [des limitations
|
||||||
|
imposées](https://letsencrypt.org/docs/rate-limits/), vous ne pourrez pas tous
|
||||||
|
en créer un aujourd'hui, mais n'hésitez pas à retenter un peu plus tard dans la
|
||||||
|
semaine. Vous pouvez également obtenir vos certificats depuis de nombreux
|
||||||
|
autres services gratuits similaire : [ZeroSSL](https://zerossl.com/),
|
||||||
|
[buypass](https://www.buypass.com/), ...\
|
||||||
|
|
||||||
D'ailleurs, si vous disposez de votre propre nom de domaine et que vous
|
D'ailleurs, si vous disposez de votre propre nom de domaine et que vous
|
||||||
souhaitez l'utiliser pour ce TP, vous pouvez suivre les instructions dans
|
souhaitez l'utiliser pour ce TP, vous pouvez suivre les instructions dans
|
||||||
l'interface de Maatma pour pouvoir l'utiliser.
|
l'interface de Maatma pour pouvoir l'utiliser.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
Une fois votre serveur web configuré et votre vitrine installée, accédez à
|
|
||||||
|
Une fois votre serveur web configuré et votre vitrine déployée, accédez à
|
||||||
votre domaine depuis votre poste pour constater la bonne marche de
|
votre domaine depuis votre poste pour constater la bonne marche de
|
||||||
l'installation.
|
l'installation.
|
||||||
|
@ -7,7 +7,7 @@ Accéder à la machine virtuelle
|
|||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Une fois la machine virtuelle démarrée, vous pouvez vous y connecter en `root`
|
Une fois la machine virtuelle démarrée, vous pouvez vous y connecter en `root`
|
||||||
avec le mot de passe `adlin2022`.
|
avec le mot de passe `adlin2023`.
|
||||||
|
|
||||||
Vous pouvez également démarrer en mode *single user*, mais comme votre disque
|
Vous pouvez également démarrer en mode *single user*, mais comme votre disque
|
||||||
n'est sans doute pas encore utilisable à ce stade, vous ne pourrez pas changer
|
n'est sans doute pas encore utilisable à ce stade, vous ne pourrez pas changer
|
||||||
@ -23,13 +23,17 @@ Se mettre à l'aise
|
|||||||
------------------
|
------------------
|
||||||
|
|
||||||
Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une
|
Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une
|
||||||
interface plus agréable que celle de votre hyperviseur.
|
interface plus agréable que celle de votre hyperviseur.\
|
||||||
|
|
||||||
**Attention :** si votre machine virtuelle est directement connectée au réseau
|
::::: {.warning}
|
||||||
|
|
||||||
|
Si votre machine virtuelle est directement connectée au réseau
|
||||||
local (sans passer par un NAT), n'oubliez pas de modifier le mot de passe
|
local (sans passer par un NAT), n'oubliez pas de modifier le mot de passe
|
||||||
`root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce
|
`root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce
|
||||||
TP), ne rentre sur votre machine.
|
TP), ne rentre sur votre machine.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
Afin de vous faciliter la configuration de la machine par la suite, vos clefs
|
Afin de vous faciliter la configuration de la machine par la suite, vos clefs
|
||||||
SSH publiques, [déclarées au
|
SSH publiques, [déclarées au
|
||||||
CRI](https://cri.epita.fr/users/nemunaire/ssh-keys/), sont automatiquement
|
CRI](https://cri.epita.fr/users/nemunaire/ssh-keys/), sont automatiquement
|
||||||
@ -81,7 +85,9 @@ Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisé
|
|||||||
à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des
|
à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des
|
||||||
distributions). Vous pouvez également définir des conditions plus précise en
|
distributions). Vous pouvez également définir des conditions plus précise en
|
||||||
éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour
|
éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour
|
||||||
éditer ce fichier).
|
éditer ce fichier).\
|
||||||
|
|
||||||
|
::::: {.code}
|
||||||
|
|
||||||
**Super astuce !** votre terminal rit encore de vous, affichant `Permission
|
**Super astuce !** votre terminal rit encore de vous, affichant `Permission
|
||||||
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
|
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
|
||||||
@ -92,6 +98,8 @@ sudo !!
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
### Top confort dans son coquillage
|
### Top confort dans son coquillage
|
||||||
|
|
||||||
Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à
|
Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à
|
||||||
|
Reference in New Issue
Block a user