228 lines
4.6 KiB
Markdown
228 lines
4.6 KiB
Markdown
# 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 <rootless-user> 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=<votre-clé-générée>
|
|
```
|
|
|
|
### 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)
|