Ce projet utilise des conteneurs Docker.
Un qui permet la mise en place de la DB. Et l'autre permet la mise en place de l'application Flask.
- Installation de l'application Flask et de la DB
- Installation d'une machine cliente
- Passer le serveur en Production
Cloner le repositorie GitHub
git clone https://github.com/CodeWithRaph/Remote-log-reader.git
cd Remote-log-reader- Modifiez le contenu du fichier
.env.example:
- DB_PASSWD: Mot de passe de l'utilisateur DB.
- SECRET_KEY: La clé qui permet l'encryption de l'application Flask côté serveur. Cette valeur doit être remplacée par des octets aléatoires en production.
- SSH_USER: L'utilisateur qui sera utilisé pour lire les logs sur les machines clientes.
- SSH_PASSPHRASE: La phrase de passe utilisée pour la clé ssh du serveur flask. Laissez vide si vous n'utiliser pas de passphrase pour votre clé ssh.
- SSH_CONNECT_TIMEOUT: Timeout en seconde pour la connection ssh.
- DB_HOST: Identifie la machine qui host le serveur MariaDb. Sauf si vous décidez de mettre le conteneur sur une autre machine il est inutile de changer cette variable.
- SSH_KEY_PATH : préréglé sur le chemin relatif par défaut.
- Renommer le fichier
.env.examplepar.env
cp .env.example .env- Lancer les conteneurs Docker
docker compose up -d- Ouvrez maintenant http://127.0.0.1:5000 (Serveur de développement)
(Si vous êtes en localhost bien évidemment sinon remplacer l'IP par celle de la machine qui héberge le conteneur.)
Les comptes inclus par défaut pour effectuer des tests.
| Login | Mot de passe |
|---|---|
| admin | admin |
| manager | manager |
| user | user |
Bien entendu la première chose à vérifier est que la machine cliente accède au serveur.
Il y a 2 options possibles:
- Autoriser le groupe à lire tout les fichiers d'un répertoire (plus simple).
- Autoriser le groupe à lire une liste précise de fichiers (plus sécurisé).
- Création de l'utilisateur qui servira à établir la connexion SSH.
<user>: Remplacer par l'utilisateur qui sera utilisé pour lire les logs sur la machine.
<mdp>: Mot de passe utilisateur.
adm: Groupe prédéfini sur Debian/Ubuntu qui possède les droits de lecture sur certains journaux système sensibles.
sudo useradd <user>
sudo passwd <mdp>
sudo groupadd adm
sudo usermod -aG adm <user>- Récupérer la clé RSA publique du serveur central (via scp) puis la glisser dans la liste de clé autorisées.
su <user>
sudo mkdir ~/.ssh
cat rsa_publique_serveur >> ~/.ssh/authorized_keys- Création de l'utilisateur qui servira à établir la connexion SSH.
<user>: Remplacer par l'utilisateur qui sera utilisé pour lire les logs sur la machine.
<mdp>: Mot de passe utilisateur.
<logs-readers>: Remplacer par le nom du groupe qui aura les droits de lecture.
sudo useradd <user>
sudo passwd <mdp>
sudo groupadd <logs-readers>
sudo usermod -aG <logs-readers> <user>- Récupérer la clé RSA publique du serveur central (via scp) puis la glisser dans la liste de clé autorisées.
su <user>
sudo mkdir ~/.ssh
```bash
sudo apt install aclPour cette méthode il faudra mettre à jour manuellement le script pour changer la liste de fichiers.
Dans ce contexte on ne fait pas entièrement confiance aux supposées autorisations de lecture de fichiers, données dans l'application Flask.
<logs-readers>: Remplacer par le nom du groupe qui aura les droits de lecture.
#!/usr/bin/bash
group="logs-readers"
files_path=("/var/log/syslog" "/var/log/auth.log" "/var/log/kern.log")
for path in "${files_path[@]}"; do
sudo setfacl -m g:$group:r $path
echo "Set read permission for group '$group' on file '$path'"
donemv compose.yaml compose.dev.yaml
mv compose.prod.yaml compose.yaml
mv Dockerfile Dockerfile.dev
mv Dockerfile.prod DockerfileEn production il faut utiliser une clé d'encryption générée aléatoirement.
Ce changement s'applique dans le fichier.envque vous avez normalement créé après avoir modifié.env.example.
Voir aide
docker compose up --build(Veillez à supprimer les utilisateurs créé automatiquement lors de l'initialisation de la db)
Ouvrez maintenant http://127.0.0.1:80 (Serveur en Production)
(Si vous êtes en localhost bien évidemment sinon remplacer l'IP par celle de la machine qui héberge le conteneur.)