Red Hat Enterprise Linux 8 の Web Console (Cockpit)

Red Hat Enterprise Linux 8 の Web Console (Cockpit) 森若 和雄 Solution Architect 2019-09 1 このスライドの位置付けと目的 ● ● 対象 ● GUILinuxを管理できると嬉しい人 ● Linuxのデスクトップ環境を持ってないのでXが必要なGUI ツールを使うのは難しい人 目的 ● RHELに同梱されていて各種サーバ管理に利用できるWeb UI を提供するCockpitを紹介 2 概要 ● Web Console (Cockpit)とは? ● Cockpit Packageによる機能拡張 ● Cockpitのセキュリティ 3 Web Console サーバ管理用のWeb UIを提供 4 ● サービス管理 ● アカウント管理 ● ネットワーク管理 ● ファイアウォール管理 ● ストレージ管理 ● ログ閲覧 ● 仮想マシン管理 ● 仮想端末 などの管理機能を提供 https://cockpit-project.org/ Cockpitの特長 ● 独自のDBや設定ファイルなどをほぼ持たない ● ● アクセス制御はPolicyKitにより実施 ● 利用していない時にリソースを事実上消費しない ● プラグイン形式での機能追加が容易 ● 5 dbus、ファイルアクセス、コマンド実行などへのアクセスを 提供するバックエンドとブラウザからアクセスするjavascript APIを基盤とする ● ~/.local/ 以下に配置することで特定ユーザのみ利用可能 Kerberosを利用したSSOに対応 Cockpitのインストール ● パッケージ導入 ● ● ● 証明書設置 ● cp cockpit.cert /etc/cockpit/ws-certs.d/ ファイアウォール設定 ● ● ● ● 6 firewall-cmd --add-port=9090/tcp firewall-cmd --permanent --add-port=9090/tcp 起動設定 ● ● yum install -y cockpit cockpit-dashboard systemctl enable cockpit.socket systemctl start cockpit.socket ブラウザで接続 ● firefox https://rhel8.corp.example.com:9090/ TLS用にCA局発行の 証明書を配置します。 なければ自己署名 証明書が自動生成 されます。 cockpitそのものの 設定をしなくても 動作します リモート管理 ● cockpitはブラウザが直接接続できないシステムも管理できる (cockpitdashboardパッケージが必要) ● cockpit同士でsshによる通信をおこなう ● ● 踏み台サーバからsshによる接続ができればリモートのcockpitと直接通信 できなくても管理できる cockpitへログインしたユーザの権限でssh接続 HTTPS port 9090 踏み台サーバ cockpit-ws SSH port 22 7 管理対象サーバ cockpit-bridge Cockpit Packageによる機能拡張 Cockpitの 基本動作 ● cockpit-wsが待受け ● ブラウザでログイン https://raw.githubusercontent.com/cockpit-project/cockpit/master/doc/cockpit-transport.png ● cockpit-bridgeがユーザ 権限で起動 ● cockpit-bridgeがdbus, pcp, プロセス実行など を行う ● リモートへはsshで 接続 9 Cockpitを拡張するには? ● ● プラグイン(Cockpit Package)による拡張に対応 dbusでのリクエストやコマンド実行、ファイル読み出 し等を行うjavascriptAPIを提供 コマンド実行 cockpit.spawn([“ping”, “8.8.8.8”]) ホスト名取得 proxy = cockpit.dbus(“org.freedesktop.hostname1”).proxy() ファイル内容取得 file = cockpit.file(“/etc/motd”, {}) 10 Cockpit Packageとは? 以下のようなファイル群を配置することでCockpit内で利用する 画面を作成する。 /usr/share/cockpit/ hoge/ パッケージ用ディレクトリ manifest.json メニュー内の場所、 ラベルや関連ファイルなどを指定 hoge.html 表示するhtml hoge.js 操作を実装するjavascript 11 Cockpit Packageの配置場所 ● ファイルを配置する場所が3箇所あり、オーバーライドできる 1. /usr/share/cockpit/* (rpm用、システム全体用) 2. /usr/local/share/cockpit/* (システム全体用) 3. ~/.local/share/cockpit/* (特定ユーザ用) ● ● cockpit-bridge --packages コマンドで(実行したユーザにとって の) Cockpit Package一覧を表示 manifest.jsonで同じ名前を宣言した場合、manifest.json内の priorityの値が大きい方が優先される 12 個人用にCockpit Packageを作ってみる ● ● ● ● インストール先ディレクトリ作成 ● mkdir -p ~/.local/share/cockpit/ cockpitのソースコードを取得 ● git clone https://github.com/cockpit-project/cockpit.git シンボリックリンク作成 ● cd cockpit/examples/ ● ln -s ${PWD}/pinger ~/.local/share/cockpit/ ブラウザでcockpitへ接続(または再ログイン) ● メニュー上の“Pinger”メニューでpingコマンド実行 13 14 Cockpit Packageの 参考文献 ● cockpit projectのTutorialカテゴリ ● ● cockpitプロジェクトのソースコード ● ● ● https://cockpit-project.org/blog/category/tutorial.html https://github.com/cockpit-project/cockpit/ 本格的なpluginのひな型 “Starter Kit” ● rpmパッケージ化、テストケース実行, 一般公開に対応 ● https://github.com/cockpit-project/starter-kit Cockpitドキュメント内 “Developer Guide” ● https://cockpit-project.org/guide/latest/development.html 15 Cockpitのセキュリティ よくある(?)「Webコンソール」のイメージ(偏見) ● root権限で 何でもできる プロセス httpd UI 権限 管理 外部プロセス ● 外部プロセス ● 17 「root権限で何でも できるプロセス」 ● ファイル DB 外部コマンド実行や ファイル変更をroot 権限で実施 複雑になり、バグ が深刻な問題につ ながる 独自の権限管理設定 やDBが必要 cockpitは? cockpit-session root権限で動作 ログイン処理 認証情報 pam GSSAPI 生成 UI cockpit-ws ログインと 接続 cockpit-bridge OSの ユーザ権限で 権限管理 リクエスト 何でもやる 18 ● ログインしたユーザの権限で実施 ● root権限利用はセッション開始時のみ ● OSの権限管理をそのまま使う 外部プロセス 外部プロセス ファイル cockpit-session ログイン時の動作 1. cockpit-wsがログイン 画面を表示 認証情報 cockpit-ws ログインと 接続 3. cockpit-sessionを実行 4. PAMで認証 5. 認証ユーザでcockpit-bridgeを実行 6. 以下チェックのある場合pkexecで root権限のcockpit-bridgeを起動 19 root権限で動作 ログイン処理 生成 2. 認証情報を送付 • ID+Password • GSSAPI リクエス ト pam GSSAPI cockpit-bridge 成 生 cockpit-bridge --privilege ユーザの 権限で 何でもやる デフォルトではwheelグループの ユーザのみ成功 rootユーザの 権限で 何でもやる ログイン後 cockpit-session セッション管理 だけ UI ● ● cockpit-ws cockpit-bridge ログインと 接続 ユーザの 権限で 何でもやる OSの 権限管理 外部プロセス 外部プロセス ファイル ブラウザ上のjavascriptとcockpit-bridge(およびcockpit-bridge --privilege)が通信 cockpit-bridge本体と、packageと呼ばれるプラグインdbus, REST API, プロセス 実行など各種の操作を実施。通常のユーザ権限管理をそのまま利用。 20 Cockpitに関連したセキュリティ上の注意点 ● SELinuxのポリシーも準備されているのでできれば使う ● ● ● 自己署名証明書の利用はお勧めしません ● ブラウザとcockpit-ws間の通信路が信頼できてはじめて安全な仕組み ● 後述のIdentity Managementとの統合で証明書の自動発行が可能 特権取得にPolicyKitを利用している ● ● 21 enforcingで使うことでcockpit-wsやcockpit-sessionに未知の脆弱性があっ た場合にも任意プロセス実行などを予防する systemdでも利用するがサーバ管理時に気にしないケースが多いので注意 一部操作を制限したい場合は /etc/polkit-1/rules.d/*.rules でポリシー定義 をおこなう。ポリシー制限の粒度はサービスによる。 Identity Managementとの統合 ● RHEL同梱のRed Hat Identity Managementと統合されています ● IdMが管理するドメインにサーバが参加していれば以下が可能 ● Web Consoleのリモート管理で利用するssh接続をシングルサ インオン(SSO)で処理 ● Web Consoleで利用するサーバ証明書を自動発行し自己署名 証明書の利用なし 22 まとめ ● ● RHELの管理を簡単にするWeb Consoleは、簡単に利用 できるだけでなくセキュリティにも配慮して開発され ています ● ログイン時に最小の特権だけを利用 ● 特権を利用する範囲についてSELinuxで制限が可能 ● 実績があるPolicyKitなど枯れた技術を活用 Identity Managementと統合されています 23 Cockpitのセキュリティ 参考文献 ● RHEL8ドキュメント「Web コンソールを使用したシステムの管理」 ● https://bit.ly/rhel8-webconsole-ja ● Cockpitプロジェクトblog「Is Cockpit Secure?」 ● https://cockpit-project.org/blog/is-cockpit-secure.html ● Cockpitプロジェクトドキュメント「Single Sign On」 ● https://cockpit-project.org/guide/latest/sso.html 24 Thank You 25