4.6 KiB
4.6 KiB
Configuration des permissions Docker et système pour InnotexBoard
1. Permissions Docker
Option A: Ajouter l'utilisateur au groupe docker (Moins sécurisé)
# Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker $USER
# Activer les changements de groupe
newgrp docker
# Vérifier
docker ps
Option B: Sudo pour les commandes Docker spécifiques (Recommandé)
Ajouter dans /etc/sudoers (avec visudo) :
# Permettre au serveur web d'exécuter docker sans mot de passe
www-data ALL=(ALL) NOPASSWD: /usr/bin/docker
your-user ALL=(ALL) NOPASSWD: /usr/bin/docker
Option C: Socket Docker avec permissions spéciales
# Modifier les permissions du socket Docker
sudo chmod 666 /var/run/docker.sock
# Ou le rendre accessible par un groupe spécifique
sudo groupadd -f dockergroup
sudo chown root:dockergroup /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
sudo usermod -aG dockergroup your-user
2. Permissions système pour psutil
L'accès à /proc est nécessaire. Vérifier :
# Ces répertoires doivent être lisibles
ls -la /proc
ls -la /proc/net/dev
ls -la /sys/class/net
# Les permissions sont généralement :
# dr-xr-xr-x root pour /proc
Si des problèmes d'accès :
# Lancer le serveur avec sudo (déconseillé)
sudo python main.py
# Ou modifier les permissions (attention à la sécurité!)
sudo chmod 755 /proc
3. Permissions PAM pour l'authentification
PAM utilise l'authentification du système. Vérifier :
# Le module PAM est installé
python -c "import pam; print(pam.__version__)"
# Les permissions de /etc/shadow doivent être correctes
ls -la /etc/shadow
# -rw-r----- root:shadow (640)
# L'utilisateur qui lance le serveur doit être dans le groupe shadow
sudo usermod -a -G shadow your-user
# Ou lancer avec sudo (déconseillé)
sudo python main.py
4. Configuration de sécurité recommandée
Pour Debian/Ubuntu
# 1. Créer un utilisateur spécifique pour le service
sudo useradd -r -s /bin/false innotexboard
# 2. Ajouter aux groupes nécessaires
sudo usermod -aG docker innotexboard
sudo usermod -aG shadow innotexboard
# 3. Configuration Sudoers sécurisée
echo "innotexboard ALL=(ALL) NOPASSWD: /usr/bin/docker" | sudo tee -a /etc/sudoers.d/innotexboard
sudo chmod 440 /etc/sudoers.d/innotexboard
Systemd Service (Optionnel)
Créer /etc/systemd/system/innotexboard.service :
[Unit]
Description=InnotexBoard Admin Panel
After=network.target docker.service
Wants=docker.service
[Service]
Type=simple
User=innotexboard
WorkingDirectory=/opt/innotexboard/backend
ExecStart=/usr/bin/python3 main.py
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
# Permissions de sécurité
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=yes
[Install]
WantedBy=multi-user.target
Docker en rootless mode (Avancé)
Si vous utilisez Docker en rootless :
# Installer Docker rootless
dockerd-rootless-setuptool.sh install
# Ajouter l'utilisateur rootless
usermod -aG <rootless-user> innotexboard
5. Vérification des permissions
# Vérifier Docker
sudo -u innotexboard docker ps
# Vérifier psutil
sudo -u innotexboard python3 -c "import psutil; print(psutil.virtual_memory())"
# Vérifier PAM
python3 -c "import pam; pam.pam().authenticate('testuser', 'testpass')"
6. Sécurité API
CORS et origines autorisées
Modifier app/core/config.py pour ajouter vos domaines :
ALLOWED_ORIGINS: list = [
"http://localhost:3000",
"https://admin.votredomaine.com", # Production
]
JWT Secret
Générer une clé sécurisée :
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
Ajouter au fichier .env :
SECRET_KEY=<votre-clé-générée>
HTTPS en production
# Avec Nginx (recommandé)
# Proxy le reverse proxy vers localhost:8000
7. Troubleshooting
"Permission denied" Docker
# Vérifier le socket
ls -la /var/run/docker.sock
# Relancer Docker
sudo systemctl restart docker
Erreur PAM
# Vérifier le module PAM
python3 -c "import pam; print(pam.pam().authenticate('root', 'test'))"
# Vérifier /etc/shadow
sudo getent shadow | head
Erreur psutil
# Lancer comme root temporairement
sudo python main.py
# Vérifier les permissions de /proc
cat /proc/cpuinfo | head