#slack #account #daemon #manager

app sacana

sacana (Slackbot As Computer Account maNAger)はSlack上からコンピューター上のユーザーアカウントを操作するためのSlack botです。

1 stable release

1.0.0 Oct 1, 2020

#437 in Operating systems

MIT/Apache

58KB
1K SLoC

sacana (Slackbot As Computer Account maNAger)

sacanaはSlack上からコンピューター上のユーザーアカウントを操作するためのSlack botです。

研究室やサークル、会社内などの共用コンピューターに導入することで、各団体のSlack上でユーザーアカウントの発行を行うことができるようになります。誰でも自由にアカウントの追加を許されている共用コンピューターの運用に際して、人手による運用コストを削減できるメリットがあります。 Slackにbotを追加するための権限と導入対象のコンピューターの管理権限が必要です。

免責事項

本ソフトウェアはその特性上、セキュリティが重要な環境での導入には慎重な判断を行ってください。 本ソフトウェアの導入や利用によって発生する如何なる問題についても開発元は一切の責任を負いません。 詳しくは、後述の「ライセンス」項をご参照ください。

動作環境

systemdが入ったLinux上での動作を想定しています。 Ubuntu 16.04, Ubuntu 18.04, CentOS 7.2で動作を確認しています。

インストール

  1. Rustをインストールします。
    • 最新のstableの利用を推奨します。
  2. cargo build --releaseでビルドします。
  3. settings.json.sample を参考に settings.json を記述します。
    • SLACK_API_TOKEN : bot用のSlackのAPIトークンを記述してください。
    • channels : 監視するチャンネル名をリストで記述してください。記述されたチャンネル全てを監視します。
    • public_key_uri_format : {} をユーザー名に置換して公開鍵のURIが得られるような文字列を記述してください。
    • host_list_uri : ホストの一覧を得られるURIを記述してください。ここで、一覧は各行にホストの名前を記述したテキストファイルです。
    • certificate_file (オプション) : host_list_uri のアクセス先などのSSL証明書を追加したい場合、証明書のファイル(PEM形式)のパスを記述してください。必要ない場合はこのオプションを記述する必要はありません。
  4. install.sh を実行します。
    • systemdにサービス登録を行うため、root権限が必要です。
    • インストール先を変更したい場合は、 INSTALL_DIR 環境変数にインストール先のパスを指定して install.sh を実行すると変更できます。
  5. 起動すると、設定されたチャンネルに"Hello, this is sacana@xxxx"と応答があるのを確認します(「xxxx」はホスト名)。
  6. (オプション) 動作確認後、 /etc/ssh/sshd_configPasswordAuthentication no を記述します。
    • このbotによって管理されるアカウントは公開鍵認証でログインできるようになるので、パスワード認証はオフにしたほうがセキュリティ上安全です。

使い方

以下ではホスト名が HOSTNAME のコンピューター上で次の settings.json を用いて実行し、Slack上では @computer-account-manager の名前でbotとして追加した場合を例にして、使い方を説明します。

{
  "SLACK_API_TOKEN": "(Botユーザー @computer-account-manager のトークン)",
  "channels": ["computer-account"],
  "public_key_uri_format": "https://github.com/{}.keys",
  "host_list_uri": "https://example.net/host_list.txt"
}

また、 https://example.net/host_list.txt の中身は以下のようになります。

HOSTNAME
HOSTNAME2

新規にアカウントを作る

  1. https://github.com/<自分のID>.keys に公開鍵が登録されていることを確認します。
    • この設定の場合、Githubの自分のアカウントでSSH鍵を登録するとhttps://github.com/<自分のID>.keysから自分の公開鍵を取得できます。
    • ここで、<自分のID> にはSlackの表示名(display name)が入ります。
      • したがってこの設定の場合、Slackの表示名をGithubのアカウント名と同じものにする必要があります。
    • 公開鍵の取得ができればよいため、 public_key_uri_format のURIは必ずしもgitリポジトリのホスティングサービスのものである必要はありません。
  2. #computer-account チャンネルで @computer-account-manager create HOSTNAME と発言します。
    • Slackの表示名でアカウントが作成されるのと同時に public_key_uri_format から取得した公開鍵の登録も行われます。
    • 作成したアカウントのパスワードは空となります。
  3. SSHで公開鍵認証によるログインができるか確認します。
    • ログイン後に passwd コマンドでパスワードを設定しましょう。
    • ログインできない場合下記の鍵の更新を行います。

既存のアカウントの公開鍵を更新する

  1. https://github.com/<自分のID>.keys に公開鍵が登録されていることを確認します。
  2. #computer-account チャンネルで @computer-account-manager update HOSTNAME と発言します。
    • 注意: 既に $HOME/.ssh/authorized_keys が存在する場合上書きされます。
    • 「新規にアカウントを作りたい場合」と同様、自分のSlackの表示名と同じ名前のアカウントの公開鍵を更新します。
  3. SSHでログインできるか確認します。
    • ログインできない場合 https://github.com/<自分のID>.keys に正しい公開鍵が登録されているか確認してください。

グループに参加する

  • グループ GROUPNAME に参加したい場合、 #computer-account チャンネルで @computer-account-manager join GROUPNAME HOSTNAME と発言すると参加できます。
    • 注意: 誰もが sudo グループや wheel グループに参加できてしまうため、管理者権限を利用者全員に付与したくない環境での利用は十分注意してください。

slackbotが動いているか確認する

  • #computer-account チャンネルで @computer-account-manager ping と発言すると起動しているbotからスレッドに pong@HOSTNAME と返信が来ます。

使い方を確認する

  • @computer-account-manager にDMで help と送ることでヘルプを見ることができます。
    • このメッセージを見るためには host_list で最初に書かれたホスト上のbotサービスが正常に稼働している必要があります。

サービスを再起動する

  • root権限で systemctl restart sacana を実行します。

管理対象のコンピューターを追加/削除する

  1. ホスト一覧を更新します。
    • 管理対象を追加したい場合は、一覧に新たなコンピューターのホスト名を追加します。
    • 管理対象を除外したい場合は、一覧から対象コンピューターのホスト名を削除します。
    • この際、ホスト一覧で一番上に書かれたホストが help コマンドなどの応答を行うので、一覧の一番上のホスト名には気をつけてください。
  2. ホスト一覧から削除したコンピューター上でbotのサービスを停止します。
    • root権限で systemctl stop sacana && systemctl disable sacana を実行します。
  3. ホスト一覧に新たに追加したコンピューター上でbotのサービスをインストール・起動します。
  4. 更新後のホスト一覧にあるすべてのコンピューター上でbotのサービスを再起動します。
  5. @computer-account-manager ping コマンドでホスト一覧に記載されているコンピューターすべてで正常にサービスが動作していることを確認します。
    • ホスト一覧から削除したホストから返事があったり、ホスト一覧に記載されているホストから返事がなかった場合はそれぞれの端末について確認してください。

故障かな?と思ったら

コマンドに応答がない

まず、@computer-account-manager pingコマンドでpongが返ってくることを確認してください。

目安として、1分以上経っても目的のコンピューターから応答が返ってこないなら、サービスが起動していない可能性があります。その場合は以下の手順に従ってサービスの再起動を行います。

  1. root権限で systemctl restart sacana を実行します。 再起動によって"Hello, this is sacana@xxxx"と応答があったら、コマンドを再入力してください。
  2. 再起動による応答がなかった場合、syslogでエラーの詳細を確認し、修正してください。
    • 既定だと/var/log/syslog*にあるので、grep sacanaで確認します。
  3. 不明な(修正不可能な)エラーの場合は、issueに報告してください。

コマンドが help の場合 / コマンドが間違っている場合

DMでの help コマンドや、コマンドを間違えた場合の返答はホスト一覧の一番上のホストが行っています。 これらの場合はホスト一覧の一番上のホストについて確認してください。 ホスト自体は正常でもホスト一覧側の記載がタイプミスなどで間違っている可能性もあります。

アカウントが作れない

例えばpublic_key_uri_formatで指定したリンク先がGitHubの場合、Slackの表示名がGitHubのアカウント名と異なるとアカウントを作ることができません。 その場合はSlackのプロフィール設定から表示名を適切なものに設定してください。 また、GitHubに公開鍵が登録されていない場合もログインできません。 その場合はまずGitHubに公開鍵を登録した後、 @computer-account-manager update HOSTNAME でHOSTNAME上のアカウントの公開鍵を更新します。

ライセンス

本プロジェクトは

のデュアルライセンスです。

Dependencies

~10–15MB
~310K SLoC