view Paper/chapter/chatsystem.tex @ 7:f8a7b9b234ce

...
author kiyama <e185758@ie.u-ryukyu.ac.jp>
date Sun, 04 Feb 2024 19:56:15 +0900
parents 61ff8d827f08
children 5d7e6a380735
line wrap: on
line source

\chapter{メッセージングコマンドを使用した手法の提案}
演習科目では学生にシステム管理を体験させる活動を行ってきた.システム管理ではlinuxサーバーにアクセスしてコマンドを使用する.しかし,CLIでの操作に慣れていない学生が多く,稼働しているサーバー対して影響を与えるコマンドを実行することは学生にとって不安を感じさせるものだった.
これらの事からチャットツールであるMattermostを使用したシステム管理手法を提案する.


\section{システム概要}
システムの管理をオープンソースのセルフホスティング式のチャットサービスであるmattermostのスラッシュコマンドを通して実行する.
スラッシュコマンドにはMattermostが提供する組み込みスラッシュコマンドとユーザー自身が作成するカスタムスラッシュコマンドが存在する.
カスタムスラッシュコマンドではメッセージボックス上に /から始まる文字列を入力することで開発者が登録したエンドポイントに対しリクエストを送ることができる.
スラッシュコマンドには空のメッセージボックスに / を入力すると,すべてのスラッシュコマンドのリストが表示される.
カスタムスラッシュコマンドの後ろに空白くぎりで入力した文字列がリクエストボディとしてエンドポイントに送信される.


本手法では学科で管理しているシステムの状態を確認できる機能を提供するHTTPサーバーを立て,それにGET/POSTリクエストを送信することで処理を行う.図\ref{fig:chat-system}に構成図を示す.
学科システムは複数のサーバーから構成されている.それぞれでHTTPサーバーを立てるとサービス毎にリクエスト先を変更しないといけない為,統括して管理するHTTPサーバーを1つ立てる.
そのHTTPサーバーから他の基幹サーバー内で動作しているサービスに対し処理を送り結果をmattermostから確認できる.
HTTPサーバーはgolangのwebフレームワークのechoを使用してコンテナ上に構築した.

\begin{figure}[htpb]
    \begin{center}
        \includegraphics[clip,width=11.0cm]{fig/chatsystem4.png}
    \caption{システム構成図.}
    \label{fig:chat-system}
    \end{center}
\end{figure}

\newpage

実装したスラッシュコマンドは「/syskan」から始まり,空白区切りで特定の文字列を入力することで様々な処理が行われる.
Mattermostのスラッシュコマンドは通常のチャットと違い,実行するとユーザーの入力は表示されず結果のみチャンネルに出力される.
その為,図\ref{fig:syskan-command-exp}に示すように実行ユーザーと実行コマンドを先頭行に表示しその下に実行結果を出力するようにした.

\begin{figure}[htpb]
    \begin{center}
        \includegraphics[clip,width=12.0cm]{fig/syskan-exp-2.png}
    \caption{ユーザーとコマンドが表示される様子.}
    \label{fig:syskan-command-exp}
    \end{center}
\end{figure}

実装したコマンドの一覧は「/syskan help」と入力することで表示される.
コマンドの表示は異なるユーザーが確認として複数回実行すると想定した.その為,メッセージとしてチャンネルに投下するとコマンド一覧でログが埋まり,メッセージを圧迫する恐れがあった.
その為,「/syskan help」を含むコマンド自体の説明や一覧のコマンドは実行したユーザーのみに表示されるようにした.図\ref{fig:helpcommand}にその様子を示す.

\begin{figure}[htpb]
    \begin{center}
        \includegraphics[clip,width=15.0cm]{fig/helpcommand.png}
    \caption{/syskanコマンドの一覧.}
    \label{fig:helpcommand}
    \end{center}
\end{figure}


\section{認証機能の実装}
mattermostはクラウドサーバー上で運用されているが今回実装したHTTPサーバーは基幹サーバー内で運用している.mattermostからHTTPサーバーにアクセスするためにグローバルIPを紐付け公開している.学科サーバーは在学中の生徒と教員のみがアクセス可能でありシステムの情報は秘匿するべきである.
その為外部からのアクセスを制限しmattermostからのみHTTPサーバーへのアクセスを許可した.

本研究で実装したスラッシュコマンドはmattermostのシステム管理チームが管理するワークスペースのチャンネルから実行可能である.mattermostは学科に所属する全ての生徒がログインできシステム管理チームのワークスペースも制限を授けていない為全生徒がスラッシュコマンドの実行が可能である.
しかし,学科のシステム利用者の情報はLDAPを用いて管理されており,サーバー上でシステム管理者として全ての操作を行えるのはsyskan,sudoのユーザー属性が割り振られているアカウントとなっている.
スラッシュコマンドでは一部rootユーザーが実行する処理があることやシステム管理の操作に慣れていない学生には操作ミスやセキュリティの観点から制限をつけるのが適切だと判断した.
その為,システム管理チームとそれ以外の利用者でスラッシュコマンド経由で実行できる操作に制限をかけた.
mattermostはログインの際にgitlab認証を使用しており,gitlabはLDAP情報からログインを行う.
その為mattermostのアカウント名などはLDAPに登録されている情報から作成される.
また,mattermostはスラッシュコマンドを実行する際にコマンド以外に実行したチャンネル情報や実行した操作者の情報をデータをして送信する.データの中にユーザー名がありHTTPサーバーでユーザー名でLDAP認証を行いsudo,syskanのユーザー属性を持つかを確認することによって実行できる操作に制限をかけることができる.

\section{}





% \begin{quote}
%     \begin{itemize}
%         /syskan ceph health \\
%         /syskan ceph status \\ 
%         /syskan ceph help \\
%         /syskan df \{aman, braun, christina, daru\} \\
%         /syskan df help \\
%         /syskan backup podman \\
%         /syskan backup kvm-tpl \\
%         /syskan backup help \\
%         /syskan vm audit \$vm\_name \$vm\_user \$vm\_ip \\
%         /syskan vm key-gen \$vm\_name \$vm\_ip \\
%         /syskan vm list \{aman, braun, christina, daru\} \\
%         /syskan vm help \\
%         /syskan podman ps \{aman, braun, christina, daru\} \\
%         /syskan podman logs \$podman\_name \{aman, braun, christina, daru\} \\
%         /syskan podman inspect \$podman\_name \{aman, braun, christina, daru\} \\
%         /syskan podman help \\
%         /syskan ldap search \$username \\
%         /syskan ldap add sudoers \$username \$minutes \\
%         /syskan ldap delete sudoers \$username \\
%         /syskan ldap help \\
%     \end{itemize}
% \end{quote}

\section{実装結果}
システムの状態を確認するコマンドや演習授業で一時的に権限を付与する為のコマンドを実装した.
授業の中でコマンド操作の指示を出している途中に実行してしまう事例やコマンドのタイプミスが何度か見受けられた.この場合,システムに予期しない変更を与える可能性が考えられる.
今回提案したスラッシュコマンドはシステムの状態を確認する処理がほとんどである事やコマンドを途中で実行してしまっても決められた引数を使用しないと実行されないこと,権限の追加・削除といった処理は認証が必要な事から安心してコマンドを実行できると考えられる.
またスラッシュコマンドで実装したシステム管理ではやり取りが個人で閉じずチャンネル参加者全員に表示される.その為誰が何を実行したかが一目瞭然であり,実験演習のような多人数が参加するシステム管理活動に有効と言える.