著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。

序章

Cockpit は、サーバーのステータスをリアルタイムで表示できるサーバー管理ダッシュボードです。 CPU負荷、ファイルシステム統計、プロセス、および詳細情報に関する情報を提供します。 コックピットの利点の1つは、コントロールパネルにログインしていないときにサーバーリソースを消費しないことです。サービスは、コントロールパネルを参照したときにのみ開始されます。

ユーザーの管理やネットワークの問題のトラブルシューティングなど、Cockpitを使用してサーバー管理タスクを実行できます。 コンピュータまたは電話のブラウザから端末にアクセスすることもできます。 コックピットは、システムのユーザーをログインに使用し、システム管理にsudoを使用して特権を昇格させます。 このように、コックピットは、コックピットのみのユーザーの2番目のセットを作成することによって、サーバーにセキュリティ上の考慮事項の追加レイヤーを導入しません。

このチュートリアルでは、安全なコックピットサーバー管理ダッシュボードをDebian10サーバーにデプロイします。

前提条件

このガイドを開始する前に、次のものが必要です。

  • Debian10による初期サーバーセットアップガイドを使用して構成された1台のDebian10サーバー。 ガイドの説明に従って、UFWファイアウォールを設定して有効にする必要があります。
  • コックピットへのアクセスに使用するサーバーを指すドメイン名。 ドメイン名のポインティングに関する情報が必要な場合は、ドメインとDNSガイドを参照してください。 このチュートリアルでは、ドメイン名cockpit.your_domainの例を使用します。 開始する前に、ドメインがサーバーを指している必要があります。

sudo対応の非ルートサーバーとしてサーバーにログインして開始します。

ステップ1—コックピットのインストール

このステップでは、コックピットをインストールし、コックピットがファイアウォールで使用するポートを開きます。

まず、aptを使用してシステムアップデートを実行します。 これにより、サーバーに最新のパッケージが確実に追加され、コックピットのインストール中のエラーが回避されます。

  1. sudo apt update
  2. sudo apt upgrade

次に、コックピットをインストールします。

  1. sudo apt install cockpit

次に、mkdirコマンドを使用してディレクトリを作成します。

  1. sudo mkdir -p /usr/lib/x86_64-linux-gnu/udisks2/modules

-pオプションを使用すると、mkdirが1回の呼び出しで複数のレベルのディレクトリを作成します。

このディレクトリは、無害でありながら気が散る警告がコックピットインスタンスに表示されないようにするために作成しました。 この警告は、udisks2ユーティリティが/usr/lib/x86_64-linux-gnu/udisks2/modulesディレクトリを見つけることができないために表示されます。このディレクトリは、追加のudisks2がインストールされていない限りデフォルトでは作成されません。

最後に、次の手順でSSL証明書を取得するために使用するコックピットのアクセスポート9090とポート80を開きます。

  1. sudo ufw allow 9090
  2. sudo ufw allow 80

これでコックピットがインストールされ、ドメインで署名付きSSL証明書を使用できるようにポートが開かれました。 この証明書は次のステップで取得します。

ステップ2—SSL証明書を取得する

このステップでは、Certbotユーティリティを使用してLet’sEncryptによって発行されたSSL証明書を取得します。 Certbotは証明書を登録してダウンロードし、有効期限が切れると証明書を自動的に更新します。

CertbotはUbuntusnapパッケージとして配布されています。 snapユーティリティはデフォルトではDebian10にインストールされていないため、snapdパッケージの一部としてインストールする必要があります。

  1. sudo apt install snapd

次に、次の2つのコマンドを実行して、最新バージョンのsnapを実行していることを確認します。

  1. sudo snap install core
  2. sudo snap refresh core

次に、次のコマンドを使用してCertbotsnapをインストールします。

  1. sudo snap install --classic certbot

ここでの--classicオプションは、Certbotスナップをクラシックモードでインストールします。これにより、制限が軽減され、Certbotが正しく機能するために必要なシステムのリソースへのアクセスが可能になります。

次に、/usr/bin/certbotからln ユーティリティを使用して、/snap/bin/certbotにスナップインストールされたCertbotバイナリを指すシンボリックリンクを作成します。

  1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

Linux上のすべてのユーティリティが/snap/bin/でプログラムファイルを探す必要があることを認識しているわけではないため、このシンボリックリンクを作成する必要があります。 一方、/usr/bin/は、ユーザーがインストールしたプログラムの標準的な場所です。

注:シンボリックリンクは、ショートカットがWindowsで機能するのと同じように、Linuxで機能します。つまり、場所からファイルへのポインターです。

Certbotユーティリティをインストールしたので、それを使用して、次のコマンドでSSL証明書を登録およびダウンロードします。

  1. sudo certbot certonly --standalone --agree-tos --email your_email -d cockpit.your_domain

次のオプションを使用しました。

  • certonly:システムに他の変更を加えることなく、SSL証明書を登録およびダウンロードします。
  • --standalone:Certbotの組み込みWebサーバーを使用して証明書を登録します。
  • --agree-tos:利用規約(ToS)に自動的に同意します。
  • --email your_email:あなたのメールアドレスを取得して証明書を登録します。 (これは、有効期限の通知とセキュリティ情報にのみ使用されます。)
  • -d cockpit.your_domain:コックピットインスタンスに使用するドメイン名を指定します。

このコマンドを実行すると、Certbotは、重要でない電子メールについて Electronic Frontier Foundation (Certbotユーティリティの開発者)と電子メールアドレスを共有するかどうかを尋ねてきます。 SSL証明書を登録するためにこれに同意する必要はないので、「はい」の場合はYと入力し、続行して証明書を登録するにはN「いいえ」と入力します。

Certbotユーティリティが登録を完了すると、証明書ファイルが/etc/letsencrypt/live/cockpit.your_domainに保存されます。

コックピットには、SSL証明書を使用するためのいくつかの要件があります。

  1. 証明書ファイルには、同じファイルに証明書と秘密鍵が含まれている必要があります。
  2. この証明書とキーファイルは、/etc/cockpit/ws-certs.dディレクトリにあり、.certで終わる必要があります。

そのため、コックピットで使用できるように、登録したSSL証明書を使用して証明書とキーファイルを作成する必要があります。 また、証明書が更新されたときにこのファイルを再作成するようにCertbotを構成する必要があります。

まず、次のコマンドを使用して、証明書とキーファイルを組み合わせて作成します。

  1. sudo bash -c "cat /etc/letsencrypt/live/cockpit.your_domain/fullchain.pem /etc/letsencrypt/live/cockpit.your_domain/privkey.pem >/etc/cockpit/ws-certs.d/cockpit.your_domain.cert"

ここではsudo bash -cを使用します。これがないと、コマンドが失敗するためです。 これは、リダイレクト>が、sudo権限を持つシェルとは異なるシェルで行われるためです。

catコマンドは、証明書とキーファイルの内容を標準出力に出力するため、この内容は>を使用して新しいファイルにリダイレクトされます。

次に、Certbotが実行する更新後のスクリプトを作成します。 このスクリプトは、更新された証明書を使用して証明書とキーファイルを再作成し、コックピットサービスを再起動して使用を開始します。

/etc/cockpit/certificate-renewal.shでテキストエディタを使用してスクリプトを開きます。

  1. sudo nano /etc/cockpit/certificate-renewal.sh

このファイルに次のコードを追加します。

証明書-renewal.sh
#!/usr/bin/env bash

echo "Recreating Cockpit SSL Certificate"
cat /etc/letsencrypt/live/cockpit.your_domain/fullchain.pem /etc/letsencrypt/live/cockpit.your_domain/privkey.pem > /etc/cockpit/ws-certs.d/cockpit.your_domain.cert

echo "Restarting Cockpit"
systemctl restart cockpit.socket

次のように指定しました。

  • #!/usr/bin/env bash:これは shebang であり、スクリプトの実行に使用するプログラムをLinuxに指示します。 この場合、 GNUBashシェルを規定します。
  • echo:このコマンドは、次のメッセージを出力します。 証明書の更新をテストするときにこれを受け取ります。
  • cat:これは、チュートリアルの前半で認定済みのキーファイルを作成するために実行したコマンドと同じです。
  • systemctl restart cockpit.socket:これにより、コックピットが再起動され、新しい証明書が使用されます。

chmod で権限を変更して、この証明書を実行可能にします。

  1. sudo chmod 755 /etc/cockpit/certificate-renewal.sh

Linuxファイルのパーミッションについて不明な点がある場合は、Linuxパーミッションの概要で詳細を参照してください。

次に、/etc/letsencrypt/renewal/cockpit.your_domain.confに行を追加して、SSL証明書を更新するときにこのスクリプトを実行するようにCertbotを構成します。

このファイルをテキストエディタで開きます。

  1. sudo nano /etc/letsencrypt/renewal/cockpit.your_domain.conf

[renewalparams]セクションの最後に次の行を追加します。

cockpit.your_domain.conf
post_hook = /etc/cockpit/certificate-renewal.sh

次に、次のコマンドを使用して、新しい構成が機能していることをテストします。

  1. sudo certbot renew --dry-run

--dry-runオプションは、証明書を変更せずに、証明書の更新を実行するようにCertbotに指示します。 出力の下部に次の行が表示されます。

Output
Running post-hook command: /etc/cockpit/certificate-renewal.sh Output from post-hook command certificate-renewal.sh: Recreating Cockpit SSL Certificate Restarting Cockpit

これは、SSL証明書の更新が発生したときに、更新スクリプトプロセスが正しく機能していることを示しています。

最後に、コックピットを再起動してSSL証明書をロードします。

  1. sudo systemctl restart cockpit.socket

これでコックピットインスタンスが完全に構成され、ログインする準備が整いました。

ステップ3—コックピットへのアクセス

ポート9090でリッスンするようにコックピットインターフェイスを構成したので、ブラウザに入力するURLの最後にこのポートを指定する必要があります。 コックピットインスタンスのURLは次のとおりです。

Cockpit Login URL
https://cockpit.your_domain:9090

コックピットはユーザーの個別のリストを保持しませんが、代わりにシステムのユーザーを使用します。 これらは、adduserコマンドで作成するユーザーです。

初期設定ガイドで作成したユーザーでログインするか、同じ手順で新しいユーザーを作成することができます。

ログインフォームには、特権タスクにパスワードを再利用するというラベルの付いたチェックボックスがあります。

このオプションをチェックすると、ユーザーがsudoアクセス権を持っている限り、コックピット内でsudoを必要とするコマンドを実行できます。

コックピットのインターフェースには、3つの主要な領域があります。 1つ目はリアルタイムのシステム情報ページです。 左側のナビゲーションパネルを見つけてメーターアイコンをクリックして、このページを参照します。

これをクリックすると、サーバーのCPU、メモリ、ネットワーク、およびディスクI/Oを示すリアルタイムのグラフが表示されます。

次のセクションは、詳細情報と管理セクションです。 左側のナビゲーションパネルのサーバーアイコンをクリックして、このセクションに移動します。

コックピットのこのセクションでは、ログやシステムファイルなど、システムのさまざまな側面に関する詳細情報を提供します。 ユーザーの追加と削除、システムのストレージの管理など、サーバーの一部を管理することもできます。 このセクションには、ブラウザのbashターミナルがあります。

ユーザーのコックピット設定を編集するには、インターフェースの上部にあるユーザーアイコンをクリックし、アカウント設定を選択します。 ここで、インターフェースの言語、パスワード、および電子メールアドレスを変更できます。

これで、ブラウザからコックピットインスタンスにアクセスできました。

結論

このチュートリアルでは、コックピットをインストールし、ドメインのSSL証明書を使用して接続を保護しました。 これで、ブラウザを使用して、コマンドプロンプトからリアルタイムのリソース使用状況を表示し、管理し、サーバーにアクセスできます。

公式ドキュメントを使用して、コックピットインスタンスの拡張について詳しく読むことができます。