Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.
Bonjour à tous,
Aujourd’hui, on va voir comment installer PrivateBin sur Debian 9 avec NGINX et PHP7. On va évidemment passer un coup de Let’s Encrypt sur la chose.
C’est quoi PrivateBin ?
PrivateBin est un clone de PasteBin, utilisé pour partager du texte ou du code, autohébergé où le serveur n’a pas connaissance du texte qui est partagé dans l’outil.
Toutes les données sont chiffrées et déchiffrées par le navigateur en utilisant AES-256 GCM.
Prérequis :
- Avoir suivi l’article pour monter son serveur Web avec Debian 9
- Remplacer paste.yaute.ninja par votre nom de domaine dans toute la procédure (oui c’est un vrai domaine)
Préparation de l’installation :
Créez d’abord un utilisateur Linux pour l’application et ajoutez-le dans le groupe www-data :
useradd privatebin usermod -a -G www-data privatebin
Téléchargez l’archive de PrivateBin :
cd /var/www/ wget https://github.com/PrivateBin/PrivateBin/archive/1.1.1.tar.gz tar xf 1.1.1.tar.gz && rm 1.1.1.tar.gz mv PrivateBin-1.1.1 privatebin chown privatebin:www-data -R /var/www/privatebin
Créez un nouveau pool fpm :
nano /etc/php/7.0/fpm/pool.d/privatebin.conf
Et remplissez avec les informations suivantes :
[privatebin] listen = /var/lib/php7.0-fpm/privatebin.sock listen.owner = privatebin listen.group = www-data listen.mode = 0660 user = privatebin group = www-data pm = dynamic pm.max_children = 32 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 16 pm.max_requests = 40000 chdir = / pm.status_path = /status env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Et redémarrez le service pour appliquer les modifications :
service php7.0-fpm restart
Maintenant, on va créer un vhost de base :
nano /etc/nginx/sites-enabled/privatebin.vhost
Ajoutez la configuration suivante :
server { listen 62.210.106.114:80; listen [2001:bc8:3d8b:100::100]:80; server_name paste.yaute.ninja; root /var/www/privatebin/; index index.php; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/lib/php7.0-fpm/privatebin.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ ^/.well-known/acme-challenge/* { allow all; } location = /robots.txt { allow all; log_not_found off; access_log off; } }
Maintenant, redémarrez NGINX :
service nginx restart
Créez le répertoire pour les certificats Let’s Encrypt :
mkdir -p /etc/letsencrypt/live-ecdsa/paste.yaute.ninja cd /etc/letsencrypt/live-ecdsa/paste.yaute.ninja mkdir letmp
Maintenant, créez la clé privée pour votre certificat en indiquant la courbe que vous souhaitez utiliser :
openssl ecparam -genkey -name secp384r1 > privkey-p384.pem
Maintenant, créez un CSR, indiquez votre domaine correctement :
openssl req -new -sha256 -key privkey-p384.pem -subj "/CN=paste.yaute.ninja" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:paste.yaute.ninja")) -outform der -out csr-p384.der
Rendez-vous dans le dossier temporaire « letmp » et créez votre certificat avec Let’s Encrypt (ça serra aussi les commandes pour renouveller le certificat) :
cd letmp /etc/letsencrypt/letsencrypt-auto certonly -a webroot --email yolo@caramail.coucou --webroot-path /var/www/privatebin/ --csr /etc/letsencrypt/live-ecdsa/paste.yaute.ninja/csr-p384.der --renew-by-default --agree-tos cat 0001* > /etc/letsencrypt/live-ecdsa/paste.yaute.ninja/chain.pem
Maintenant, modifiez le vhost :
cd /tmp wget https://raw.githubusercontent.com/stylersnico/my-webserver/master/etc/nginx/sites-enabled/privatebin.vhost echo privatebin.vhost > /etc/nginx/sites-enabled/privatebin.vhost
Maintenant, redémarrez nginx :
service nginx restart
Installation de PrivateBin :
C’est très simple, rendez vous dans le dossier hébergeant la configuration et modifiez le fichier de configuration par défaut :
cd /var/www/privatebin/cfg cp conf.sample.php conf.php nano conf.php
Accédez à l’URL de votre installation et profitez 🙂
En bonus, vous pouvez :
- Déployer TLSA
- Déployer HPKP
- Faire des sauvegardes (sauf que ça c’est pas du bonus)
Merci pour l’article sur privatebin, très complet ! 🙂
Petite question, ne serait-ce pas plus sécurité d’ajouter l’option /bin/nologin dans le fichier /etc/passwd pour le user privatebin ?
Petit bémol cependant concernant l’installation. Le fichier INSTALL.MD recommande plusieurs façons d’augmenter la sécurité l’application. Notamment le déplacement des fichiers de privatebin à l’extérieur du fichier root., ce qui n’est pas fait ici :/
Salut,
Pour ce qui est du /bin/nologin, le compte utilisateur n’a ni mot de passe ni clé d’authentification donc il ne peut pas se connecter.
Ensuite, tu as déjà une isolation faite au niveau du pool FPM et au niveau des droits Unix, je suis resté simple sinon ça devient bordélique à maintenir et mettre à jour … et en plus on ne fait pas transiter des informations bancaires là-dessus 🙂