Files
innotexBoard/PERMISSIONS.md
2026-01-16 18:40:39 +01:00

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

Documentation complète