Z-PushでKopanoのカレンダーを公有していたのだけれど、過去の記事のやり方では「全員から見えるカレンダー」ができていた。
当時としては気を遣ってアクセス権を設定をしていたつもりで、その通りに動いているものと思っていたら、甘かった…。
アクセス権の設定
[接続してきているユーザー+デバイス]に対して、[カレンダー]へのアクセス権を追加する、という考え方。z-push-adminコマンドで管理する。
Kopano Knowledge Base / Tools:z-push-admin
情報収集
接続してきているユーザーとデバイスは、以下で表示ができる。
$ sudo z-push-admin -a list All synchronized devices Device id Synchronized users ----------------------------------------------------- 7SSSSSSSSSSSSSSSSSSSSSSSSS hogechild1 uSSSSSSSSSSSSSSSSSSSSSSSSS hogemother androidcNNNNNNNNN1 hogewife androidcNNNNNNNNN2 hogechild2 androidcNNNNNNNNN hogeuser
※数字をN、文字をSでマスクしている。
カレンダーの情報は、以下で表示ができる。
$ sudo /usr/share/z-push/backend/kopano/listfolders.php -l hogeuser
Available folders in store 'hogeuser':
--------------------------------------------------
Folder name: Suggested Contacts
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX370000000000
Type: SYNC_FOLDER_TYPE_USER_CONTACT
Folder name: Junk E-mail
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX300000000000
Type: SYNC_FOLDER_TYPE_USER_MAIL
Folder name: Tasks
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2f0000000000
Type: SYNC_FOLDER_TYPE_USER_TASK
Folder name: Notes
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2e0000000000
Type: SYNC_FOLDER_TYPE_USER_NOTE
Folder name: Drafts
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2c0000000000
Type: SYNC_FOLDER_TYPE_USER_MAIL
Folder name: Calendar
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000
Type: SYNC_FOLDER_TYPE_USER_APPOINTMENT
Folder name: Contacts
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2a0000000000
Type: SYNC_FOLDER_TYPE_USER_CONTACT
Folder name: Sent Items
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX290000000000
Type: SYNC_FOLDER_TYPE_USER_MAIL
Folder name: Deleted Items
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX280000000000
Type: SYNC_FOLDER_TYPE_USER_MAIL
Folder name: Inbox
Folder ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX260000000000
Type: SYNC_FOLDER_TYPE_USER_MAIL
※16進数部分をXでマスク、同じ値だった。
アクセス権の設定
集めた情報を使って、アクセス権を設定する。
例えば、hogewifeにhogeuserのカレンダーを見せる(HOGEUSERとして見せる)場合は以下。
$ sudo z-push-admin -a addshared -u hogewife -n HOGEUSER -o hogeuser -t calendar -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 -g 1
このパラメーターでは、デバイスを設定していないので、hogewifeが使用しているすべての端末にアクセス権が付けられる。
デバイスを指定して、もっと細かく制御することも可能。
hogeuserのカレンダーが誰から見えているのか確認する場合は以下。
$ sudo z-push-admin -a listshares -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 Displaying opened shares for folderid XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000. Shares of user yoshihiro ------------------------------------------------------------------------------------------------------------------------------------------------- Foldername Folder id Username Device id ------------------------------------------------------------------------------------------------------------------------------------------------- HOGEUSER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 hogechild1 7SSSSSSSSSSSSSSSSSSSSSSSSS HOGEUSER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 hogemother uSSSSSSSSSSSSSSSSSSSSSSSSS HOGEUSER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 hogewife androidcNNNNNNNNN1 HOGEUSER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 hogechild2 androidcNNNNNNNNN2 -------------------------------------------------------------------------------------------------------------------------------------------------
この方法で1つ1つアクセス権を付けていくことになる。
定期的にアクセス権を設定
カレンダーへのアクセス権は、[接続してきているユーザー+デバイス]に付与するので、新しいデバイスを使い始めたら、再度設定をする。
「新しいデバイスを買ったので設定よろしく」→「了解」…設定…「設定終わったよ」→「サンキュー」というやりとりが若干面倒なので、cronで定期実行することにした。
年がら年中「空振り」しているけれども、数年に一度「当たる」コマンド羅列したスクリプトを作成。
/path/to/script/z-push-entry.sh
#!/bin/bash z-push-admin -a addshared -u hogewife -n HOGEUSER -o hogeuser -t calendar -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 -g 1 z-push-admin -a addshared -u hogechild1 -n HOGEUSER -o hogeuser -t calendar -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 -g 1 z-push-admin -a addshared -u hogechild2 -n HOGEUSER -o hogeuser -t calendar -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 -g 1 z-push-admin -a addshared -u hogemother -n HOGEUSER -o hogeuser -t calendar -f XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2b0000000000 -g 1
※実行権を付けておく。
このスクリプトをcronで1時間おきに実行するように設定。
/etc/crontab
59 * * * * root /path/to/script/z-push-entry.sh
※例えば、毎時59分に実行。
これで、新しいデバイスを買ったら、設定してから最大1時間経過すると、カレンダーにアクセスができるようになる。
空振りを知らせるメールが毎時飛んでくることになるが、その対処は別途考えることにした。
その他
空振り処理を実行するとして、ユーザーや端末が多い場合には相応の時間が掛かるはず。
その場合は、一定期間ごとに差分を出して、変化しているところだけに設定を適用するような処理だといいかもしれない。
また、マニュアルには
Many other cases are possible, e.g. periodically remove all devices that have not connected in the last 3 months.
例えば、過去3ヶ月間に接続されなかったすべてのデバイスを定期的に削除する。
※DeepL先生の翻訳
といったことも書かれており、無駄が発生しないように上手く頑張るスクリプトを作れば、効率的な管理ができるようになると思われる。
ワイプするとどうなるか
元々、全員に見える形でスケジュールを共有していたこともあり、アクセス権を追加しようとしても「そのデバイスには既に見せているよ」というメッセージが表示され、エラーになって設定ができなかった。
これをやりたいときには、
- /etc/z-push/z-push.conf.phpで全員に見える形で共有していたカレンダーを削除。
- デバイスを remove して消す。
- デバイス側でアカウント設定 → 何も変更せずに完了させる。
という手順を踏むと、リセットされることは分かった。
とはいえ、遠隔地に住んでいる人に「はい、今から消すので、デバイス側でアカウント設定をやり直してね」→「りょ」→「設定」というのもだいぶ億劫だったので、ワイプしたらどうなるのかを試してみた。
ワイプの実行
以下のコマンドでワイプすることができた。
$ sudo z-push-admin -a wipe -u webmaster Are you sure you want to REMOTE WIPE all devices of user 'webmaster' [y/N]: y Mark devices of user 'webmaster' to be wiped: OK Synchronized devices of user: webmaster ----------------------------------------------------- DeviceId: androidcNNNNNNNNN Device type: Android UserAgent: Android-Mail/2023.07.23.550728859.Release Device Model: HOGEANDROID Device friendly name: HOGEANDROID Device OS: Android 11 ActiveSync version: 14.1 First sync: 2023-08-05 14:44 Last sync: 2023-08-05 19:39 Sync Period: unlimited (0) Total folders: 18 Short folder Ids: Yes Synchronized folders: 7 Synchronized data: Calendars(3) Emails(2) Contacts Tasks Additional Folders: 2 Folder name Store Type Origin Synched ほげ hoge Calendar Configured Active ぴよ piyo Calendar Configured Active Status: Pending wipe WipeRequest on: 2023-08-05 19:40 WipeRequest by: www-data Wiped on: not set Policy name: default Attention needed: No errors known ----------------------------------------------------- DeviceId: aSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Device type: WindowsOutlook UserAgent: Outlook/16.0 (16.0.16626.20086; x64) ActiveSync version: 14.0 First sync: 2023-08-05 18:15 Last sync: 2023-08-05 19:38 Sync Period: unlimited (0) Total folders: 18 Short folder Ids: Yes Synchronized folders: 10 Synchronized data: Calendars(3) Emails(4) Contacts Notes Tasks Additional Folders: 2 Folder name Store Type Origin Synched ほげ hoge Calendar Configured Active ぴよ piyo Calendar Configured Active Status: Pending wipe WipeRequest on: 2023-08-05 19:40 WipeRequest by: www-data Wiped on: not set Policy name: default Kopano Outlook Extension: Version: 2.1.37 Build: cfca54dcb4b196c6530eecad519977d3dc62ed9e Build Date: 2021-04-23 05:20 Capabilities: receiveflags,sendflags,bcc,oof,ooftime,sharedfolders,impersonate,webapp,freebusy,gab,notes,secondarycontacts,sendas,signatures,debugsupport,syncstate,deliveryreceipts Last access: 2023-08-05 Attention needed: No errors known
成功したようだ。
Z-Pushからデバイスにワイプの依頼を出すのだけれども、それがどのような動作をするのかは、デバイス側のソフトウェアに任されているそうだ。
今回試したところでは、以下の通りとなった。
- Android端末では、アカウントが消えた。webmasterと一緒に使っていたhogeuserのアカウントも消えた。
- OutlookのOLExtensionでは、アカウントもメールも残されていたが、同期ができなくなった。
これを遠隔の端末にやったらトラブルになるな、と思った。
ワイプからの復旧
じゃあ、他の方法を考えるか…と、Android端末にアカウント設定して復旧させようとしたところ、以下のメッセージが表示され、アカウントを追加することができなかった。
Can't add account
Gmail's security settings are more secure than those set by your IT admin.
Contact your IT admin for help.アカウントを追加できません
Gmailのセキュリティ設定が、IT管理者が設定したセキュリティよりも強化されています。
IT管理者にお問い合わせください。
情報を探そうにも、日本語では見つからなかったので、端末を英語に切り替えてメッセージを表示させた。
英語のメッセージでは幾つかの情報が見つかったが、Z-Pushに関わるところでは、PHPのバージョンが上がったのに対応するような話だけだった。
だいぶ時間を溶かした後に、本家のマニュアルを見直したところ、そのものズバリの情報が書かれていた。
If a wiped device is to be used with Z-Push again, the device needs to be removed (action remove) from z-push, else it will wipe again.
ワイプされたデバイスを再びZ-Pushで使用する場合は、デバイスをz-pushから削除(アクションremove)する必要があります。
Kopano Knowledge Base / Tools: z-push-admin / Action: wipe
※DeepL先生の翻訳
今回はユーザーwebmasterが扱うデバイスをワイプしたのだから、ユーザー単位の状態を確認してみよう。
# z-push-admin -a list -u webmaster Synchronized devices of user: webmaster ----------------------------------------------------- DeviceId: aSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Device type: WindowsOutlook UserAgent: Outlook/16.0 (16.0.16626.20086; x64) ... Status: Pending wipe ... Attention needed: No errors known ----------------------------------------------------- DeviceId: androidcNNNNNNNNN Device type: Android UserAgent: Android-Mail/2023.07.23.553967039.Release ... Status: Wiped ... Attention needed: No errors known
先程書いた、Outlookは切断、Androidはワイプ、という状態が把握できている。凄いな。
これらのデバイスをいったんリムーブする必要があるということだったから、以下のコマンドを実行。
# z-push-admin -a remove -d androidcNNNNNNNNN # z-push-admin -a remove -d aSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
これでアカウントを再度登録することができるようになった。
さいごに
記事を整理しながら調べていて、Kopanoコミュニティエディションの終了情報を確認。
Statement regarding the closure of the Kopano community forum and the end of the community edition
コミュニティエディションがあまり更新されなくなったと感じてはいたが、2022年11月4日がその発表の日だった。
Zarafa/Kopanoというと…
GoogleがExchangeサービスを有料化、月600円というので、自前で運用できるサーバーを考えはじめ、2013年6月にZarafaを発見して環境を構築。
2017年4月30日にZarafaが終わりを告げ、Kopanoが事業を引き継いだときには、びっくりしたけど凄いな、こういう世界もあるんだなと感じた。この時、ZaradaからKopanoに雑にアップグレードをして、幾つかのデーターを吹き飛ばした。
また、この頃からSSLで運用するためにCAを立てたり、情報を守らねばとクライアント証明書で保護したり、なんてこともした。
Samba ad dcを立てて、ユーザー管理を任せるようにしたのが2019年8月。この時には、データーをちゃんと移行するために、スキーマを追加し、ユーザーの作成とフックの考え方を調べつつ、Zarafa時代のスクリプトに改造を入れたりして、なんとか移行させた。
そして、DockerでKopanoを無理矢理動かすことができるようになったのが2022年7月31日。
それから1年後に本番環境に載せて、ようやく移行完了したところで、コミュニティエディション終了の発表を知ったのだった。
少しずつ理解を深めていって、ようやく基本機能がまともに使えるようになったかなと思っているが、それまでに10年掛かっていた。
この間に一番変わったことはというと、Google先生とDeepL先生の翻訳が物凄く使いやすくなっていることだと思う。
単語を調べながら半分当てずっぽうでやっていくのと比べて、だいぶまっすぐ進めるようになっている。
おかげで、新しいシステムに挑戦しようという気持ちもわいてくるというもの。たとえば、Dockerは本当に便利なんだと分かってきて、動かすことができるシステムも格段に増えてきた。
さてさて、今回の発表にどのように対応するのが良いのだろうか。
Basicな機能しか使っていないので、ライセンスを購入するとして15ユーロ/人年なので、そちらに移行するのがいいかもしれない。
Googleのアカウントを使ってメールのやりとりと、カレンダーの共有をするのでもいいかもしれない。
Nextcloudでもメールやカレンダーが使えるようになっているようだから、それを調べてみるのもいいかもしれない。
選択肢が増えていて、凄い時代になっているなと思う。
どうするにしても、このZarafa/Kopanoの運用で得た経験は大きく、このシステムを提供してくれていることに心から感謝している。
この経験を活かして、安心で使いやすいIT環境を家族に提供して、快適に暮らしていきたい。
そして、会社の業務にもそれ還元して、少しでも生産性が上げられればいいと思うのだった。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他