[et_pb_section admin_label=“section“]
[et_pb_row admin_label=“row“]
[et_pb_column type=“4_4″][et_pb_text admin_label=“Text“]Einen eigenen Passwort Manager kann man mit Passbolt unter Nginx realisieren. Die App wird dabei auf dem eigenen Server gehostet.
Vorteil: Unabhängigkeit von Passwort-Diensten die in der Cloud meistens auch Geld kosten.
Nachteil: Man braucht einen eigenen Server und tiefgreifendes Wissen.
[box type=“note“ size=“large“ border=“info“]UPDATE: Aktualisiert am 07.08.2017[/box]
Setup Passbolt Passwort Manager
Voraussetzungen erfüllen
Voraussetzungen für die Installation des Passbolt Passwort Manager sind auf der Entwicklerseite gelistet. Falls notwendig – und das ist es bei dieser Installation – müssen fehlenden Packages nachinstalliert werden. Unter Umständen müssen die gpgme Entwickler-Dateien auf dem Server bereitgestellt werden, was wie folgt passieren kann:
apt install libgpgme11 libgpgme11-dev
Um zu prüfen, ob GNUPG vom Webserver/PHP unterstützt wird kann man an der Shell folgenden Befehl absetzen
php --info | grep 'gnupg support'
Code clonen
Der Ort für den Webroot, den Installationsordner für den Passbolt Passwort Manager ,unterliegt der freien Selbstbestimmung des Admins. Also legt man zunächst ein Verzeichnis an mit
mkdir -p /var/www/domain.tld/passbolt
cd /var/www/domain.tld/passbolt
git clone https://github.com/passbolt/passbolt.git .
Berechtigungen setzen
Ein häufiger Quell allen Übels sind Berechtigungen, zumal schnell der Webserver ausgesperrt wird:
chmod +w -R /var/www/domain.tld/passbolt/app/tmp
chmod +w /var/www/domain.tld/passbolt/app/webroot/img/public
chown -R www-data:www-data /var/www/domain.tld/passbolt/
Die letzte Zeile setzt die Berechtigung für den Webserver-User, entsprechend muss man hier wissen als welcher Benutzer Nginx seinen Dienst verrichtet (hier www-data).
Key generieren
Hinweis: Wenn die Entropie des Servers nicht ausreicht – Prüfung mit cat /proc/sys/kernel/random/entropy_avail – dann kann mit apt install rng-tools ein Daemon installiert werden, der bei erneuter Prüfung der Entropie mindestens einen 3-stelligen Wert zurück liefert.
gpg --gen-key
Eine Anleitung dazu ist schnell „ergoogelt“, z.b. auf den Seiten von RedHat, oder in Cyberciti.biz.
[box type=“download“ size=“large“ icon=“none“]TIP1: Sicherstellen, dass keine bestehenden Keys eliminiert werden! [/box]
[box type=“download“ size=“large“ icon=“none“]TIP2: Die Ausgabe des Befehls gpg –gen-key in einer Textdatei (zumindest copy & paste) ablegen. [/box]
[box type=“download“ size=“large“ icon=“none“]TIP3: Kein Passwort verwenden, da dies von php-gnupg nicht supportet wird.[/box]
gpg: key 08D2A7F9 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 3 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: next trustdb check due at 2027-11-22
pub 2048R/08D2A7F9 2016-12-05
Key fingerprint = 2FC8 9458 33C5 1946 E937 F9FE D47B 0811 573E E67D
uid Chris Moeser (The Admin) <passbolt@domain.tld>
sub 2048R/23B5F24C 2016-12-05
(Werte geändert, das Zeug sieht aber so in etwa aus)
Mit gpg -K kann der Schlüssel (oder auch die) gelistet werden.
Das Ausführen des gnupg-Befehls als root macht Nacharbeiten notwendig.
mkdir /opt/passbolt
gpg --armor --export-secret-keys your_email@domain.com > /opt/passbolt/serverkey.private.asc
gpg --armor --export your_email@domain.com > /opt/passbolt/serverkey.asc
cp -a /root/.gnupg/ /opt/passbolt/
chown -R www-data:www-data /opt/passbolt/.gnupg
chown -R www-data:www-data /opt/passbolt/*
Nginx Server Config
Update: Fehlerkorrektur – das alte Listing zeigte zweimal Port 80, was natürlich Quatsch ist. Entsprechend wurde das neue Listing angepasst. Es setzt die erfolgreiche Generierung eines SSL Zertifikats voraus.
Wenn die DNS-Einstellungen passen, kann das wie folgt geschehen:
/opt/certbot/certbot-auto certonly --standalone -d pass.domain.tld \
--pre-hook="systemctl stop nginx" --post-hook="systemctl start nginx"
Für weitere Informationen gibt es bereits eine Anleitung hier auf adminwerk.
Danach macht man sich an den Webserver. PHP-FPM wird über Sockets angesprochen. Man erstellt dazu einen neuen Pool unter /etc/php/7.0/fpm/pool.d der als listen Direktive folgenden Pfad verwendet:
listen = /run/php/php7.0-fpm.pass_php_over_socket.sock
Diesen nehmen wir gleich im Anschluss in der nginx-Konfiguration als upstream wieder auf. Heißen kann das natürlich wie man will. Übereinstimmen muss es!
upstream pass_php_over_socket {
server unix:/run/php/php7.0-fpm.pass_php_over_socket.sock;
}
server {
listen 80;
server_name passbolt.domain.tld;
# redirect to SSL
rewrite ^(.*) http://passbolt.domain.tld$1 permanent;
}
server {
listen 443 ssl http2;
listen [::]443 ssl http2;
server_name passbolt.domain.tld;
# root directive should be global
root /var/www/passbolt.domain.tld/passbolt/public/app/webroot/;
index index.php;
access_log /var/www/passbolt.domain.tld/log/access.log;
error_log /var/www/passbolt.domain.tld/log/error.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /html;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ =404;
fastcgi_pass pass_php_over_socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# (optional)
location ~ /\.ht {
deny all;
}
# (optional)
location ~* \.(?:css|js)$ {
try_files $uri /index.php$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
# add_header Strict-Transport-Security "max-age=15768000;
# includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
# (optional)
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
# SSL Optionen
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Let's Encrypt
ssl_certificate /etc/letsencrypt/live/pass.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pass.domain.tld/privkey.pem;
}
Code/Config anpassen
Die nachfolgenden Schritte sind absolut relevant um die Sicherheit der Installation zu gewährleisten! In der Konfigurationsdatei sind Anpassungen vorzunehmen:
core.php
cp app/Config/core.php.default app/Config/core.php
In dieser Datei sind Einstellungen vorzunehmen, die das CakePHP-Framwork benötigt. Passbolt verwendet diese nicht. vi app/Config/core.php
Configure::write('Security.salt', 'put your own salt here');
Configure::write('Security.cipherSeed', 'put your own cipher seed here');
Um die beiden Werte mit Daten zu belegen kann man z.B. doorman verwenden, oder sein Gesicht pflichtbewusst auf die Tastatur fallen lassen. In der Konfiguration steht drin, welche Zeichen das System erwartet.
Eine weitere Anpassung ist der Pfad zum Bildordner. Versendete Mails referenzieren auf dieses Verzeichnis
Configure::write('App.fullBaseUrl', 'https://pass.domain.tld');
Die zugrundeliegende Datenbank muss unter eingetragen werden. dazu beherzt:
database.php
cp app/Config/database.php.default app/Config/database.php
In der Class DATABASE_CONFIG wird dabei das Array $default angepasst.
(Einstellungen entsprechend anpassen)
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'passbolt'
);
Jetzt geht es an(s Eingemachte) die Zuweisung der GPG Keys im Code. Dazu wird die app.php angelegt, anschließend editiert (vi app.php)
app.php
cp app/Config/app.php.default app/Config/app.php
(Kommentare geben -erweiterte- Hinweise)
'GPG' => [
// Tell GPG where to find the keyring
// Needs to be available by the user the webserver is running as
'env' => [
// you can set this to false if you want to use *nix $GNUPGHOME environment variable
'setenv' => true,
// otherwise you can set the location here
// typically on Centos it would be in '/usr/share/httpd/.gnupg'
// TIP: Der Pfad muss für den Webserver-Benutzer erreichbar sein, sonst bricht die
// Installation ab!
'home' => '/opt/passbolt/.gnupg',
],
// Main server key
'serverKey' => [
// Server private key location and fingerprint
// TIP: Diese Informationen haben wir oben erhalten.
'fingerprint' => '2FC8945833C51946E937F9FED47B0811573EE67D',
'public' => '/opt/passbolt/serverkey.asc',
'private' => '/opt/passbolt/serverkey.private.asc',
// PHP Gnupg module currently does not support passphrase, please leave blank
'passphrase' => ''
]
]
email.php
Einstellungen innerhalb des $default-Arrays werden auf den entsprechenden Mailserver zugeschnitten.
Installation
Die Ausführung des Befehls
app/Console/cake install --no-admin
nimmt die Installation vor, die fehlerfrei beendet wird, wenn alle Rahmenparameter passen. ein Admin wird dabei zunächst nicht erstellt. Dies folgt im Anschluss.
Passbolt installation success! Enjoy! ☮
Adminbenutzer anlegen
Geschieht wie die Installation an der Kommandozeile mit dem Befehl
app/Console/cake passbolt register_user -u foo@bar.com -f Chris -l Moeser -r admin
und wird auch an der Kommandozeile quitiert! Die nachfolgende Ausgabe ist entsprechend modifiziert
The user has been registered with success, to complete the registration process follow the link : http://pass.domain.tld/setup/install/82735282-729c-3g7c-ab87-2725a8e82c5b/cc9c1918-ce8f-44e1-af96-9f48a86d7c38
The user has been notified by email to complete his registration process.
Done!
Quellen
- https://www.passbolt.com/help/tech/install
- https://www.cyberciti.biz/tips/linux-how-to-create-our-own-gnupg-privatepublic-key.html
- https://www.svennd.be/installing-passbolt-on-centos-7/
[/et_pb_text][/et_pb_column]
[/et_pb_row]
[/et_pb_section]