# Configuration des permissions Docker et système pour InnotexBoard ## 1. Permissions Docker ### Option A: Ajouter l'utilisateur au groupe docker (Moins sécurisé) ```bash # 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`) : ```bash # 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 ```bash # 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 : ```bash # 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 : ```bash # 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 : ```bash # 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 ```bash # 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` : ```ini [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 : ```bash # Installer Docker rootless dockerd-rootless-setuptool.sh install # Ajouter l'utilisateur rootless usermod -aG innotexboard ``` ## 5. Vérification des permissions ```bash # 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](app/core/config.py#L20) pour ajouter vos domaines : ```python ALLOWED_ORIGINS: list = [ "http://localhost:3000", "https://admin.votredomaine.com", # Production ] ``` ### JWT Secret Générer une clé sécurisée : ```bash python3 -c "import secrets; print(secrets.token_urlsafe(32))" ``` Ajouter au fichier `.env` : ``` SECRET_KEY= ``` ### HTTPS en production ```python # Avec Nginx (recommandé) # Proxy le reverse proxy vers localhost:8000 ``` ## 7. Troubleshooting ### "Permission denied" Docker ```bash # Vérifier le socket ls -la /var/run/docker.sock # Relancer Docker sudo systemctl restart docker ``` ### Erreur PAM ```bash # 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 ```bash # Lancer comme root temporairement sudo python main.py # Vérifier les permissions de /proc cat /proc/cpuinfo | head ``` ## Documentation complète - [Documentation FastAPI](https://fastapi.tiangolo.com) - [Docker Python SDK](https://docker-py.readthedocs.io) - [psutil](https://psutil.readthedocs.io) - [python-pam](https://github.com/firecat53/python-pam)