「設定 - Cockpit」の版間の差分
ページの作成:「== 概要 == 基本的なシステム設定から、ストレージ管理、システムの最新状態の維持まで、Cockpitを使用すると、ブラウザベースのWebUIを通じて多数の管理タスクを実行できる。<br> 複数のサーバを管理するための適切な機能を備えた1対1の管理ユーティリティであるが、自動化機能はない。<br> <br> SUSEがコミュニティと協力している活発なアップストリ…」 |
編集の要約なし |
||
| (同じ利用者による、間の1版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
Cockpitは、Linuxサーバを対象としたブラウザベースのWebUIによるシステム管理ツールである。<br> | |||
基本的なシステム設定から、ストレージ管理、ネットワーク設定、ユーザ管理、システムの最新状態の維持まで、多数の管理タスクをWebブラウザから実行できる。<br> | |||
<br> | |||
複数のサーバを管理するための機能を備えた管理ユーティリティであるが、自動化機能は持たない。<br> | |||
systemd、journald、NetworkManager、firewalld、storaged (udisks2)、realmd、PAMと統合されており、既存のLinuxシステム管理ツールとシームレスに連携する。<br> | |||
<br> | <br> | ||
SUSEがコミュニティと協力している活発なアップストリームプロジェクトである。<br> | SUSEがコミュニティと協力している活発なアップストリームプロジェクトである。<br> | ||
Cockpitは、Leap MicroとMicroOSにも含まれている。<br> | |||
商用製品であるSUSE Linux Enterprise Microの一部であり、SUSE Linux Enterprise 16にも搭載されている。<br> | |||
<br> | <br> | ||
アーキテクチャは軽量で、systemd socket activationによるオンデマンド起動を採用しており、常時稼働によるリソース消費が少ない。<br> | |||
モジュール式の設計により、必要な機能のみをパッケージとして追加インストールできる。<br> | |||
<br> | <br> | ||
[https://cockpit-project.org/documentation アップストリームが管理するドキュメント]があり、[https://documentation.suse.com/cockpit SUSEもドキュメントを管理]している。<br> | [https://cockpit-project.org/documentation アップストリームが管理するドキュメント]があり、[https://documentation.suse.com/cockpit SUSEもドキュメントを管理]している。<br> | ||
<br> | |||
Webブラウザの対応状況を以下に示す。<br> | |||
* Firefox 82以降 | |||
* Chrome / Edge 88以降 | |||
* Safari 14.5以降 | |||
<br><br> | |||
== アーキテクチャ == | |||
Cockpitは複数のコンポーネントが連携して動作する。<br> | |||
各コンポーネントの役割を理解することで、トラブルシューティングや詳細な設定が容易になる。<br> | |||
<br> | |||
主要コンポーネントを以下に示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ Cockpit の主要コンポーネント | |||
|- | |||
! コンポーネント !! 説明 | |||
|- | |||
| cockpit-ws | |||
| | |||
* 9090番ポートでリッスンするWebサービスコアコンポーネントである。 | |||
* ユーザ認証を処理し、ブラウザとバックエンドの通信を仲介する。 | |||
* systemd socket activation (cockpit.socket) により、オンデマンドで起動する。 | |||
|- | |||
| cockpit-bridge | |||
| | |||
* WebインターフェースとシステムAPI間のメッセージリレーヤーである。 | |||
* Webブラウザからのリクエストをシステムコールに変換し、結果をWebUIに返す。 | |||
|- | |||
| cockpit-tls | |||
| | |||
* TLS 終端プロキシであり、暗号化された接続を管理する。 | |||
* HTTPS通信の暗号化・復号を担当し、cockpit-wsへプレーンテキストで中継する。 | |||
|} | |||
</center> | |||
<br> | |||
動作フローは以下の通りである。<br> | |||
<br> | |||
# Webブラウザが9090番ポートへHTTPS接続する。 | |||
# cockpit-tlsがTLS終端処理を行う。 | |||
# cockpit-wsがユーザ認証を処理する。 | |||
# cockpit-bridgeがシステムAPIへリクエストを中継する。 | |||
# レスポンスが逆順でWebブラウザに返される。 | |||
<br><br> | |||
== 主要モジュール == | |||
Cockpitはモジュール式の設計を採用しており、デフォルトでインストールされるパッケージと追加でインストール可能なパッケージが存在する。<br> | |||
<br> | |||
==== デフォルトパッケージ ==== | |||
下表に、デフォルトでインストールされる主要パッケージを示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ デフォルトパッケージ一覧 | |||
! パッケージ名 !! 説明 | |||
|- | |||
| cockpit-ws || Webサービスコアコンポーネント<br>Webブラウザとの通信を担当する。 | |||
|- | |||
| cockpit-system || システム情報の表示、基本的なシステム監視、サービス管理を提供する。 | |||
|- | |||
| cockpit-networkmanager || ネットワークインターフェース設定、ボンディング、ブリッジ、VLAN設定を提供する。 | |||
|- | |||
| cockpit-storaged || ストレージ設定・監視、ディスク管理、マウント設定を提供する。 | |||
|- | |||
| cockpit-selinux || SELinux例外の表示・管理インターフェースを提供する。 | |||
|- | |||
| cockpit-packagekit || パッケージ管理インターフェースを提供する。 | |||
|} | |||
</center> | |||
<br> | |||
==== 追加パッケージ ==== | |||
必要に応じて追加でインストール可能なパッケージを以下に示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ 追加パッケージ一覧 | |||
! パッケージ名 !! 説明 | |||
|- | |||
| cockpit-podman || Podmanコンテナの管理UIを提供する。 | |||
|- | |||
| cockpit-machines || 仮想マシン (KVM / libvirt) の管理インターフェースを提供する。 | |||
|- | |||
| cockpit-kdump || カーネルクラッシュダンプの設定インターフェースを提供する。 | |||
|- | |||
| cockpit-sosreport || sosreportによるシステム診断・設定情報収集インターフェースを提供する。 | |||
|- | |||
| cockpit-tuned || Tunedによるシステムパフォーマンスプロファイル設定を提供する。 | |||
|- | |||
| cockpit-pcp || Performance Co-Pilot統合による詳細なパフォーマンス分析を提供する。 | |||
|- | |||
| cockpit-session-recording || セッション記録機能を提供する。 | |||
|} | |||
</center> | |||
<br><br> | <br><br> | ||
== | == インストール == | ||
==== RHEL ==== | |||
Cockpitをインストールする。<br> | Cockpitをインストールする。<br> | ||
<br> | |||
sudo dnf install cockpit | |||
<br> | |||
Cockpitを有効化する。<br> | |||
<br> | |||
sudo systemctl enable --now cockpit.socket | |||
<br> | |||
外部PCから操作する場合は、ファイアウォールのポートを開く。<br> | |||
<br> | |||
sudo firewall-cmd --permanent --add-service=cockpit | |||
sudo firewall-cmd --reload | |||
<br> | |||
==== SUSE (SLE 16) の場合 ==== | |||
Cockpitをパターンとしてインストールする。<br> | |||
<br> | |||
sudo zypper install -t pattern cockpit | sudo zypper install -t pattern cockpit | ||
<br> | <br> | ||
Cockpitを有効化する。<br> | Cockpitを有効化する。<br> | ||
<br> | |||
sudo systemctl enable --now cockpit.socket | sudo systemctl enable --now cockpit.socket | ||
<br> | <br> | ||
外部PCから操作する場合は、ファイアウォールのポートを開く。<br> | |||
<br> | |||
sudo firewall-cmd --permanent --zone=public --add-service=cockpit | sudo firewall-cmd --permanent --zone=public --add-service=cockpit | ||
sudo firewall-cmd --reload | sudo firewall-cmd --reload | ||
| 25行目: | 142行目: | ||
== Cockpitの実行 == | == Cockpitの実行 == | ||
Webブラウザを起動して、以下に示すアドレスを入力する。<br> | Webブラウザを起動して、以下に示すアドレスを入力する。<br> | ||
<br> | |||
http://<IPアドレス>:9090 | http://<IPアドレス>:9090 | ||
# または | # または | ||
| 30行目: | 148行目: | ||
<br><br> | <br><br> | ||
== | == 設定ファイル == | ||
Cockpitの設定ファイルは、<u>/etc/cockpit/cockpit.conf</u> ファイルである。<br> | |||
INI形式で記述し、必須ではなく、必要に応じて手動で作成する。<br> | |||
<br> | |||
==== [WebService]セクション ==== | |||
下表に、Webサービスに関する設定項目を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ cockpit.confの主要設定パラメータ | |||
|- | |||
! パラメータ !! 説明 | |||
|- | |||
| Origins || WebSocket 接続を許可するオリジンを指定する。<br>リバースプロキシを使用する場合に設定が必要である。<br><br>例: <u>Origins = https://example.com:443</u> | |||
|- | |||
| ProtocolHeader || リバースプロキシからのプロトコル情報ヘッダを指定する。<br>デフォルト値は、<code>X-Forwarded-Proto</code> である。 | |||
|- | |||
| ForwardedForHeader || クライアントIPアドレス取得ヘッダを指定する。<br>デフォルト値は、<code>X-Forwarded-For</code> である。 | |||
|- | |||
| AllowUnencrypted || 暗号化なしのHTTP接続を許可するかどうかを指定する。(<u>true</u> / <u>false</u>)<br>デフォルト値は、<u>false</u> である。 | |||
|- | |||
| UrlRoot || リバースプロキシ環境でのURL基底パスを指定する。<br><br>例: <u>UrlRoot = /cockpit</u> | |||
|- | |||
| LoginTitle || ログイン画面のブラウザタイトルを指定する。 | |||
|- | |||
| LoginTo || ログイン画面に[リモートホストに接続]オプションを表示するかどうかを指定する。(<u>true</u> / <u>false</u>) | |||
|- | |||
| AllowMultiHost || 複数ホストへの同時接続を許可するかどうかを指定する。(<u>true</u> / <u>false</u>) | |||
|- | |||
| MaxStartups || 同時認証試行数の上限を指定する。<br>デフォルト値は、<u>10</u> である。 | |||
|} | |||
</center> | |||
<br> | |||
==== [Log]セクション ==== | |||
下表に、ロギングに関する設定項目を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ cockpit.confのログ設定パラメータ | |||
|- | |||
! パラメータ !! 説明 | |||
|- | |||
| Fatal || 致命的エラーとするメッセージタイプを指定する。<br>デフォルト値は、<u>criticals, warnings</u> である。 | |||
|} | |||
</center> | |||
<br> | |||
==== [Session]セクション ==== | |||
下表に、セッションに関する設定項目を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ cockpit.confのセッション設定パラメータ | |||
|- | |||
! パラメータ !! 説明 | |||
|- | |||
| IdleTimeout || 非アクティブ時の自動ログアウト時間を分単位で指定する。<br>デフォルトはタイムアウトなしである。 | |||
|- | |||
| Banner || ログイン画面に表示するファイルのパスを指定する。<br><br>例: <u>Banner = /etc/issue</u> | |||
|} | |||
</center> | |||
<br> | |||
==== 設定ファイルの記述例 ==== | |||
<u>/etc/cockpit/cockpit.conf</u> ファイルの記述例を以下に示す。<br> | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
[WebService] | |||
Origins = https://example.com:443 | |||
ProtocolHeader = X-Forwarded-Proto | |||
ForwardedForHeader = X-Forwarded-For | |||
AllowUnencrypted = false | |||
LoginTitle = System Administration | |||
LoginTo = false | |||
MaxStartups = 10 | |||
[Log] | |||
Fatal = criticals, warnings | |||
[Session] | |||
IdleTimeout = 30 | |||
Banner = /etc/issue | |||
</syntaxhighlight> | |||
<br><br> | |||
== SSL/TLS証明書の設定 == | |||
Cockpitの証明書ファイルは、<u>/etc/cockpit/ws-certs.d/</u> ディレクトリに配置する。<br> | |||
<u>.cert</u> ファイルはPEM形式で、サーバ証明書・中間CA証明書・秘密鍵を含む。<br> | |||
<br> | |||
TLS証明書が存在しない場合、<code>sscg</code> または <code>openssl</code> コマンドで自己署名証明書 (<u>0-self-signed.cert</u>) が自動生成される。<br> | |||
<br> | |||
証明書の状態を確認するには、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo /usr/libexec/cockpit-certificate-ensure --check | |||
<br> | |||
==== Let's Encrypt証明書の配置 ==== | |||
Let's Encrypt証明書をCockpit用に配置する場合は、証明書と秘密鍵を結合してファイルを作成する。<br> | |||
<br> | |||
cat /etc/letsencrypt/live/example.com/fullchain.pem \ | |||
/etc/letsencrypt/live/example.com/privkey.pem \ | |||
> /etc/cockpit/ws-certs.d/example.cert | |||
<br> | |||
==== certmongerによる管理 ==== | |||
certmongerを使用して証明書を管理する場合は、以下のコマンドを実行する。<br> | |||
<br> | |||
getcert request -f /etc/cockpit/ws-certs.d/server.cert -k /etc/cockpit/ws-certs.d/server.key | |||
<br><br> | |||
== ポートの変更 == | |||
Cockpitのデフォルトポートは、<code>9090</code> 番ポートである。<br> | |||
ポートを変更するには、systemd socketのオーバーライドファイルを作成する。<br> | |||
<br> | |||
以下のディレクトリとファイルを作成する。<br> | |||
<br> | |||
sudo mkdir -p /etc/systemd/system/cockpit.socket.d | |||
sudo vi /etc/systemd/system/cockpit.socket.d/listen.conf | |||
<br> | |||
設定ファイルに以下の内容を記述する。<br> | |||
<u>9090番ポートを無効化する場合は、最初の <code>ListenStream=</code> の空行でデフォルトポート9090をリセットする必要がある。</u><br> | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
[Socket] | |||
ListenStream= | |||
ListenStream=443 | |||
</syntaxhighlight> | |||
<br> | |||
変更を反映する。<br> | |||
<br> | |||
sudo systemctl daemon-reload | |||
sudo systemctl restart cockpit.socket | |||
<br> | |||
==== SELinux環境でのポート変更 ==== | |||
SELinux環境では、新しいポートにSELinuxコンテキストを付与する追加設定が必要である。<br> | |||
<br> | |||
新しいポート (例: 9999) に対してSELinuxコンテキストを付与する場合は、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo semanage port -a -t websm_port_t -p tcp 9999 | |||
<br> | |||
既存ポート (例: 443) に対してSELinuxコンテキストを変更する場合は、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo semanage port -m -t websm_port_t -p tcp 443 | |||
<br><br> | |||
== リバースプロキシの設定 == | |||
CockpitをNginxやApacheのリバースプロキシ経由で公開する場合は、WebSocket接続の設定が必要である。<br> | |||
また、リバースプロキシの背後に配置する場合、<code>/cockpit/</code> および <code>/cockpit+</code> は予約済みパスのため使用禁止である。<br> | |||
<br> | |||
==== Nginxの設定 ==== | |||
Nginxのリバースプロキシ設定例を以下に示す。<br> | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
server { | |||
listen 443 ssl; | |||
server_name example.com; | |||
ssl_certificate /path/to/cert.pem; | |||
ssl_certificate_key /path/to/key.pem; | |||
location / { | |||
proxy_pass https://localhost:9090; | |||
proxy_http_version 1.1; | |||
proxy_buffering off; | |||
proxy_set_header Upgrade $http_upgrade; | |||
proxy_set_header Connection "upgrade"; | |||
proxy_set_header X-Forwarded-Proto $scheme; | |||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |||
proxy_set_header Host $host; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== Apacheの設定 ==== | |||
Apacheのリバースプロキシ設定例を以下に示す。<br> | |||
<u>mod_proxy</u>、<u>mod_proxy_http</u>、<u>mod_proxy_wstunnel</u>、<u>mod_ssl</u>、<u>mod_rewrite</u> モジュールが必要である。<br> | |||
<br> | |||
<syntaxhighlight lang="apache"> | |||
<VirtualHost *:443> | |||
ServerName example.com | |||
SSLEngine on | |||
SSLCertificateFile /path/to/cert.pem | |||
SSLCertificateKeyFile /path/to/key.pem | |||
ProxyPreserveHost On | |||
ProxyRequests Off | |||
ProxyPass / https://localhost:9090/ nocanon | |||
ProxyPassReverse / https://localhost:9090/ | |||
RequestHeader set X-Forwarded-Proto "https" | |||
RewriteEngine On | |||
RewriteCond %{HTTP:Upgrade} =websocket [NC] | |||
RewriteRule /(.*) wss://localhost:9090/$1 [P,L] | |||
</VirtualHost> | |||
</syntaxhighlight> | |||
<br> | |||
==== cockpit.confの対応設定 ==== | |||
リバースプロキシを使用する場合は、<u>/etc/cockpit/cockpit.conf</u> ファイルに以下の設定を追加する。<br> | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
[WebService] | |||
Origins = https://example.com:443 | |||
ProtocolHeader = X-Forwarded-Proto | |||
ForwardedForHeader = X-Forwarded-For | |||
</syntaxhighlight> | |||
<br><br> | |||
== 認証 == | |||
==== プライマリサーバの認証方法 ==== | |||
Cockpitが動作するサーバへの認証方法を以下に示す。<br> | |||
<br> | |||
* ローカルアカウント | |||
*: システム上のローカルアカウント (ユーザ名・パスワード) でログインする方法である。 | |||
*: PAM認証ポリシー (<u>/etc/pam.d/cockpit</u>) によって制御される。 | |||
*: <br> | |||
* Kerberos / SSO | |||
*: エンタープライズSSO統合による認証方法である。 | |||
*: 有効なKerberosチケットを保持するユーザは自動認証される。 | |||
*: 前提として、サーバがドメインに参加済み (<u>realm join example.com</u>) であり、 | |||
*: <u>/etc/krb5.keytab</u> または <u>/etc/cockpit/krb5.keytab</u> ファイルに有効なホストキーが存在することが必要である。 | |||
*: <br> | |||
* クライアント証明書 / スマートカード | |||
*: PKI認証による方法である。 | |||
*: クライアント証明書またはスマートカードを使用した認証を提供する。 | |||
<br> | |||
==== セカンダリサーバの認証方法 ==== | |||
Cockpit経由でリモートホストにSSH接続する時の認証方法を以下に示す。<br> | |||
<br> | |||
* パスワード認証 | |||
* Kerberos認証 | |||
* 公開鍵認証 (ssh-agent経由) | |||
* ホストキー検証 | |||
<br><br> | |||
== マルチサーバ管理 == | |||
Cockpitは、単一のセッションから複数のリモートホストをSSH経由で管理できる。<br> | |||
リモートホスト側ではCockpitのWebサーバは不要で、最小限のパッケージのみで管理が可能である。<br> | |||
<br> | |||
==== リモートホストの要件 ==== | |||
管理対象のリモートホストに必要な条件を以下に示す。<br> | |||
<br> | |||
* cockpit-systemパッケージのインストール (最小限の必須パッケージ) | |||
* cockpit.socketの有効化は不要 | |||
* TLS証明書の設定は不要 | |||
* SSHポート (デフォルト: 22/tcp) のみ開放 | |||
<br> | |||
==== リモートホストの追加手順 ==== | |||
# Cockpit UIで[新規ホスト追加]を選択する。 | |||
# リモートサーバのIPアドレスを入力する。 | |||
# ログインユーザ名を入力する。 | |||
<br><br> | |||
== ファイアウォールの設定 == | |||
CockpitはfirewalldとUI統合されており、定義済みサービスの表示・追加・削除がWebUIから操作できる。<br> | |||
<br> | |||
==== firewalldによる設定 ==== | |||
Cockpitサービスをfirewalldに登録する場合は、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo firewall-cmd --permanent --add-service=cockpit | |||
sudo firewall-cmd --reload | |||
<br> | |||
==== 手動ポート指定による設定 ==== | |||
サービス名ではなくポート番号を直接指定する場合は、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo firewall-cmd --permanent --add-port=9090/tcp | |||
sudo firewall-cmd --reload | |||
<br><br> | |||
== ルートユーザの使用 == | |||
デフォルトでは、セキュリティ上の理由により、rootユーザを使用することはできない。<br> | |||
もし、WebコンソールでrootユーザとしてリモートPCへ接続する場合は、<u>/etc/cockpit/disallowed-users</u> ファイルを編集してrootログインを許可する。<br> | |||
<br> | |||
sudo vi /etc/cockpit/disallowed-users | |||
<br> | |||
<syntaxhighlight lang="text"> | |||
# /etc/cockpit/disallowed-usersファイル | |||
# 編集前 | |||
root | |||
# 編集後 | |||
#root | |||
</syntaxhighlight> | |||
<br><br> | |||
== ログインシェルの変更 == | |||
ログインシェルを変更している場合、SELinuxのポリシーで <u>cockpit_session_t</u> コンテキストから <u>user_home_t</u> コンテキストのzshの実行が拒否される時がある。<br> | |||
<u>これは、ログインシェルとして使用しているシェルのインストールディレクトリがホームディレクトリに存在、または、適切なSELinuxコンテキストを持っていないためである。</u><br> | |||
<br> | |||
まず、<u>/usr</u> ディレクトリ内にログインシェルをインストールしている場合は、ログインシェルのSELinuxコンテキストを修正する。<br> | |||
その他のディレクトリ内にログインシェルをインストールしている場合は、SELinuxポリシーにルールを追加する。<br> | |||
<br> | |||
==== ログインシェルのSELinuxコンテキストを修正 ==== | |||
まず、ログインシェルのインストールディレクトリを確認する。<br> | |||
<br> | |||
which <ログインシェル 例 : zsh> | |||
<br> | |||
次に、ファイルのSELinuxコンテキストラベルを、システムのデフォルトポリシーに基づいた正しい値に復元する。<br> | |||
また、適切なSELinuxラベル (例 : shell_exec_t) を再設定して、cockpit_sessionから実行可能にする。<br> | |||
<br> | |||
sudo restorecon -v <ログインシェルのインストールディレクトリ 例 : /usr/bin/zsh> | |||
<br> | |||
==== SELinuxポリシーにルールを追加 ==== | |||
まず、カスタムポリシーモジュールを作成する。<br> | |||
<br> | |||
# ログからポリシーを生成 | |||
sudo ausearch -m avc -ts recent | grep cockpit | audit2allow -M cockpit_zsh | |||
<br> | |||
次に、ポリシーモジュールを読み込む。<br> | |||
<br> | |||
sudo semodule -i cockpit_zsh.pp | |||
<br><br> | |||
== セキュリティ == | |||
Cockpitを安全に運用するための推奨される事柄を以下に示す。<br> | |||
<br> | |||
==== 認証とアクセス制御 ==== | |||
* rootユーザでの直接ログインは避け、sudo / polkit経由の権限昇格を推奨する。 | |||
* SSH鍵認証を推奨する。(パスワード認証より安全) | |||
* CockpitはCSPヘッダを送信して、インストール済みコードのみ実行を許可する。 | |||
<br> | |||
==== ネットワークセキュリティ ==== | |||
* 9090番ポートをネットワークに公開する場合は、ファイアウォールでアクセス元を制限する。 | |||
* 自己署名証明書は開発・テスト環境のみに使用して、本番環境ではLet's Encrypt等の正規証明書を使用する。 | |||
<br> | |||
==== ログ監視 ==== | |||
Cockpitのログを監視するには、以下のコマンドを実行する。<br> | |||
<br> | |||
sudo journalctl -u cockpit | |||
<br><br> | |||
== カスタマイズ == | |||
Cockpitのログイン画面やUIのブランディングをカスタマイズできる。<br> | |||
カスタマイズファイルは <u>/usr/share/cockpit/branding/</u> ディレクトリに配置する。<br> | |||
<br> | |||
==== カスタマイズ可能なファイル ==== | |||
<center> | |||
{| class="wikitable" | |||
|+ カスタマイズ可能なファイル | |||
|- | |||
! ファイル !! 説明 | |||
|- | |||
| logo.png || ブランドロゴ画像ファイルである。 | |||
|- | |||
| favicon.ico || ブラウザのファビコンファイルである。 | |||
|- | |||
| branding.css || CSS スタイルファイルである。<br>ログイン画面の背景、ロゴ、ブランドカラー等をカスタマイズできる。 | |||
|} | |||
</center> | |||
<br> | |||
==== CSSカスタマイズ ==== | |||
<u>branding.css</u> ファイルでは、CSS変数 <code>--ct-color-host-accent</code> を使用してシェルパネルのアクセントカラーを制御できる。<br> | |||
<br> | |||
<syntaxhighlight lang="css"> | |||
:root { | |||
--ct-color-host-accent: #0066cc; | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== トラブルシューティング == | |||
下表に、Cockpitに関する主な問題と対処法を示す。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ トラブルシューティング一覧 | |||
! 問題 !! 対処法 | |||
|- | |||
| cockpit.socketが起動しない || <code>systemctl status cockpit.socket</code> でステータスを確認する。<br><code>sudo journalctl -u cockpit</code> で詳細ログを確認する。 | |||
|- | |||
| Permission deniedエラーが発生する || ユーザがcockpitグループに属しているか確認する。<br>PAM設定 (<u>/etc/pam.d/cockpit</u> ファイル) を確認する。 | |||
|- | |||
| SELinuxによるアクセス拒否が発生する || <code>audit2allow</code> コマンドでポリシーを生成する。<br><code>semanage</code> コマンドでポートのSELinuxコンテキストを設定する。 | |||
|- | |||
| TLS証明書エラーが発生する || <u>/etc/cockpit/ws-certs.d/</u> ファイルの証明書ファイルの形式と権限を確認する。<br><code>sudo /usr/libexec/cockpit-certificate-ensure --check</code> を実行する。 | |||
|- | |||
| リバースプロキシ経由で接続できない || <u>cockpit.conf</u> ファイルの <code>Origins</code> 設定を確認する。<br>WebSocketヘッダ (<code>Upgrade</code>, <code>Connection</code>) の設定を確認する。 | |||
|- | |||
| リモートホストに接続できない || SSH接続が疎通しているか確認する。<br>リモートホストにcockpit-systemがインストールされているか確認する。 | |||
|} | |||
</center> | |||
<br><br> | |||
== ソースコードと貢献方法 == | |||
アップストリームのソースコードはGithubでホストされている。<br> | アップストリームのソースコードはGithubでホストされている。<br> | ||
始めるには、[https://cockpit-project.org/external/wiki/Contributing.html Contributing]を参照すること。<br> | 始めるには、[https://cockpit-project.org/external/wiki/Contributing.html Contributing]を参照すること。<br> | ||
| 37行目: | 536行目: | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:SUSE]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]] | ||
2026年2月25日 (水) 06:10時点における最新版
概要
Cockpitは、Linuxサーバを対象としたブラウザベースのWebUIによるシステム管理ツールである。
基本的なシステム設定から、ストレージ管理、ネットワーク設定、ユーザ管理、システムの最新状態の維持まで、多数の管理タスクをWebブラウザから実行できる。
複数のサーバを管理するための機能を備えた管理ユーティリティであるが、自動化機能は持たない。
systemd、journald、NetworkManager、firewalld、storaged (udisks2)、realmd、PAMと統合されており、既存のLinuxシステム管理ツールとシームレスに連携する。
SUSEがコミュニティと協力している活発なアップストリームプロジェクトである。
Cockpitは、Leap MicroとMicroOSにも含まれている。
商用製品であるSUSE Linux Enterprise Microの一部であり、SUSE Linux Enterprise 16にも搭載されている。
アーキテクチャは軽量で、systemd socket activationによるオンデマンド起動を採用しており、常時稼働によるリソース消費が少ない。
モジュール式の設計により、必要な機能のみをパッケージとして追加インストールできる。
アップストリームが管理するドキュメントがあり、SUSEもドキュメントを管理している。
Webブラウザの対応状況を以下に示す。
- Firefox 82以降
- Chrome / Edge 88以降
- Safari 14.5以降
アーキテクチャ
Cockpitは複数のコンポーネントが連携して動作する。
各コンポーネントの役割を理解することで、トラブルシューティングや詳細な設定が容易になる。
主要コンポーネントを以下に示す。
| コンポーネント | 説明 |
|---|---|
| cockpit-ws |
|
| cockpit-bridge |
|
| cockpit-tls |
|
動作フローは以下の通りである。
- Webブラウザが9090番ポートへHTTPS接続する。
- cockpit-tlsがTLS終端処理を行う。
- cockpit-wsがユーザ認証を処理する。
- cockpit-bridgeがシステムAPIへリクエストを中継する。
- レスポンスが逆順でWebブラウザに返される。
主要モジュール
Cockpitはモジュール式の設計を採用しており、デフォルトでインストールされるパッケージと追加でインストール可能なパッケージが存在する。
デフォルトパッケージ
下表に、デフォルトでインストールされる主要パッケージを示す。
| パッケージ名 | 説明 |
|---|---|
| cockpit-ws | Webサービスコアコンポーネント Webブラウザとの通信を担当する。 |
| cockpit-system | システム情報の表示、基本的なシステム監視、サービス管理を提供する。 |
| cockpit-networkmanager | ネットワークインターフェース設定、ボンディング、ブリッジ、VLAN設定を提供する。 |
| cockpit-storaged | ストレージ設定・監視、ディスク管理、マウント設定を提供する。 |
| cockpit-selinux | SELinux例外の表示・管理インターフェースを提供する。 |
| cockpit-packagekit | パッケージ管理インターフェースを提供する。 |
追加パッケージ
必要に応じて追加でインストール可能なパッケージを以下に示す。
| パッケージ名 | 説明 |
|---|---|
| cockpit-podman | Podmanコンテナの管理UIを提供する。 |
| cockpit-machines | 仮想マシン (KVM / libvirt) の管理インターフェースを提供する。 |
| cockpit-kdump | カーネルクラッシュダンプの設定インターフェースを提供する。 |
| cockpit-sosreport | sosreportによるシステム診断・設定情報収集インターフェースを提供する。 |
| cockpit-tuned | Tunedによるシステムパフォーマンスプロファイル設定を提供する。 |
| cockpit-pcp | Performance Co-Pilot統合による詳細なパフォーマンス分析を提供する。 |
| cockpit-session-recording | セッション記録機能を提供する。 |
インストール
RHEL
Cockpitをインストールする。
sudo dnf install cockpit
Cockpitを有効化する。
sudo systemctl enable --now cockpit.socket
外部PCから操作する場合は、ファイアウォールのポートを開く。
sudo firewall-cmd --permanent --add-service=cockpit sudo firewall-cmd --reload
SUSE (SLE 16) の場合
Cockpitをパターンとしてインストールする。
sudo zypper install -t pattern cockpit
Cockpitを有効化する。
sudo systemctl enable --now cockpit.socket
外部PCから操作する場合は、ファイアウォールのポートを開く。
sudo firewall-cmd --permanent --zone=public --add-service=cockpit sudo firewall-cmd --reload
Cockpitの実行
Webブラウザを起動して、以下に示すアドレスを入力する。
http://<IPアドレス>:9090 # または http://localhost:9090
設定ファイル
Cockpitの設定ファイルは、/etc/cockpit/cockpit.conf ファイルである。
INI形式で記述し、必須ではなく、必要に応じて手動で作成する。
[WebService]セクション
下表に、Webサービスに関する設定項目を示す。
| パラメータ | 説明 |
|---|---|
| Origins | WebSocket 接続を許可するオリジンを指定する。 リバースプロキシを使用する場合に設定が必要である。 例: Origins = https://example.com:443 |
| ProtocolHeader | リバースプロキシからのプロトコル情報ヘッダを指定する。 デフォルト値は、 X-Forwarded-Proto である。
|
| ForwardedForHeader | クライアントIPアドレス取得ヘッダを指定する。 デフォルト値は、 X-Forwarded-For である。
|
| AllowUnencrypted | 暗号化なしのHTTP接続を許可するかどうかを指定する。(true / false) デフォルト値は、false である。 |
| UrlRoot | リバースプロキシ環境でのURL基底パスを指定する。 例: UrlRoot = /cockpit |
| LoginTitle | ログイン画面のブラウザタイトルを指定する。 |
| LoginTo | ログイン画面に[リモートホストに接続]オプションを表示するかどうかを指定する。(true / false) |
| AllowMultiHost | 複数ホストへの同時接続を許可するかどうかを指定する。(true / false) |
| MaxStartups | 同時認証試行数の上限を指定する。 デフォルト値は、10 である。 |
[Log]セクション
下表に、ロギングに関する設定項目を示す。
| パラメータ | 説明 |
|---|---|
| Fatal | 致命的エラーとするメッセージタイプを指定する。 デフォルト値は、criticals, warnings である。 |
[Session]セクション
下表に、セッションに関する設定項目を示す。
| パラメータ | 説明 |
|---|---|
| IdleTimeout | 非アクティブ時の自動ログアウト時間を分単位で指定する。 デフォルトはタイムアウトなしである。 |
| Banner | ログイン画面に表示するファイルのパスを指定する。 例: Banner = /etc/issue |
設定ファイルの記述例
/etc/cockpit/cockpit.conf ファイルの記述例を以下に示す。
[WebService]
Origins = https://example.com:443
ProtocolHeader = X-Forwarded-Proto
ForwardedForHeader = X-Forwarded-For
AllowUnencrypted = false
LoginTitle = System Administration
LoginTo = false
MaxStartups = 10
[Log]
Fatal = criticals, warnings
[Session]
IdleTimeout = 30
Banner = /etc/issue
SSL/TLS証明書の設定
Cockpitの証明書ファイルは、/etc/cockpit/ws-certs.d/ ディレクトリに配置する。
.cert ファイルはPEM形式で、サーバ証明書・中間CA証明書・秘密鍵を含む。
TLS証明書が存在しない場合、sscg または openssl コマンドで自己署名証明書 (0-self-signed.cert) が自動生成される。
証明書の状態を確認するには、以下のコマンドを実行する。
sudo /usr/libexec/cockpit-certificate-ensure --check
Let's Encrypt証明書の配置
Let's Encrypt証明書をCockpit用に配置する場合は、証明書と秘密鍵を結合してファイルを作成する。
cat /etc/letsencrypt/live/example.com/fullchain.pem \
/etc/letsencrypt/live/example.com/privkey.pem \
> /etc/cockpit/ws-certs.d/example.cert
certmongerによる管理
certmongerを使用して証明書を管理する場合は、以下のコマンドを実行する。
getcert request -f /etc/cockpit/ws-certs.d/server.cert -k /etc/cockpit/ws-certs.d/server.key
ポートの変更
Cockpitのデフォルトポートは、9090 番ポートである。
ポートを変更するには、systemd socketのオーバーライドファイルを作成する。
以下のディレクトリとファイルを作成する。
sudo mkdir -p /etc/systemd/system/cockpit.socket.d sudo vi /etc/systemd/system/cockpit.socket.d/listen.conf
設定ファイルに以下の内容を記述する。
9090番ポートを無効化する場合は、最初の ListenStream= の空行でデフォルトポート9090をリセットする必要がある。
[Socket]
ListenStream=
ListenStream=443
変更を反映する。
sudo systemctl daemon-reload sudo systemctl restart cockpit.socket
SELinux環境でのポート変更
SELinux環境では、新しいポートにSELinuxコンテキストを付与する追加設定が必要である。
新しいポート (例: 9999) に対してSELinuxコンテキストを付与する場合は、以下のコマンドを実行する。
sudo semanage port -a -t websm_port_t -p tcp 9999
既存ポート (例: 443) に対してSELinuxコンテキストを変更する場合は、以下のコマンドを実行する。
sudo semanage port -m -t websm_port_t -p tcp 443
リバースプロキシの設定
CockpitをNginxやApacheのリバースプロキシ経由で公開する場合は、WebSocket接続の設定が必要である。
また、リバースプロキシの背後に配置する場合、/cockpit/ および /cockpit+ は予約済みパスのため使用禁止である。
Nginxの設定
Nginxのリバースプロキシ設定例を以下に示す。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass https://localhost:9090;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
Apacheの設定
Apacheのリバースプロキシ設定例を以下に示す。
mod_proxy、mod_proxy_http、mod_proxy_wstunnel、mod_ssl、mod_rewrite モジュールが必要である。
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://localhost:9090/ nocanon
ProxyPassReverse / https://localhost:9090/
RequestHeader set X-Forwarded-Proto "https"
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) wss://localhost:9090/$1 [P,L]
</VirtualHost>
cockpit.confの対応設定
リバースプロキシを使用する場合は、/etc/cockpit/cockpit.conf ファイルに以下の設定を追加する。
[WebService]
Origins = https://example.com:443
ProtocolHeader = X-Forwarded-Proto
ForwardedForHeader = X-Forwarded-For
認証
プライマリサーバの認証方法
Cockpitが動作するサーバへの認証方法を以下に示す。
- ローカルアカウント
- システム上のローカルアカウント (ユーザ名・パスワード) でログインする方法である。
- PAM認証ポリシー (/etc/pam.d/cockpit) によって制御される。
- Kerberos / SSO
- エンタープライズSSO統合による認証方法である。
- 有効なKerberosチケットを保持するユーザは自動認証される。
- 前提として、サーバがドメインに参加済み (realm join example.com) であり、
- /etc/krb5.keytab または /etc/cockpit/krb5.keytab ファイルに有効なホストキーが存在することが必要である。
- クライアント証明書 / スマートカード
- PKI認証による方法である。
- クライアント証明書またはスマートカードを使用した認証を提供する。
セカンダリサーバの認証方法
Cockpit経由でリモートホストにSSH接続する時の認証方法を以下に示す。
- パスワード認証
- Kerberos認証
- 公開鍵認証 (ssh-agent経由)
- ホストキー検証
マルチサーバ管理
Cockpitは、単一のセッションから複数のリモートホストをSSH経由で管理できる。
リモートホスト側ではCockpitのWebサーバは不要で、最小限のパッケージのみで管理が可能である。
リモートホストの要件
管理対象のリモートホストに必要な条件を以下に示す。
- cockpit-systemパッケージのインストール (最小限の必須パッケージ)
- cockpit.socketの有効化は不要
- TLS証明書の設定は不要
- SSHポート (デフォルト: 22/tcp) のみ開放
リモートホストの追加手順
- Cockpit UIで[新規ホスト追加]を選択する。
- リモートサーバのIPアドレスを入力する。
- ログインユーザ名を入力する。
ファイアウォールの設定
CockpitはfirewalldとUI統合されており、定義済みサービスの表示・追加・削除がWebUIから操作できる。
firewalldによる設定
Cockpitサービスをfirewalldに登録する場合は、以下のコマンドを実行する。
sudo firewall-cmd --permanent --add-service=cockpit sudo firewall-cmd --reload
手動ポート指定による設定
サービス名ではなくポート番号を直接指定する場合は、以下のコマンドを実行する。
sudo firewall-cmd --permanent --add-port=9090/tcp sudo firewall-cmd --reload
ルートユーザの使用
デフォルトでは、セキュリティ上の理由により、rootユーザを使用することはできない。
もし、WebコンソールでrootユーザとしてリモートPCへ接続する場合は、/etc/cockpit/disallowed-users ファイルを編集してrootログインを許可する。
sudo vi /etc/cockpit/disallowed-users
# /etc/cockpit/disallowed-usersファイル
# 編集前
root
# 編集後
#root
ログインシェルの変更
ログインシェルを変更している場合、SELinuxのポリシーで cockpit_session_t コンテキストから user_home_t コンテキストのzshの実行が拒否される時がある。
これは、ログインシェルとして使用しているシェルのインストールディレクトリがホームディレクトリに存在、または、適切なSELinuxコンテキストを持っていないためである。
まず、/usr ディレクトリ内にログインシェルをインストールしている場合は、ログインシェルのSELinuxコンテキストを修正する。
その他のディレクトリ内にログインシェルをインストールしている場合は、SELinuxポリシーにルールを追加する。
ログインシェルのSELinuxコンテキストを修正
まず、ログインシェルのインストールディレクトリを確認する。
which <ログインシェル 例 : zsh>
次に、ファイルのSELinuxコンテキストラベルを、システムのデフォルトポリシーに基づいた正しい値に復元する。
また、適切なSELinuxラベル (例 : shell_exec_t) を再設定して、cockpit_sessionから実行可能にする。
sudo restorecon -v <ログインシェルのインストールディレクトリ 例 : /usr/bin/zsh>
SELinuxポリシーにルールを追加
まず、カスタムポリシーモジュールを作成する。
# ログからポリシーを生成 sudo ausearch -m avc -ts recent | grep cockpit | audit2allow -M cockpit_zsh
次に、ポリシーモジュールを読み込む。
sudo semodule -i cockpit_zsh.pp
セキュリティ
Cockpitを安全に運用するための推奨される事柄を以下に示す。
認証とアクセス制御
- rootユーザでの直接ログインは避け、sudo / polkit経由の権限昇格を推奨する。
- SSH鍵認証を推奨する。(パスワード認証より安全)
- CockpitはCSPヘッダを送信して、インストール済みコードのみ実行を許可する。
ネットワークセキュリティ
- 9090番ポートをネットワークに公開する場合は、ファイアウォールでアクセス元を制限する。
- 自己署名証明書は開発・テスト環境のみに使用して、本番環境ではLet's Encrypt等の正規証明書を使用する。
ログ監視
Cockpitのログを監視するには、以下のコマンドを実行する。
sudo journalctl -u cockpit
カスタマイズ
Cockpitのログイン画面やUIのブランディングをカスタマイズできる。
カスタマイズファイルは /usr/share/cockpit/branding/ ディレクトリに配置する。
カスタマイズ可能なファイル
| ファイル | 説明 |
|---|---|
| logo.png | ブランドロゴ画像ファイルである。 |
| favicon.ico | ブラウザのファビコンファイルである。 |
| branding.css | CSS スタイルファイルである。 ログイン画面の背景、ロゴ、ブランドカラー等をカスタマイズできる。 |
CSSカスタマイズ
branding.css ファイルでは、CSS変数 --ct-color-host-accent を使用してシェルパネルのアクセントカラーを制御できる。
:root {
--ct-color-host-accent: #0066cc;
}
トラブルシューティング
下表に、Cockpitに関する主な問題と対処法を示す。
| 問題 | 対処法 |
|---|---|
| cockpit.socketが起動しない | systemctl status cockpit.socket でステータスを確認する。sudo journalctl -u cockpit で詳細ログを確認する。
|
| Permission deniedエラーが発生する | ユーザがcockpitグループに属しているか確認する。 PAM設定 (/etc/pam.d/cockpit ファイル) を確認する。 |
| SELinuxによるアクセス拒否が発生する | audit2allow コマンドでポリシーを生成する。semanage コマンドでポートのSELinuxコンテキストを設定する。
|
| TLS証明書エラーが発生する | /etc/cockpit/ws-certs.d/ ファイルの証明書ファイルの形式と権限を確認する。sudo /usr/libexec/cockpit-certificate-ensure --check を実行する。
|
| リバースプロキシ経由で接続できない | cockpit.conf ファイルの Origins 設定を確認する。WebSocketヘッダ ( Upgrade, Connection) の設定を確認する。
|
| リモートホストに接続できない | SSH接続が疎通しているか確認する。 リモートホストにcockpit-systemがインストールされているか確認する。 |
ソースコードと貢献方法
アップストリームのソースコードはGithubでホストされている。
始めるには、Contributingを参照すること。
アプリケーションを開発するのに役立つ Cockpitチュートリアル も存在する。