Padlocは、複数のプラットフォーム間で保存されたパスワードにアクセスして使用できるようにするクラウドベースのパスワード管理ソリューションです。シンプルなインターフェイスを提供し、パスワードを保存したり、機密文書を暗号化して保存したりするために使用できます。また、2要素認証トークンの保存もサポートしており、Webページから直接追加できます。
Padlocは、データの完全な制御を維持するために任意のサーバーにインストールできるオープンソースのセルフホストソリューションも提供します。ただし、これには注意が必要です。セルフホストアプリケーションをデスクトップアプリとモバイルアプリで使用することはできません。明るい面として、PadlocはPWA(プログレッシブウェブアプリ)として機能します。つまり、モバイルにネイティブアプリケーションとしてインストールし、その機能のいくつかを利用できます。
このチュートリアルでは、RockyLinux8ベースのサーバーにPadlocPasswordManagerをインストールする方法を学習します。
- 1GB以上のRAMを搭載したRockyLinux8を実行しているサーバー。
- sudo権限を持つroot以外のユーザー。
-
example.com
のようなサーバーを指す完全修飾ドメイン名(FQDN) 。このチュートリアルでは、このサーバーに1つのドメイン名のみを使用することを前提としています。
最初のステップは、ファイアウォールを構成することです。 RockyLinuxはFirewalledFirewallを使用しています。ファイアウォールのステータスを確認してください。
$ sudo firewall-cmd --state running
ファイアウォールはさまざまなゾーンで機能し、パブリックゾーンがデフォルトで使用されます。ファイアウォールでアクティブなすべてのサービスとポートを一覧表示します。
$ sudo firewall-cmd --permanent --list-services
次の出力が表示されます。
cockpit dhcpv6-client ssh
HTTPおよびHTTPSポートを許可します。
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
ファイアウォールのステータスを再確認してください。
$ sudo firewall-cmd --permanent --list-services
同様の出力が表示されるはずです。
cockpit dhcpv6-client http https ssh
ファイアウォールをリロードして変更を有効にします。
$ sudo firewall-cmd --reload
Rocky Linuxには、古いバージョンのDockerが付属しています。最新バージョンをインストールするには、まず、公式のDockerリポジトリをインストールします。
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
最新バージョンのDockerをインストールします。
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Dockerデーモンを有効にして実行します。
$ sudo systemctl enable docker --now
実行されていることを確認します。
$ sudo systemctl status docker ? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2022-04-09 22:43:21 UTC; 30s ago Docs: https://docs.docker.com Main PID: 43005 (dockerd) Tasks: 7 Memory: 90.5M CGroup: /system.slice/docker.service ??43005 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ....
デフォルトでは、Dockerにはroot権限が必要です。 sudo
の使用を避けたい場合 docker
を実行するたびに コマンドで、ユーザー名をdocker
に追加します グループ。
$ sudo usermod -aG docker $(whoami)
この変更を有効にするには、サーバーからログアウトして同じユーザーとして再度ログインする必要があります。
DockerComposeの最新の安定したリリースをダウンロードします。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
DockerComposeバイナリファイルに実行可能権限を適用します。
$ sudo chmod +x /usr/local/bin/docker-compose
インストールをテストします。
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
Docker-composeBashCompletionスクリプトをインストールします。
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
プロファイル設定をリロードして、bash-completionを機能させます。
$ source ~/.bashrc
padlocのディレクトリを作成します。
$ mkdir ~/padloc
padlocディレクトリに切り替えます。
$ cd ~/padloc
ユーザーデータベース、アプリケーションログ、添付ファイル、PWAアプリ、SSL構成用のディレクトリを作成します。
$ mkdir {attachments,db,logs,pwa,ssl}
Nginxログ用のディレクトリを作成します。
$ mkdir logs/nginx
ステップ5-Docker作成ファイルを作成する
~/padloc/docker-compose.yml
を作成して開きます 編集用のファイル。
$ nano docker-compose.yml
次のコードを貼り付けます。
version: "3" services: server: image: padloc/server container_name: padloc_server restart: unless-stopped #ports: # - ${PL_SERVER_PORT:-3000}:3000 expose: - 3000 volumes: - ${PL_DB_DIR:-./db}:/data:Z - ${PL_ATTACHMENTS_DIR:-./attachments}:/docs:Z - ./logs:/logs:Z environment: - PL_PWA_URL - PL_EMAIL_SERVER - PL_EMAIL_PORT - PL_EMAIL_USER - PL_EMAIL_PASSWORD - PL_EMAIL_FROM pwa: image: padloc/pwa container_name: padloc_pwa restart: unless-stopped #ports: # - ${PL_PWA_PORT:-8080}:8080 expose: - 8080 volumes: - ${PL_PWA_DIR:-./pwa}:/pwa:Z environment: - PL_SERVER_URL nginx: image: nginx container_name: nginx restart: unless-stopped volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ${PL_SSL_CERT:-./ssl/cert.pem}:/ssl/cert - ${PL_SSL_KEY:-./ssl/key.pem}:/ssl/key - ${PL_SSL_CONF:-./ssl/ssl.conf}:/ssl/ssl.conf - /etc/ssl/certs/dhparam.pem:/ssl/dhparam.pem - ./logs/nginx:/var/log/nginx:Z ports: - 80:80 - 443:443
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
Padlocには3つのDockerイメージを使用しています。
-
サーバーイメージ -アプリケーションのすべてのバックエンドロジックが含まれています。デフォルトでは、ポート3000で実行されます。作成ファイルのports変数のコメントを解除して、サーバーからポートを非表示にしました。代わりに、expose変数を使用して、Dockerエンジン内のポートをNginxコンテナーに公開します。イメージの環境変数は後で構成されます。また、ユーザーデータベース、添付ファイル、およびアプリケーションログのディレクトリもマッピングしました。
-
PWA画像 -アプリケーションのフロントエンドが含まれています。デフォルトでは、ポート8080で実行されます。サーバーイメージについては、このイメージのポートセクションを非表示にし、Dockerエンジン内のポートを公開しました。 Webアプリのディレクトリをマッピングしました。
-
Nginxイメージ -Nginxサーバーアプリケーションが含まれています。サーバーへのHTTP(80)およびHTTPS(443)のポートがあり、外部からアクセスできるようになっています。それを機能させるために、いくつかのディレクトリとファイルをマッピングしました。
- 最初のファイルは
nginx.conf
です これには、Nginxがpadlocアプリケーションを提供するためのすべての主要な構成が含まれています。 - 次の2つのファイル、
cert.pem
およびkey.pem
Let'sEncryptを使用して生成するSSL証明書とキーです。 - ファイル
ssl.conf
Nginxを介したSSLの提供に関する追加情報が含まれています。 - ファイル
dhparam.pem
Diffie-Hellmanグループにサービスを提供することです 証明書。 - 最後のエントリは、Nginxログをサーバーにマップして戻し、Dockerの外部でアクセスできるようにすることです。
- 最初のファイルは
-
:Z
フォルダマッピングの最後にあるフラグは、それらのディレクトリがそれぞれのコンテナからのみアクセス可能であることを示します。これは、サーバーでSELINUXが有効になっているために実行されています。 SELinuxを使用していない場合は、フラグを削除できます。
ファイル~/padloc/nginx.conf
を作成して開きます 編集用。
$ nano nginx.conf
次のコードを貼り付けます。
http { # This is required if you want to upload attachments client_max_body_size 10m; # Redirect all http traffic to https server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; } server { # We don't need a host name here since we're only # dealing with one domain, but you may insert your domain here. server_name _; # Both server and pwa are served over https listen 443 ssl http2; listen [::]:443 ssl http2; # This will resolve to the server instance location /server/ { proxy_pass http://padloc_server:3000; rewrite ^/padloc_server(.*)$ $1 break; } # This will resolve to the web app location / { proxy_pass http://padloc_pwa:8080; rewrite ^/padloc_pwa(.*)$ $1 break; } # SSL certificate ssl_certificate /ssl/cert; # SSL private key ssl_certificate_key /ssl/key; # Add this file to add advanced ssl configuration include /ssl/ssl.conf; } } # This section is required by nginx events {}で必要です
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
上記の構成は、padloc_server
から行われたすべてのリクエストを転送します /server
へのコンテナ ドメイン名の場所とpadlock_pwa
からのリクエスト ルートへのコンテナ。また、すべてのHTTPトラフィックをHTTPSにリダイレクトします。また、添付ファイルのファイルアップロードサイズを10MBに設定しました。要件に応じてサイズを変更できます。 SSL設定は、後で構成する外部ファイルを介して含まれています。
~/padloc/.env
を作成して開きます 編集用のファイル。
$ nano .env
次のコードを貼り付けます。
# GENERAL SETTINGS # ================ # URL that will resolve to the server instance PL_PWA_URL=https://example.com/ # URL that will resolve to the web app PL_SERVER_URL=https://example.com/server/ # SERVER SETTINGS # =============== # Port the server instance will listen on PL_SERVER_PORT=3000 # Directory where database files will be stored PL_DB_DIR=./db # Directory where attachment files will be stored PL_ATTACHMENTS_DIR=./attachments # PWA SETTINGS # ============ # Port the web app will be served from PL_PWA_PORT=8080 # Directory where the static code for the web app will be stored PL_PWA_DIR=./pwa # EMAIL SETTINGS # ============= # SMTP host PL_EMAIL_SERVER=smtp.example.com # SMTP username [email protected] # SMTP port PL_EMAIL_PORT=443 # SMTP password PL_EMAIL_PASSWORD=your_smtp_password # Always use TLS when sending emails # PL_EMAIL_SECURE=false # Email ID to send mails from [email protected] # SSL SETTINGS # ============ # The path to your ssl certificate PL_SSL_CERT=/etc/letsencrypt/live/example.com/fullchain.pem # The path to your ssl private key PL_SSL_KEY=/etc/letsencrypt/live/example.com/privkey.pem # Advanced configuration file PL_SSL_CONF=./ssl/ssl.conf
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。ほとんどの設定は一目瞭然です。既存のNginx構成では、アプリがメインドメインを介して提供され、サーバーが/server
を介して提供されることが想定されています。 ディレクトリ。 PL_PWA_DIR
こことDocker-composeファイルで設定する必要はありませんが、コンテナの起動を高速化するため、常に設定する必要があります。
Padlocには、新しいユーザーの確認、2要素認証、パスワードのリセットなどの機能のために電子メールを送信する機能が必要です。したがって、SMTPの詳細は必須です。
SSL機能には、証明書が配置されているLet'sEncryptのデフォルトディレクトリを使用します。追加のSSL構成は、ファイル/ssl/ssl.conf
を介して提供されます。 。
Let's Encryptを使用してSSL証明書をインストールするには、Certbotツールをインストールする必要があります。
まず、EPELリポジトリをダウンロードしてインストールする必要があります。
$ sudo dnf install epel-release
次のコマンドを実行して、Certbotをインストールします。
$ sudo dnf install certbot
SSL証明書を生成します。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
上記のコマンドは、証明書を/etc/letsencrypt/live/example.com
にダウンロードします。 サーバー上のディレクトリ。
Diffie-Hellmanグループを生成します 証明書。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Cronジョブを作成してSSLを更新します。毎週実行され、証明書を確認し、必要に応じて更新します。そのためには、まず、ファイル/etc/cron.weekly/certbot-renew
を作成します。 開いて編集します。
$ sudo nano /etc/cron.weekly/certbot-renew
次のコードを貼り付けます。 Dockerコマンドを使用して、更新ステータスに応じてNginxコンテナーを開始、停止、再起動します。
#!/bin/sh certbot renew --cert-name example.com --pre-hook "docker stop nginx" --post-hook "docker start nginx" --renew-hook "docker restart nginx"
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
タスクファイルの権限を変更して実行可能にします。
$ sudo chmod +x /etc/cron.weekly/certbot-renew
ファイル~/padloc/ssl/ssl.conf
を作成して開きます 編集用。
$ nano ssl/ssl.conf
次のコードを貼り付けます。
ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /ssl/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s;
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
上記のファイルは、サイトをより安全にするために推奨されるSSL設定をいくつか紹介しています。 TLSプロトコルをv1.2およびv1.3に制限し、オンライン証明書ステータスプロトコル(OCSP)のステープリングと検証を有効にします。
ステップ10-Padlocを実行
すべてを構成したので、次のコマンドを使用してPadlocを実行します。
$ docker-compose up -d
コンテナのステータスを確認してください。
$ docker ps
同様の出力が得られるはずです。
URL https://example.com
を開きます ブラウザで、ログインページにアクセスします。
今すぐ登録をクリックします 登録を開始するためのリンク。
名前とメールアドレスを入力し、続行を押します 続行します。
Padlocから確認コードが記載されたメールが送信されます。上のボックスに確認コードを入力し、続行を押します 続行します。
Padlocは自動的にマスターパスワードを生成します。ボックスにカーソルを合わせてコピーします。下のボックスにもう一度貼り付けてください。パスワードの使用を選択することもできます。 続行を押します 終了したら。
Padlocホームページに移動します。ログインデータと機密文書の保存を開始できます。
ステップ12-Padlocを更新
Padlocの更新は2段階のプロセスです。まず、Padlocディレクトリに切り替えます。
$ cd ~/padloc
シャットダウンして、既存のPadlocコンテナを削除します。
$ docker-compose down --remove-orphans
最新の画像をプルします。
$ docker-compose pull
コンテナを再起動します。
$ docker-compose up -d
これで、RockyLinux8サーバーにPadlocセルフホストパスワードマネージャーをインストールするためのチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。