Initial commit
This commit is contained in:
227
PERMISSIONS.md
Normal file
227
PERMISSIONS.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user