「設定 - Cockpit」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

ページの作成:「== 概要 == 基本的なシステム設定から、ストレージ管理、システムの最新状態の維持まで、Cockpitを使用すると、ブラウザベースのWebUIを通じて多数の管理タスクを実行できる。<br> 複数のサーバを管理するための適切な機能を備えた1対1の管理ユーティリティであるが、自動化機能はない。<br> <br> SUSEがコミュニティと協力している活発なアップストリ…」
 
編集の要約なし
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
基本的なシステム設定から、ストレージ管理、システムの最新状態の維持まで、Cockpitを使用すると、ブラウザベースのWebUIを通じて多数の管理タスクを実行できる。<br>
Cockpitは、Linuxサーバを対象としたブラウザベースのWebUIによるシステム管理ツールである。<br>
複数のサーバを管理するための適切な機能を備えた1対1の管理ユーティリティであるが、自動化機能はない。<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>
Cockpitは、Leap MicroとMicroOSにも含まれている。<br>
アーキテクチャは軽量で、systemd socket activationによるオンデマンド起動を採用しており、常時稼働によるリソース消費が少ない。<br>
商用製品であるSUSE Linux Enterprise Microの一部であり、SUSE Linux Enterprise 16にも搭載予定である。<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>
外部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 の主要コンポーネント
コンポーネント 説明
cockpit-ws
  • 9090番ポートでリッスンするWebサービスコアコンポーネントである。
  • ユーザ認証を処理し、ブラウザとバックエンドの通信を仲介する。
  • systemd socket activation (cockpit.socket) により、オンデマンドで起動する。
cockpit-bridge
  • WebインターフェースとシステムAPI間のメッセージリレーヤーである。
  • Webブラウザからのリクエストをシステムコールに変換し、結果をWebUIに返す。
cockpit-tls
  • TLS 終端プロキシであり、暗号化された接続を管理する。
  • HTTPS通信の暗号化・復号を担当し、cockpit-wsへプレーンテキストで中継する。


動作フローは以下の通りである。

  1. Webブラウザが9090番ポートへHTTPS接続する。
  2. cockpit-tlsがTLS終端処理を行う。
  3. cockpit-wsがユーザ認証を処理する。
  4. cockpit-bridgeがシステムAPIへリクエストを中継する。
  5. レスポンスが逆順で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サービスに関する設定項目を示す。

cockpit.confの主要設定パラメータ
パラメータ 説明
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]セクション

下表に、ロギングに関する設定項目を示す。

cockpit.confのログ設定パラメータ
パラメータ 説明
Fatal 致命的エラーとするメッセージタイプを指定する。
デフォルト値は、criticals, warnings である。


[Session]セクション

下表に、セッションに関する設定項目を示す。

cockpit.confのセッション設定パラメータ
パラメータ 説明
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_proxymod_proxy_httpmod_proxy_wstunnelmod_sslmod_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) のみ開放


リモートホストの追加手順

  1. Cockpit UIで[新規ホスト追加]を選択する。
  2. リモートサーバのIPアドレスを入力する。
  3. ログインユーザ名を入力する。



ファイアウォールの設定

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チュートリアル も存在する。