Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • vimazeno/blog.limos.fr
  • matrossevi/blog.limos.fr
  • borlonjo/blog.limos.fr
3 results
Show changes
Showing
with 1194 additions and 143 deletions
# bws
![bws](images/aws.png "aws")<!-- .element width="30%" -->
aka **B** rew **W** ired **S** tack
## requirement
* proxmox aka pve
* ansible
* terraform
* [proxmox-provisionner](https://github.com/Telmate/terraform-provider-proxmox)
* [proxmox-api](https://github.com/Telmate/proxmox-api-go)
* du love <3
## soyons honnête
Tous repose sur
* [proxmox-provisionner - pulse](https://github.com/Telmate/terraform-provider-proxmox/pulse)
* [proxmox-api - pulse](https://github.com/Telmate/proxmox-api-go/pulse)
## PCA / PRA
# backup
## service CRI ISIMA / LIMOS
![service CRI ISIMA / LIMOS](https://support.isima.fr/upload/logo/cri_.png)<!-- .element width="30%" -->
### Vincent Mazenod
[vincent.mazenod@isima.fr](maitlo:vincent.mazenod@isima.fr)
#### responsable de service
## 🔧 service CRI ISIMA / LIMOS
* [Missions](https://doc.isima.fr/support/cri#3-missions) / [organisation](https://doc.isima.fr/cri#1-organisation-du-support)
* [Composition](https://doc.isima.fr/support/cri#2-composition)
* 7 membres support (A109 /A115)
* ### 📘 [https://doc.isima.fr](https://doc.isima.fr)
* 💁 Support
* 🎫 [tickets incidents/demandes](https://support.isima.fr)
* [https://support.isima.fr](https://support.isima.fr)
* 🏨 Bureau A109
* 📞 Téléphone 0473405262
## 📝 Inscription (1/2)
* [https://inscription.uca.fr](https://inscription.uca.fr)
* se munir de son numéro CVEC
* [https://cvec.etudiant.gouv.fr](https://cvec.etudiant.gouv.fr)
* procédure d’inscription en fonction du cursus
* Primo entrants:
* **n°OPI date de naissance** + **mail personnel**
* Anciens étudiants:
* **n°étudiant** + **date de naissance** + **mail personnel**
## 📝 Inscription (2/2)
* 💵 Règlement financier pour finaliser l'inscription
* Aurion Web (INP)
* 😥 Pas de compte = pas de service
* ⏰ S'inscrire avant le 11 septembre!
* 💬 Questions Scola:
* 📨 [scolarite@isima.fr](mailto:scolarite@isima.fr)
* 🏨 Bureau A010
## 🔌 Compte UCA
* 🏦 ENT ([https://ent.uca.fr](https://ent.uca.fr))
* mon compte > mot de passe
* notes
* emplois du temps
* cours en ligne
* 📨 [Mail](https://doc.isima.fr/services/mail/uca) ([https://mail.uca.fr](https://mail.uca.fr))
* prenom.nom@etu.uca.fr
* prenom.nom@etu.isima.fr (alias)
## 🔖 Services UCA
* 📶 [WiFi (Eduroam)](https://doc.isima.fr/locaux/wifi) ([https://cat.eduroam.org](https://cat.eduroam.org))
* 📹 [Teams](https://doc.isima.fr/services/visio/teams) ([https://teams.microsoft.com](https://teams.microsoft.com))
* 📁 Drive
* [drive UCA (Seafile)](https://doc.isima.fr/services/stockage/seafile) [https://drive.uca.fr/](https://drive.uca.fr/)
* [OneDrive (1To)](https://doc.isima.fr/services/stockage/owncloud)
* 🔍 [Catalogue de services UCA](https://dsi.uca.fr/catalogue-de-services)
## 🔐 Mots de passe
* ça ne se prête pas
* ça ne se laisse pas traîner à la vue de tous
* ça ne s'utilise qu'une fois
* si ça casse on remplace immédiatement
* un peu d'originalité ne nuit pas
* la taille compte
* il y a une date de péremption
* mieux vaut les avoir avec soi
## 💉 question d'hygiène!
![preservatif](images/preservatif-darvador.jpg)<!-- .element width="30%" -->
* [CNIL / Authentification par mot de passe : les mesures de sécurité élémentaires](https://www.cnil.fr/fr/authentification-par-mot-de-passe-les-mesures-de-securite-elementaires)
* [ANSSI / Recommandations relatives à l'authentification multifacteur et aux mots de passe](https://www.ssi.gouv.fr/guide/recommandations-relatives-a-lauthentification-multifacteur-et-aux-mots-de-passe/)
## 🏦 [Locaux](https://doc.isima.fr/locaux/salles)
![bâtiments](images/batiments.png "batiments")
## 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles)
* Salles PC :
* Dual boot Windows / Linux
* Salles Spécialisées :
* systèmes et réseaux
* physique
* électronique
* circuits
* robotique
* réalité virtuelle
## 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles)
* Salles Tx :
* D013 et 💻 D018 (libre accès de 7h30 à 18h45 en semaine)
* Laboratoire de langue
* G116 (Bâtiment Pôle Commun)
## 🖥 [Serveurs pédagogiques](https://doc.isima.fr/pedagogie/serveurs)
* TSE1 (MS Windows server 2016R2)
* Ada (GNU/Linux Debian 12)
* Turing (GNU/Linux Debian 12)
* Exam (GNU/Linux CentOS 6 isolé)
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
## 🖥 [VM Perso](https://doc.isima.fr/pedagogie/vm)
* Debian 12 / Cinnamon
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
* 😴 Eteinte toutes les nuits à 2h00 du matin
* ▶ start / ◼ stop
* https://my.isima.fr/vm
## 🕵🏼 [Authentification](https://doc.isima.fr/authentification)
* 🔌 Compte UCA pour **tous les services**
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/),
[Forges logicielles](https://doc.isima.fr/services/gitlab),
[Gestionnaire de ticket](https://doc.isima.fr/services/gestsup) ...
* ouverture de session
* [impressions](https://doc.isima.fr/services/imprimantes)
* 😥 Pas de compte = pas de service
* ⏰ S'inscrire avant le 11 septembre!
## 🖨 [Impressions](https://doc.isima.fr/services/imprimantes/#impression-pour-les-etudiants)
* Facturées directement sur la carte [IZLY](https://dsi.uca.fr/catalogue-de-services/impression-izly)
* Toutes les imprimantes de l'UCA sont utilisables
* File d'impression itinérante **FollowMe**
* le copieur de la salle D013
* permet de recharger son compte [IZLY](https://dsi.uca.fr/catalogue-de-services/impression-izly)
## 🌃 [Accés distant](https://doc.isima.fr/services/acces-distant/)
* Connexion de puis l'extérieur
* [VPN](https://doc.isima.fr//services/acces-distant/vpn)
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
Pour les 🖥 [Serveurs pédagogiques](https://doc.isima.fr/pedagogie/serveurs), 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles), 🖥 [VMs Persos](https://doc.isima.fr/pedagogie/vm)
## 💾 [Données (~/shared)](https://doc.isima.fr/stockage/shared)
* 5Go
* != drive.uca.fr
* dirs.local.isima.fr
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* nfs
* samba
* Montage automatique PARTOUT
* Répertoire `~/shared` sous GNU/Linux et MacOS
* Montage réseau `P:\\` sous MS Windows
## 💀 WARNING!!
* 🤦 Tout peut être réinstallé à tout moment
* Les salles machine
* Les serveurs péda
* Votre VM Perso
* 🙇🏼 `~/shared` et `P:\\` est le seul répertoire sauvegardé
* Tout le reste peut disparâitre
* A tout moment!!
## 🕸 Services
* [Forges logicielles (Gitlab)](https://doc.isima.fr/services/gitlab): https://gitlab.isima.fr
* [Prise de notes (Hedgedoc)](https://doc.isima.fr/services/hedgedoc): https://hedgedoc.isima.fr
* [Page web personnel](https://doc.isima.fr/services/hebergement-web/perso): https://perso.isima.fr/~login
* Une plateforme de Cloud Computing
* contacter le [service CRI ISIMA/LIMOS](https://doc.isima.fr/support/cri)
* Plateforme HPC (accès restreint)
* contacter [Hélène Toussaint](mailto:helene.toussaint@isima.fr)
* module ED d'apprentissage au LIMOS
## 🎁 Logiciels
* Microsoft Office et Office 365
* https://doc.isima.fr/Imagine/office/
* Azure dev tools for teaching
* https://doc.isima.fr/Imagine/imagine/
## 👋 [Cadres légaux](https://doc.isima.fr/support/cadres)
* [règlement intérieur de l'ISIMA](https://ent.uca.fr/moodle/mod/page/view.php?id=263490)
* [Charte générale à l'usage des ressources numériques / UCA](https://www.uca.fr/medias/fichier/deliberation-ca-2017-10-27-21-charte-des-usages-numeriques-et-des-administrateurs-techniques-annexe_1509372123880-pdf)
* Cadre national [ANSSI](https://www.ssi.gouv.fr/en/), [PSSIE](https://www.ssi.gouv.fr/entreprise/reglementation/protection-des-systemes-dinformations/la-politique-de-securite-des-systemes-dinformation-de-letat-pssie/)
* Sanctions disciplinaires et pénales
* 🙏 Soyez "fair"
* si vous trouvez une vulnérabilité, 😎 signalez la au [service CRI ISIMA/LIMOS](https://doc.isima.fr/support/cri)
## 💬 Des questions ????
![](https://media.giphy.com/media/hSKk6hx9OzomRvFRcJ/giphy.gif)<!-- .element style="margin: 20px" -->
📘 **https://doc.isima.fr** 🎫 **https://support.isima**
🤗 **[Typos et suggestions](https://gitlab.isima.fr/vimazeno/blog.limos.fr)**
# DevOps
![DevOps](images/devops-toolchain.png "DevOps")
## Pourquoi?
* unifier
* développement logiciel (dev)
* administration des infrastructures (ops)
* automatiser (automation)
* suivre (monitoring)
* tester: automatiquement
* accélérer: cycles courts à prioriser
* déployer: automatiquement & souvent!
## contexte ISIMA / LIMOS
![team cri](images/cri.jpeg "team cri")
* ambiance tendue entre dev et ops !
* on cherche à
* automatiser la gestion de nos services
* autonomiser les dev et idéalement les users
## De nombreux outils
![DevOps tools](images/devops-tools.png "DevOps tools")
## les outils du dialogue
* [vagrant](vagrant.html)
* [ansible](ansible.html)
* [vault](vault.html)
* [proxmox](pve.html)
* [terraform](terraform.html)
* [gitlab](gitlab.html)
## bws aka la stack
!["stack"](images/stack.png "stack")
## See also
* [<i class="fa fa-wikipedia"></i> DevOps](https://en.wikipedia.org/wiki/DevOps)
* [12 factor](https://12factor.net/)
* [@waxzce](https://twitter.com/waxzce)
# gitlab
## CI/CD variables
https://gitlab.isima.fr/cri/my/settings/ci_cd
* https://docs.gitlab.com/ee/ci/yaml/ (When:manual) pour le déploiement
## personal tokens
niveau user
https://gitlab.isima.fr/profile/personal_access_tokens
* api
* Grants complete read/write access to the API, including all groups and projects.
* read_user
* Grants read-only access to the authenticated user's profile through the /user API endpoint, which includes username, public email, and full name. Also grants access to read-only API endpoints under /users.
* read_repository
* Grants read-only access to repositories on private projects using Git-over-HTTP (not using the API).
### root only
* sudo
* Grants permission to perform API actions as any user in the system, when authenticated as an admin user.
## feed token
niveau user
https://gitlab.isima.fr/profile/personal_access_tokens
* Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when when your calendar application loads a personalized calendar, and is included in those feed URLs.
* It cannot be used to access any other data.
## deploy tokens
niveau repo
https://gitlab.isima.fr/cri/my/settings/repository#js-deploy-tokens
Deploy tokens allow read-only access to your repository and registry images.
## deploy keys
niveau repo
https://gitlab.isima.fr/cri/my/settings/repository#js-deploy-tokens
Deploy keys allow read-only or read-write (if enabled) access to your repository. Deploy keys can be used for CI, staging or production servers. You can create a deploy key or add an existing one.
## specific runners
https://gitlab.isima.fr/cri/my/settings/ci_cd
## best practice
* bin/setup (APP_TOKEN - gitlab secret variable / fallback ldap) bin/activate
# manifeste
## 80 colonnes par lignes max
!["80 colonnes"](images/80columns.jpg "80 colonnes")
# monitoring
# my
# OpenStack
* mise à jour
* maquettes documentées / réutilisables
* étude de l'architecture
......
# Proxmox
## aka pve
## Proxmox
* 10 ans
## interfacer avec le LDAP
# https://forum.proxmox.com/threads/how-to-transfer-large-iso-to-proxmox.455/
iptables -t nat -I PREROUTING -d 37.59.57.58 -p tcp --dport 443 -j DNAT --to-destination 37.59.57.58:8006
apt install iptables-persistent
service iptables save
# https://pve.proxmox.com/wiki/HTTPS_Certificate_Configuration_(Version_4.x,_5.0_and_5.1)
# https://pve.proxmox.com/wiki/Storage:_Directory
vi /etc/pve/storage.cfg
dir: local
path /var/lib/vz
vgname pve
content iso,vztmpl,backup,rootdir,images
service pvestatd restart
# https://pve.proxmox.com/wiki/Cloud-Init_FAQ
Hardware > Add > loudInit Drive
SCSI / 0 / local
# https://pve.proxmox.com/wiki/Cloud-Init_Support
# create local-lvm (https://pve.proxmox.com/wiki/Storage)
# download the image
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
# create a new VM
qm create 9001 --memory 2048 --net0 virtio,bridge=vmbr0
# import the downloaded disk to local-lvm storage
qm importdisk 9001 bionic-server-cloudimg-amd64.img local
# finally attach the new disk to the VM as scsi drive
qm set 9001 --scsihw virtio-scsi-pci --scsi0 local:vm-9001-disk-0
qm set 9000 --ide2 local:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm template 9000
Deploying Cloud-Init Templates
qm clone 9000 123 --name isp
qm set 123 --sshkey /root/limosadm.pub
qm set 123 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1
# stack
![stack](images/aws.png "aws")<!-- .element width="30%" -->
aka **B** rew **W** ired **S** tack
## soyons honnête!
Tout repose sur
* [proxmox-provisionner - pulse](https://github.com/Telmate/terraform-provider-proxmox/pulse)
* [proxmox-api - pulse](https://github.com/Telmate/proxmox-api-go/pulse)
et sur les produits [HashiCorp](https://github.com/hashicorp)
## Directory Layout
```shell
+ ansible/
+ plugins/ # utilisé pour le callback anstomlog <3
+ roles/ # roles ansible (commun)
+ bin/ # toutes les commandes de la stack
+ docs/ # documentation
+ packer/ # préparation des templates pve
+ workspaces/ # répertoire pour les workspaces
+ wk/ # répertoire du workspace wk
+ ansible/ # vars et playbooks ansible de wk
+ terraform/ # ressources terraform de wk
- config.yml # config de wk
- ssh_config # config ssh de wk
```
# GROUND0
## PRA
Après la catastrophe on a remnté
- un réseau opérationnel
- des noeuds proxomox non configurés (fresh install)
- un serveur vault restauré
- une copie du repo de la stack et des rôles minimaux nécessaires
- pve
- gitlab
- backuppc
- la sauvegarde de tous les services à restaurer avec backuppc
# INP/ISIMA / LIMOS
## Bienvenue
## DOC
* https://doc.isima.fr
* https://doc.cri.isima.fr (accès restreint aux membres du CRI)
## SUPPORT
* https://support.isima.fr
* https://dsi.uca.fr/assistance
* https://support.uca.fr
* DIL INP
### CRI
* 7 membres infra / services / support (A115/A109)
* 1 membres dédié projets recherche (F201)
* 1 membres dédié HPC
* 1 membres dédié électronique
## BATIMENTS
## AUTHENTIFICATION
* identifiants UCA
* 1 login
* 1 mot de passe
* à changer
* https://ent.uca.fr/compte/
* RH
* scola
* annuaire synchrone à l'ISIMA/LIMOS
* Active Directory (DC + rodc + OpenLdap synchronisé)
* compte uca pour TOUS les services
* comptes invités locaux
* groupes utilisateurs
* permissions sur les services
* changement de mot de passe via l'ENT UCA immédiat partout
* identifiants UCA pour tous les services UCA / ISIMA / LIMOS
## MAIL
* @isima.fr, @limos.fr
* une seule boite pour 2 alias
* webmail SOGO
* https://mail.isima.fr === https://mail.limos.fr
* agenda
* carnet d'adresse
* possibilité de forward
* @etu.uca.fr
* alias @etu.isima.fr
* @uca.fr
* mail universitaire
* boite distinct de @[isima|limos].fr
* @clermont-auvergne-inp.fr
* pour le personnel INP
* @cnrs.fr
* pour le personnel CNRS
## HOME
* dirs.local.isima.fr
* nfs + kerberos
* monter sur perso.isima.fr
* ssh ucausername@dirs.local.isima.fr
* SEUL CE QUI EST ICI EST EN LIEU SUR!
## FIXE ET LAPTOP
* gérer par le CRI et avec accès au réseau ISIMA/LIMOS
* un fix + un laptop pour les enseignants chercheurs
* un fixe ou un laptop pour les doctorant
* machines perso, téléphone, tablette
* connexion WIFI via https://eduroam.org/
* identifiant UCA
* sous windows
* P:// monte votre home de dirs
* SEUL ENDROIT SUR POUR SAUVER CES DONNEES
* TOUS LES POSTES SONT CHIFFRES
* sans aucune exception fixe et laptop
* possibilité de prêt selon les stocks
## MACHINES PEDA
* PC Triple boot
* Windows
* Kubuntu
* OS exam
* PC spécialisés
* Physique
* Robotique
* Electronique
* Tx
* GONA DIE!
* Accès libre
## ACCES SERVEURS VMS
* ssh
* guacamole
* xRDP
## SERVEURS PEDA
* serveurs UNIX
* ADA / Turing
* shared monte votre home de dirs
* SEUL ENDROIT SUR POUR SAUVER CES DONNEES
* serveurs Windows
* TSE1
* P:// monte votre home de dirs
* SEUL ENDROIT SUR POUR SAUVER CES DONNEES
* résintallables à tout moment
* résintallés le 7 juillet 2023
* AUCUN BACKUP!
## VMs PEDA
* accessible via
* ssh
* lire les messages
* guacamole
* problème de raccourcis clavier
* xRDP
## SERVEURS HPC
* Helene Toussaint
* helen.toussaint@limos.fr
* https://hpc.isima.fr
## SERVICES ISIMA/LIMOS
* https://hedgedoc.isima.fr
* https://guacamole.isima.fr
* https://my.isima.fr
* vpn
* cri (accès aux seuls membres)
* profs (enseignants / chercheurs et administration)
* étudiants
* marche / arrêt de VMs péda
* https://gitlab.isima.fr (péda)
* https://gitlab.limos.fr (recherche)
## SERVICES UCA
## SERVEURS PROJETS
## IMPRESSIONS
## RESEAU
## HYPERVISION
\ No newline at end of file
......@@ -14,12 +14,11 @@
* [<i class="fa fa-gavel" aria-hidden="true"></i> The MIT License](https://github.com/hashicorp/vagrant/blob/master/LICENSE)
* outil en ligne de commande
* se voit dans l'hyperviseur utilisé
## vagrant
* Il peut être considéré comme un wrapper d'hyperviseur
* il peut être considéré comme un wrapper d'hyperviseur
* VirtualBox
* libvirt
* VMware
......@@ -30,19 +29,13 @@
## Installation
pré-requis
VirtualBox (versions 4.0.x, 4.1.x, 4.2.x, 4.3.x, 5.0.x, 5.1.x, 5.2.x)
```
$ sudo apt install virtualbox
```
via gem
```
$ sudo apt install rubygems-integration
$ sudo gem install vagrant
```
via apt
install via apt (plus distribué via RubyGem)
```
$ sudo apt install vagrant
......@@ -70,14 +63,12 @@ Vagrant.configure("2") do |config|
end
```
Beaucoup de commentaires ... laisser vous guider
beaucoup de commentaires ... laisser vous guider
## Box
* Machines virtuelles préconfigurées (templates)
* [vagrant cloud](https://app.vagrantup.com/boxes/search)
* [vagrantbox.es](https://www.vagrantbox.es/)
* machines virtuelles préconfigurées (templates)
* mis en cache
* nommage à la github "développeur/Box"
......@@ -87,10 +78,23 @@ $ vagrant box add "http://aka.ms/vagrant-win7-ie11"
$ vagrant box list
$ vagrant box remove "ubuntu/xenial64"
```
* [vagrant cloud](https://app.vagrantup.com/boxes/search)
* [vagrantbox.es](https://www.vagrantbox.es/)
## Creating Box
* [Creating a Base Box](https://www.vagrantup.com/docs/boxes/base.html)
* [<i class="fa fa-github" aria-hidden="true"></i> veewee](https://github.com/jedi4ever/veewee)
* [<i class="fa fa-github" aria-hidden="true"></i> How to Create a CentOS Vagrant Base Box](https://github.com/ckan/ckan/wiki/How-to-Create-a-CentOS-Vagrant-Base-Box)
* [packer by HashiCorp](https://packer.io/)
* [<i class="fa fa-book"></i> Creating windows base images using Packer and Boxstarter](http://www.hurryupandwait.io/blog/creating-windows-base-images-for-virtualbox-and-hyper-v-using-packer-boxstarter-and-vagrant)
* [<i class="fa fa-github"></i> joefitzgerald/packer-windows](https://github.com/joefitzgerald/packer-windows)
## cycle de vie
......@@ -104,6 +108,39 @@ $ vagrant suspend
$ vagrant reload
$ vagrant destroy #--force
```
se voit dans l'hyperviseur utilisé
## réseau
mapping de port
```ruby
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8004
end
```
* [private network](https://www.vagrantup.com/docs/networking/private_network.html)
* [public network](https://www.vagrantup.com/docs/networking/public_network.html)
* on devrait pouvoir accéder à nos ressources locales
* tester un configuration avec ldap/ rodc?
* [<i class="fa fa-gitlab"></i> cri/ansible-playbook-vault](https://gitlab.isima.fr/cri/ansible-playbook-vault)
## vm
```ruby
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "4096"
end
end
```
## points de montage
......@@ -152,6 +189,44 @@ end
```
```ruby
if ENV['VAGRANT_OS']
os = ENV['VAGRANT_OS']
else
os = "ubuntu"
end
```
```ruby
Vagrant.configure("2") do |config|
if os == "centos"
config.vm.box = "centos/7"
else
config.vm.box = "ubuntu/bionic64"
end
```
```ruby
if os == "debian"
config.vm.provision "shell", inline: <<-SHELL
sudo yum install httpd
SHELL
else
config.vm.provision "shell", inline: <<-SHELL
sudo apt install -y apache2
SHELL
end
end
```
## Vagrant VS Docker
[<i class="fa fa-gitlab"></i> vimazeno/reveal-prez](https://gitlab.isima.fr/vimazeno/reveal-prez)
[<i class="fa fa-gitlab"></i> vimazeno/affproj](https://gitlab.isima.fr/vimazeno/affproj)
## provisioning
via [ansible](ansible.html)
......@@ -171,28 +246,14 @@ Vagrant.configure("2") do |config|
end
end
```
https://www.vagrantup.com/docs/provisioning/ansible_common.html
### idéal pour tester les playbooks
[Shared Ansible Options](https://www.vagrantup.com/docs/provisioning/ansible_common.html)
## vagrant pour tester apache
```ruby
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "forwarded_port", guest: 80, host: 8000
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "4096"
end
config.vm.provision "shell", inline: <<-SHELL
sudo apt install -y apache2
SHELL
end
```
## conclusion
**laissez un `Vagrantfile` dans vos roles [ansible](ansible.html) est toujours une bonne idée!**
## conclusion
* [<i class="fa fa-gitlab"></i> cri/ansible-playbook-vault](https://gitlab.isima.fr/cri/ansible-playbook-vault)
### laissez un petit Vagrantfile dans vos playbooks est toujours une bonne idée!
* [<i class="fa fa-gitlab"></i> cri/ansible-playbook-vault/Vagrantfile](https://gitlab.isima.fr/cri/ansible-playbook-vault/blob/master/Vagrantfile)
# vault
**By HashiCorp**
## Vault en bref!
![vault](images/vault.png "vault")<!-- .element width="30%" -->
![vault](../cri/images/vault.png "vault")<!-- .element width="30%" -->
[https://vault.isima.fr](https://vault.isima.fr)
#### Des secrets, des apps, des tokens, des équipes, un séquestre
# Secrets
## Vault
* By HashiCorp
* [écrit en go](https://github.com/hashicorp/hcl)
* cross plateform
* [hcl](https://github.com/hashicorp/hcl)
* intégration avec [consul](https://www.consul.io) & [terraform](https://www.terraform.io/)
* [auditable](https://www.vaultproject.io/docs/commands/audit/enable.html)
* [documenté](https://www.vaultproject.io/docs/)
* ... couteau suisse
## Vault
Il existe deux étages deux secrets dans la stack
* Un binaire [vault](https://releases.hashicorp.com/vault/) qui fait
* serveur
* [<i class="fa fa-book" aria-hidden="true"></i> api](https://www.vaultproject.io/api/overview)
* UI web
* cli
* les **secrets locaux**: sont gérés par la commande `ansible-vault` et peuvent être lus simplement avec la commande `avq` de la stack (accessible une fois l'environnement activé). Les **secrets locaux** sont chiffrés en local, mais le fait qu'ils ne soient pas versionnés rend ce chiffrement non indispensable.
```shell
$ export $VAULT_ADDR=https://10.0.0.1
```
* les **secrets globaux**: sont gérés par la commande `vault` de HashiCorp et peuvent être lus simplement avec la commande `hvq` de la stack (accessible une fois l'environnement activé). les secrets sont disponibles selon les permissions du jeton utilisés. les **secrets globaux** sont utilisés pour construire les **secrets locaux**
## Générer un secret
## Configuration
Un secret robuste en ligne de commande se génère avec la commande `openssl` comme suit
`/etc/vault/vault.hcl`
```
$ openssl rand -base64 256
backend "file" {
path = "/var/lib/vault"
}
ui = true
disable_mlock = true
listener "tcp" {
address = "10.0.0.1:443"
tls_cert_file = "/etc/certs/vault.crt"
tls_key_file = "/etc/certs/vault.key"
tls_disable = 0
}
```
écrire le secret dans un fichier
## initialisation SSS
### Shamir's Secret Sharing
```shell
$ vault operator init -key-shares=3 -key-threshold=2
```
$ openssl rand -base64 256 > ~/.ansible_secrets/stack
```shell
Unseal Key 1: 6gAO3lmAhIaHzDAdkK256g2B2Dpeqy+z4jqQCJBID3d8
Unseal Key 2: TO7DDRQXSPC3IQylPEBPjPGAGAGMzjEkjT/FL62m7UUd
Unseal Key 3: CYfEbt83jYsQFcSErHT4Y5NCsrEtfFUE6tjQZKfP632K
Initial Root Token: s.78MykQO2b5qcy03rtoNwmhr1
Vault initialized with 3 key shares and a key threshold of 2. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 2 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated master key. Without at least 2 key to
reconstruct the master key, Vault will remain permanently sealed!
```
Stocker le secret directement dans hashicorp vault
## Authentification
!["authentification"](../cri/images/vault-auth.png "authentification")
## Authentification
par token
```shell
$ vault login token=<root-or-app-token>
```
$ openssl rand -base64 256 @TODO
equivalent à
```shell
$ export VAULT_TOKEN token=<root-or-app-token>
```
## Vault
par ldap
```shell
$ vault login -method=ldap username=mazenovi
```
vault login -method=ldap username=vimazeno # vault login token=<token>
vault kv put cri/clusters/ovh/duncan/proxmoxapi password=itsasecret
vault read cri/clusters/ovh/duncan/proxmoxapi
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json | jq .data
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json | jq .data.password
vault delete cri/clusters/ovh/duncan/proxmoxapi
stocke le token dans `~/.vault-token` et `$VAULT_TOKEN`
## Policy (ACL)
```
path "cri/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
```
l'authentification ldap créée un fichier dans ~/.vault-token contenant votre token utilisateur avec vos permissions associées
écriture
```shell
$ vault policy write cri `/etc/vault/cri.hcl`
```
vault kv patch cri/clusters/ovh/duncan/proxmoxapi password="$(openssl rand -base64 25)"
application à un groupe ldap
```shell
$ vault write auth/ldap/groups/cri policies=cri
```
**N.B.** patch met à jour l'entrée avec KV2 et écrase les autres avec KV1 (on a activé KV2)
création de token à partir de la policy
```shell
$ vault token create -policy=cri
```
## [<i class="fa fa-book" aria-hidden="true"></i> Secrets engines](https://www.vaultproject.io/docs/secrets/)
!["secrets engines"](../cri/images/vault-secrets-engines.png "secrets engines")
## workflow
```shell
$ vault secrets list
$ vault kv list cri/
$ vault kv get cri/test
$ vault kv get -format=json cri/test
$ vault kv get -format=json cri/test | jq .data
$ vault kv get -format=json cri/test | jq .data.data.root
$ vault kv put cri/test password2=$(date | sha256sum)
$ vault kv patch cri/test password1=$(date | sha256sum)
$ vault delete cri/test
```
## avec ansible
* lookup natif [hashi_vault](https://docs.ansible.com/ansible/latest/plugins/lookup/hashi_vault.html)
* lecture uniquement
* pas de support natif pour kv2 à ce jour
* module "community" [hashivault](https://github.com/TerryHowe/ansible-modules-hashivault)
* Reading and Writing
* supporte kv2
* Initialization, Seal, and Unseal
* Policy
* User Management
## Stocker un secret
Ce secret devrait être stocké dans https://vault.isima.fr
## UI
Avec la commande `vault` [@TODO vault install] dans le path adéquat.
!["UI"](../privacy/images/vault/web.png "UI")
Interroger la structure du vault avec la command `vault-tree` avant de choisir le path du secret semble une bonne idée [vault-tree]().
Ces consignes sont valables pour tous le secrets de ce tutoriel
!["carnets mots de passe"](../privacy/images/vault/password_management.jpg "carnets mots de passe")<!-- .element width="80%" -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>my</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/my.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>openstack</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/openstack.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>pve</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/pve.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
......@@ -26,7 +26,7 @@
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/aws.md"
<section data-markdown="md/stack.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
......
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>users</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/users.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
<h3>1337</h3>
<h3>projets</h3>
<ul>
<li>
<a href="projets/profan-rgpd.html">Profan RGPD</a>
</li>
</ul>
<h3>privacy</h3>
<ul>
<li>
<a href="privacy/jnarac.html">je n'ai rien &agrave; cacher</a>
<ul>
<li><a href="1337/http.html">http</a></li>
<li><a href="privacy/sovereignty.html">souverainet&eacute;</a></li>
<li><a href="privacy/tracking.html">tracking</a></li>
<li><a href="privacy/passwords.html">mots de passes</a></li>
<li><a href="privacy/crypto.html">crypto</a></li>
<li><a href="privacy/tls.html">tls</a> / <a href="privacy/tls.html#/0/52">https</a></li>
<li><a href="privacy/pgp.html">pgp</a></li>
<li><a href="privacy/TLSvsPGP.html">tls vs PGP</a></li>
<li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/tails.html">tails</a></li>
<li><a href="privacy/vault.html">vault</a></li>
<li><a href="privacy/bitcoin.html">bitcoin</a></li>
</ul>
</li>
<li><a href="privacy/surfer_couvert.html">surfer couvert (en bref)</a></li>
<li><a href="privacy/browser.html">s&eacute;curit&eacute; et navigateur</a></li>
</ul>
<h3>1337</h3>
<ul>
<li><a href="1337/sidoine.html">S&eacute;curit&eacute; des applications web</a></li>
</ul>
<ul>
<li>
Architecture
<ul>
<li><a href="1337/http.html">http</a> / <a href="privacy/tls.html#/0/52">https</a></li>
<li><a href="1337/js.html">JS</a></li>
</ul>
</li>
<li>
Pentesting
<ul>
<li><a href="1337/gathering.html">Collecter</a></li>
<li><a href="1337/detect.html">D&eacute;tecter</a></li>
<li>
Exploit
<a href="1337/detecting.html">D&eacute;tecter</a>
<ul>
<li><a href="1337/heartbleed.html">Heartbleed</a></li>
</ul>
......@@ -25,29 +58,19 @@
Vuln&eacute;rabilit&eacute;s communes
<ul>
<li>
<a href="1337/command_execution.html">Ex&eacute;cution arbitraire de commandes</a>
<a href="1337/cmdi.html">Command execution</a>
<ul>
<li>
Exploit
<ul>
<li><a href="1337/shellshock.html">Shellshock</a></li>
</ul>
</li>
<li><a href="1337/shellshock.html">Shellshock</a></li>
</ul>
</li>
<li><a href="1337/upload.html">Upload</a></li>
<li><a href="1337/lfi_rfi.html">LFI_RFI</a></li>
<li><a href="1337/fi.html">File inclusion</a></li>
<li><a href="1337/xss.html">XSS</a></li>
<li><a href="1337/csrf.html">CSRF</a></li>
<li>
<a href="1337/sqli.html">SQLi</a>
<ul>
<li>
Exploit
<ul>
<li><a href="1337/drupalgeddon.html">Drupalgeddon</a></li>
</ul>
</li>
<li><a href="1337/drupalgeddon.html">Drupalgeddon</a></li>
</ul>
</li>
</ul>
......@@ -55,45 +78,25 @@
<li>
Se prot&eacute;ger
<ul>
<li>
<li><a href="1337/top10.html">Top10</a></li>
<li><a href="1337/anticiper.html">Anticiper</a></li>
<li><a href="1337/anticiper.html">R&eacute;agir</a></li>
</li>
<li><a href="1337/top10.html">Top10</a></li>
<li><a href="1337/anticiper.html">Anticiper</a></li>
<li><a href="1337/reagir.html">R&eacute;agir</a></li>
</ul>
</li>
</ul>
<h3>cri</h3>
<li><a href="cri/criprod.html">criprod</a></li>
<li><a href="cri/vault.html">vault</a></li>
<li><a href="cri/ansible.html">ansible</a></li>
<li><a href="cri/terraform.html">terraform</a></li>
<li><a href="cri/vagrant.html">vagrant</a></li>
<li><a href="cri/aws.html">aws</a></li>
<h3>privacy</h3>
<ul>
<li>
<a href="privacy/jnarac.html">je n'ai rien &agrave; cacher</a>
<ul>
<li><a href="1337/http.html">http</a></li>
<li><a href="privacy/sovereignty.html">souverainet&eacute;</a></li>
<li><a href="privacy/tracking.html">tracking</a></li>
<li><a href="privacy/passwords.html">mots de passes</a></li>
<li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/tails.html">tails</a></li>
<li><a href="privacy/crypto.html">crypto</a></li>
<li><a href="privacy/pgp.html">pgp</a></li>
<li><a href="privacy/tls.html">tls</a> / <a href="privacy/tls.html#/0/52">https</a></li>
<li><a href="privacy/TLSvsPGP.html">tls vs PGP</a></li>
<li><a href="privacy/bitcoin.html">bitcoin</a></li>
</ul>
</li>
<li><a href="privacy/surfer_couvert.html">surfer couvert (en bref)</a></li>
<li><a href="cri/devops.html">devops</a></li>
<li><a href="cri/vagrant.html">vagrant</a></li>
<li><a href="cri/ansible.html">ansible</a></li>
<li><a href="cri/vault.html">vault</a></li>
<li><a href="cri/ansible-role.html">ansible role</a></li>
<li><a href="cri/pve.html">pve</a></li>
<li><a href="cri/terraform.html">terraform</a></li>
<li><a href="cri/stack.html">stack</a></li>
<li><a href="cri/gitlab.html">gitlab</a></li>
<li><a href="cri/my.html">my</a></li>
<li><a href="cri/openstack.html">openstack</a></li>
<li><a href="cri/criprod.html">criprod</a></li>
</ul>