Ubuntu18.04 に オープンソースのチャットアプリ、Rocket.Chat をインストールしたので、その際のメモ。

 

 

 

Rocket.Chat は、オープンソースのチャットアプリです。

私の所属している会社は、複数の拠点を持っているのですが、打ち合わせや会議等で頻繁に社員を招集するのが大変困難です。

社内には、グループウェア等でコミュニケーションを取れるようにはしているのですが、それよりもレスポンスも早く意思疎通を図りたいときには、チャットのほうが良いかもしれない、と思い導入を検討してみました。

ゴール

  • Ubuntu18.04 LTS を使用。
  • 社内のイントラネット環境での利用を前提としてインストール1
  • ユーザーアカウントのデータは ActiveDirectory から取得したい。
  • ActiveDirectory は Samba4.3 で構築しているドメインコントローラー(DC)。

 

環境

インストールする環境は以下の通り。

  • Rocket.Chat 1.0.2
  • Ubuntu 18.04 LTS
  • Mongodb 4.0.9
  • NodeJS 8.11.4
  • サーバーのホスト名は、rchat.mydomain.org

ちなみに、ActiveDirectory を運用しているサーバーは以下の通り。

  • Ubuntu14.04 LTS
  • Samba 4.3
  • ADドメイン名: SAMDOM.MYDOMAIN.ORG
  • ドメインコントローラー: dc.mydomain.org

 

必要なパッケージのインストール

パッケージ情報更新して、システムを最新の状態にします。

$ sudo apt update
$ sudo apt upgrade

MongoDB のリポジトリを追加し、パッケージをインストールします。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
 echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

Node.JS をインストールします。

$ sudo apt update
$ sudo apt install curl
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -

ビルドツール、MongoDB、Node.JS、graphicksmagick をインストールします。

$ sudo apt install build-essential mongodb-org nodejs graphicsmagick

npm コマンドを利用して、グローバルに inheritsn をインストールします。

$ sudo npm install -g inherits n
/usr/bin/n -> /usr/lib/node_modules/n/bin/n
+ n@4.1.0
+ inherits@2.0.4
added 2 packages from 4 contributors in 1.007s

n コマンドで node.JS のバージョンを指定してインストールします。

$ sudo n 8.11.4
     install : node-v8.11.4
       mkdir : /usr/local/n/versions/node/8.11.4
       fetch : https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.gz
########################################################################################## 100.0%
   installed : v8.11.4

 

Rocket.Chat をインストール

Rocket.Chat の最新版をダウンロードします。

$ curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
$ tar -zxf /tmp/rocket.chat.tgz -C /tmp

Rocket.Chat を /opt/Rocket.Chat にインストールします。

$ cd /tmp/bundle/programs/server
$ npm install
$ sudo mv /tmp/bundle /opt/Rocket.Chat

 

Rocket.Chat サービスを設定

Rocket.Chat のユーザーを作成。

$ sudo useradd -M rocketchat
$ sudo usermod -L rocketchat

/opt/Rocket.Chat のディレクトリのパーミッションを変更します。

$ sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat

Rocket.Chat サービスのファイルを作成します。

$ cat << EOF | sudo tee -a /lib/systemd/system/rocketchat.service
> [Unit]
> Description=The Rocket.Chat server
> After=network.target remote-fs.target nss-lookup.target ngix.target mongod.target
> [Service]
> ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
> StandardOutput=syslog
> StandardError=syslog
> SyslogIdentifier=rocketchat
> User=rocketchat
> Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
> [Install]
> WantedBy=multi-user.target
> EOF

/lib/systemd/system/rocketchat.service ファイルを編集して、ROOT_URL を環境に合わせて変更します。必要に応じて MONGO_URLMONGO_OPLOG_URLPORT も変更します。

$ sudo vi /lib/systemd/system/rocketchat.service

MongoDB のストレージエンジンと、レプリケーション の設定をします。

$ sudo sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
$ sudo sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf

その結果、設定は以下のようになります。

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  engine: mmapv1
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

#security:

#operationProfiling:

replication:
  replSetName: rs01

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

MongoDB の自動起動を有効にします。

$ sudo systemctl enable mongod

MongoDB を起動します。

$ sudo systemctl start mongod

MongoDB のレプリカセットを初期化します。

$ mongo --eval "printjson(rs.initiate())"
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cbfb0d57-bfb5-4a24-9249-7d498b0885af") }
MongoDB server version: 4.0.10
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "127.0.0.1:27017",
        "ok" : 1,
        "operationTime" : Timestamp(1563511139, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1563511139, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Rocket.Chat サービスの自動起動を有効にします。

$ sudo systemctl enable rocketchat

Rocket.Chat サービスを起動します。

$ sudo systemctl start rocketchat

 

ブラウザから接続

サービスを起動したら、早速ブラウザからサービスに接続してみます。

ここでは、仮に http://rchat.mydomain.org:3000/ とします。

Rocket.Chat のインストールが正常に行われていたら、次のような「セットアップウィザード」ページが表示されますので、次の項目を入力して [次へ] をクリックします。

  • 名前(表示名)
  • ユーザー名(ログイン名)
  • パスワード
  • パスワード

 

次に「組織情報」 を入力します。

こちらは実際の環境に合わせて入力してください。

 

次は「サーバー情報」です。

  • サーバーの種類

は、プライベートチームを選択しています。

 

最後に、「サーバーを登録する」 です。これは、デフォルトのままにしています。

 

次のようなページになるので、[ワークスペースを開く] をクリックします。

 

この時、おそらく /lib/systemd/system/rocketchat.serviceROOT_URL の値を http://localhost:3000 のままにしていると、次のような警告が表示されますが、ここはこのまま [はい] をクリックします。

 

次のように 「Home」 のページが表示されればOK。

 

LDAP の設定

次に、ActiveDirectory のユーザーでログイン できるように設定をしてみます。

「Home」 ページのオプションメニューから [管理] をクリックします。

 

すると、「管理」 ページに移動するので、左側の一覧の中から LDAP という項目を探して、クリックします。

 

LDAP の設定を入れていきます。

ホスト は例のように、ドメインコントローラーのホストを指定するか、IPアドレスを指定します。

 

ベースDN は、ユーザーを検索するベースとなるDN(Distinguished Name) を指定します。

この例では、OU=Users,DC=samdom.DC=mydomain,DC=org としていますので、実際の値に置き換えてください。

 

ここまで入力したら、一旦 ページ右上のボタン、[変更を保存] をクリックして、[接続をテスト] をクリックします。

右上に「成功」 と出たらOKです。

 

次に、「認証」 の設定です。ユーザーアカウントのデータを取得するためのユーザーと、そのパスワードを指定します2

 

最後に、「同期とインポート」 に関する設定を行います。

[既定ドメイン] に適当なドメイン名(ここでは、mydomain.org) を指定します。これは、LDAPサーバーからユーザーのメールアドレスを取得できなかった場合に、固有のメールアドレスとしてユーザー名と組み合わせるためのドメイン名として使用されます。

[既存のユーザーをマージする] は、[いいえ] にします。

[ユーザーデータのフィールドマップ] は、例のように入力すると、名前(name)が 姓 名 で表示されるようになります。これは、「ActiveDirectory ユーザーとコンピュータ」(ADUC) のユーザーのプロパティにおける、「姓(sn)」、「名 (givenName)」に対応しています。

もし、「表示名」name に割り当てる場合は、"displayName" : "name" とします。

 

続いて、同期に関する設定です。こちらも必要に応じて設定します。

一通り入力し終えたら、[今すぐ同期を実行する] をクリックすることで、ドメインコントローラーのLDAP サーバーからユーザーの情報が Rocket.Chat 側にインポートされます。

管理」画面の [ユーザー] の項目をクリックすると、ユーザーアカウントのデータがインポートされているのがわかります。

 

ログインできるか試す

では早速、ActiveDirectory のユーザーでログインできるかどうか確認してみます。

管理ユーザーをログアウトするか、もしくは プライバシーモード でブラウザを開きます。

そして、Rocket.Chat のアドレス(例では、http://rchat.mydomain.org:3000)にアクセスします。

 

そして、ユーザー名とパスワードを入力してログインしますが・・

 

このように、「ユーザーが見つからないか、パスワード間違っています」 と出てきてログインできません。

 

なぜログインできないのか

ActiveDirectory の LDAPサーバーから同期させたユーザーでログインを試みようとしても、何故か失敗してログインできません。

もちろん、

  • LDAPサーバーとの接続は確認済み
  • 同期とインポートは、問題なく出来ている(ように見える)。

という状態で、「管理」「ユーザー」 画面でも、個別のユーザーの設定を見ていくと、パスワードらしきものが取り込まれているのがわかるので、同期に失敗しているとも考えられません。

念の為、

  • Samba を Ubuntu18.04 LTS 環境下で、Samba 4.7 で ActiveDirectory を構築

してみたところ、同期の際に、

と、"StrongAuthRequiredError" と出てきてエラーとなります。

そこで、/etc/samba/smb.conf[global] セクションに次のような設定を追加して、Samba を再起動しアクセスしてみたところ、

[global]
    :
    :
    client ldap sasl wrapping = plain
    ldap server require strong auth = no
    :

同期そのものは成功しましたが、やはり上のSamba 4.3 環境下と同様のエラーが出てログインは出来ませんでした。

ちなみに、「管理」「ユーザー」 ページから直接ユーザーのパスワードを変更したところ、ログインに成功 しました3

ただ、この場合は 「同期とインポート」 の設定で、[バックグラウンド同期] を有効にして、[既存のユーザーをマージする][はい]とした場合は、同期が実行されるたびに パスワードが元に戻ってしまう ので注意が必要。

Rocket.Chat のLDAP の設定で、[内部ログレベル][TRACE] としてログを詳細に出力するように設定をしてログを確認してみましたが、ログの上ではLDAPサーバーからユーザーデータの取得には成功しているようにも見えます。

Sambaサーバー側のログも確認してみたけれど、こちらのログだといまいちよくわからない・・

あと考えられるのは Sambaサーバー だから?

だれか、Windows Server な環境であればログインできるのかどうか試してほしいです。。

まとめ

まとめもまとまらない ですが、少なくとも当方の環境上では、ActiveDirectory のユーザーを利用してのログインは、手ぶらでできるというわけにはいかないようです。

ひとまず一旦同期させて、パスワードを手動で設定して・・という運用であれば出来ますが、なんだかちょっと面倒くさいような、逆行していっているような・・

とりあえず、ActiveDirectory との同期に関しては、もう少し調べて見る必要があるかもしれません。


  1. 故にセキュリティは二の次になります。 
  2. ここでは、Administrator を指定していますが、ldap-connect などの専用のユーザーを作成して、それを指定することも出来ます。 
  3. 幸い、Rocket.Chat からパスワードを変更させても、AD側のパスワードは変更されないみたいです。 

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。