Quantcast
Channel: ろっひー
Viewing all 77 articles
Browse latest View live

Alfresco に Web Quick Start を追加

$
0
0

最初のインストールで必要ないかなーと思ってしまったのだ。しかし、Alfrescoに初めてアクセスするときにはかなり待たされる、それが仮に再起動したから2日経ってからでも…

そうだ、Web Quick Startを追加しよう。


Alfresco Community Editionの過去バージョンは、本家ではダウンロードできなくて(?多分)、sourcefogeにあった。
https://sourceforge.net/projects/alfresco/files/

ここから、ウチでインストールしたであろうバージョンを探ると…201704バージョン。更にその中の alfresco-wcmqs-5.2.e.zip がどうやらそれだ。
100MBもある。ずいぶん大きいな。

取り出したampsファイルをそれぞれ以下に配置。

$ sudo mv alfresco-wcmqs.amp /usr/share/alfresco/amps
$ sudo chown root:root /usr/share/alfresco/amps/alfresco-wcmqs.amp
$ sudo mv alfresco-wcmqs-share.amp /usr/share/alfresco/amps_share/
$ sudo chown root:root /usr/share/alfresco/amps_share/alfresco-wcmqs-share.amp


そして、ampファイルを念のため試す。
$ cd /usr/share/alfresco
$ sudo java -jar bin/alfresco-mmt.jar install amps/alfresco-wcmqs.amp tomcat/webapps/alfresco.war -preview
Installing AMP 'amps/alfresco-wcmqs.amp' into WAR 'tomcat/webapps/alfresco.war'
INFO: Checking the war version using /WEB-INF/classes/alfresco/version.properties
Adding files relating to version '5.2.e' of module 'org_alfresco_module_wcmquickstart'
- File '/WEB-INF/lib/alfresco-wcmqs-5.2.e.jar' added to war from amp



- Directory '/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module/wcmquickstart' added to war
- Directory '/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module' added to war
- Directory '/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/cmis' added to war


問題なさそう。

一旦Alfrescoを停止してampを組み込む。
$ sudo service alfresco stop
$ sudo /usr/share/alfresco/bin/apply_amps.sh


これで何かキーを押して処理を進めればインストールされる。

サービスを開始して、CPUがおとなしくなるのを待って…
すぐに画面が表示された!


ESXi 6.5 ハードディスク換装

$
0
0

うちのサーバーは中古で購入したPC、そのハードディスクをそのまま使っていたのだが、なんとなく心配。
ハードディスクを買えて、容量も増量して使いやすくしようと思った。



購入前後のHDDの違い。
型番(WD5000AAKS-0→WD40EZRZ-22G)、容量(500GB→4TB)だけ、さぁ、まるっとコピーしよう。

20時にサービスの停止をメールで宣言、22時にサーバー停止、HDDを外してコピー開始。おそらく3~4時間でコピーは完了しており、朝早めに起きたときにはコピーが終わっていたので繋いで起動してみた。

・・・・・・・・・・・動かねぇ orz

ESXiは起動するけれどもdatastore1を認識しない。

調査→朝食→調査→昼食→調査…

きっと何処かにdatastore1を認識するための設定があるはずだが、探しても探しても見つからない。分かる人、ぜひ教えてください。



年末の大掃除ができないので、これは困る。ということで、やり直し。
  • 新しいHDDにESXiをインストール。IPアドレスとホスト名を設定して再起動。
  • 再起動後、Web UI に接続できるのを確認したらシャットダウン
  • SATAに古いHDDを追加接続。ウチの場合はSATAが2つしかないみたいなので、DVDドライブを外してHDDを接続して起動。
  • 新しいHDDにてシステムを起動後、新しいシステムのdatastore1を削除し、datastoreX(datastore1以外の名前で)を作成。その際、VMFS6を選択。早いらしいので。
  • 古いHDDにあるdatastore1の内容をdatastorexにコピー。時間は掛かる、だが、ここでSATAに直接繋いだ効果がでて転送速度は早い。
  • datastore1の内容を全てコピーしたらシャットダウン、古いHDDを外す。
  • 新しいHDDにてシステムを起動し、データストアにある仮想マシンを登録する。ストレージに「仮想マシンを登録」ボタンがあるので、そこから。
  • 仮想マシンを起動して動作を確認する。起動時に「コピーしたの?移動したの?」と聞かれるので、移動したと回答。


以上で問題なくサービスを再開できた。




細かいところで言うと、以下も幾つか設定。
  • ESXiの証明書署名要求を作り、その証明書に署名して登録。これにより、保護された通信ができるようになる。
  • ハードディスク容量を増量。その後に、GPartedでパーティションサイズを増やす。


ようやく目的を達成。
datastore1の中身をコピーしている間に掃除も少しだけやって、hogewifeの激おこも回避!




えぇ、本当はRAIDを組んで故障したHDDを換装していくのが正しいのでしょう。そういう使い方が本来であって、色々とGoogleを探してみるとその方法があったりしたけど、単なる換装に関するものはなかなか見つからなくて、色々と思いつきでやってみるしかなかった。

自宅にサーバーラックは立てられないし、RAIDもそんなに高いもんじゃないんだけど、余ったPCで便利なシステムを構築して使うという自分なりの思いから外れてしまうんだよなー。と考えながら上の方法にたどり着いた。

本当に安全性を考えるならIaaSやSaaSを借りたほうが簡単。費用に関しても電気代やHDD換装費用なんかを考えるとそっちの方が安い?バックアップも考えなくていいし…。今後はそちらも考えてみるかー。



おまけ。HDDのS.M.A.R.T.情報を取ることができる。
これは、VMWareに書かれていて、ESXiにコンソールでログインし、デバイスの名前を調べ、その名前で問い合わせる。

[root@ESXi:~] esxcli storage core device list
t10.ATA_____WDC_WD40EZRZ2D22GXCB0_________________________WD2DWCC7K3SY0PVK
Display Name: Local ATA Disk (t10.ATA_____WDC_WD40EZRZ2D22GXCB0_________________________WD2DWCC7K3SY0PVK)
Has Settable Display Name: true



t10.ATA_____WDC_WD5000AAKS2D00UU3A0_______________________WD2DWCAYU7978139



[root@esxi:~] esxcli storage core device smart get -d t10.ATA_____WDC_WD5000AAKS2D00UU3A0_______________________WD2DWCAY
U7978139
Parameter Value Threshold Worst
---------------------------- ----- --------- -----
Health Status OK N/A N/A
Media Wearout Indicator N/A N/A N/A
Write Error Count 0 0 N/A
Read Error Count 0 51 N/A
Power-on Hours 51 0 51
Power Cycle Count 216 0 N/A
Reallocated Sector Count 0 140 N/A
Raw Read Error Rate 0 51 N/A
Drive Temperature 26 0 N/A
Driver Rated Max Temperature N/A N/A N/A
Write Sectors TOT Count N/A N/A N/A
Read Sectors TOT Count N/A N/A N/A
Initial Bad Block Count N/A N/A N/A

[root@esxi:~] esxcli storage core device smart get -d t10.ATA_____WDC_WD40EZRZ2D22GXCB0_________________________WD2DWCC7
K3SY0PVK
Parameter Value Threshold Worst
---------------------------- ----- --------- -----
Health Status OK N/A N/A
Media Wearout Indicator N/A N/A N/A
Write Error Count 0 0 N/A
Read Error Count 0 51 N/A
Power-on Hours 7 0 N/A
Power Cycle Count 6 0 N/A
Reallocated Sector Count 0 140 N/A
Raw Read Error Rate 0 51 N/A
Drive Temperature 25 0 N/A
Driver Rated Max Temperature N/A N/A N/A
Write Sectors TOT Count N/A N/A N/A
Read Sectors TOT Count N/A N/A N/A
Initial Bad Block Count N/A N/A N/A


これで危なくなってきたら、それは感覚ではなく本当に危ないと言える。
古いと思っていたHDD、実は大丈夫だったみたいだけど気づかなかったことにしよう。

Ubuntu14 WiFi設定が何故か壊れてホスト名の解決ができなくなった

$
0
0

ESXiのHDD換装でガチャガチャしている真っ最中に、こたつで操作用のノートPCに異変が…WiFiの設定が何故か壊れてしまった。HDD異常を疑ったけれども、GSmartControlによれば特に問題なし。原因は良くわからないけど、近所にあるWiFi信号がすごいことになってるから?ということで設定を作り直してみたところ、ホスト名による名前解決ができなくなった。




具体的には、
pc.hogeserver.hogeddns.jp
であればpcの名前解決ができるが、
pc
では名前解決ができなくなった。

Windowsでは名前解決に問題なし、運用中のBIND9は動作しているようだ…

ということで、ネットワーク設定を見直してみた。

■全般タブ
・この接続が利用可能になったときは自動的に接続する←チェック
・全ユーザーがこのネットワークに接続可能とする←チェック
※VPNには接続しない。

■Wi-Fiタブ
・SSID←接続したいネットワークのIDを入力
・モード←インフラストラクチャ
・BSSID←空欄
・デバイスのMACアドレス←WiFiのMACを設定
・クローンしたMACアドレス←空欄
・MTU←自動

■Wi-Fi セキュリティタブ
・セキュリティ←WPA & WPA2 Personal を使っているのでこれを設定
・パスワード←WPA2のパスワードを設定

■IPv4タブ
・方式←自動(DHCP)を選択、うちの根幹設定!
・追加のDNSサーバー←空欄
・追加の検索ドメイン←hogeserver.hogeddns.jp ★今回の問題解決はコレ
・DHCPクライアントID←空欄
※IPv4アドレス化が必要にはしていない。

■IPv6タブ
・方式←無視するを設定




あとから考えればコレしかない、という設定なわけですが、なかなか思いつかなくて色々と変な設定をしてしまった…戻さなきゃ…。

OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)

$
0
0

ダウンロードして red5.sh を起動するだけで使える強力なWeb会議システム。今まで3.05とかを使っていたのだが、4.0.1が出たようなのでバージョンアップして使いたい。

まずは、まっさらさらなシステムを作ってみて、本番環境の移行を考える。




当初、もっと簡単に移行できるものと思っていたのだが、大きな課題にぶち当たった。これは、Google ChromeはSSLなしの通信(HTTP)では、マイクとカメラを使わせないように仕様変更したことによる。ChromeでOpenmeetingsを利用するためにはSSL通信(HTTPS)が必要になるのだ。
※安全性のためにサービス提供側にプレッシャーを掛けているという記事を見かけた。シェアが大きいからできることなんでしょう…。

また、Openmeetingsもバージョンアップして変わってきている。これにも対応する必要がある。

さらに、利用できるポートを80と443に絞る、つまり、RTMPとRTMPSはトンネリングさせたい。これは、利用可能ポートを制限されたネットワークで利用することを想定しているため。

これらの条件をあわせて試してみると…

  • Version 3.0.5~3.2.1近辺は、ApacheのProxy設定でSSL通信ができる。
  • Version 3.3.0以降はCSRF対応でApacheのProxy設定だけではSSL通信ができない。OpenmeetingsをSSLで動作させる必要があり、これに伴って画面共有を利用するクライアントはJavaのキーストアにCA証明書の登録が必要。


といった具合になる。

Version 3.3.0以降でもApacheに詳しい人ならApache設定だけでどうにかできるかもしれない。探してもどうにも見つからなかったので、分かる方がいたらぜひ教えてください、お願いします。

これらをチクチク書いていたら記事が長くなりすぎてしまい制限が…。4部作とする。
OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)
OpenmeetingsをSSLで動作させる設定(3.3.0以降)
OpenmeetingsをそれでもProxyで動作させる(危険)
Openmeetingsのアップグレード & ChromiumとFlash


※この記事では、各種のライブラリの準備には触れない。




■インストール開始

インストールは4.0.1ベースで記載するが、3.0.5から4.0.1まで設定項目はほとんど変わらない。
モジュールをダウンロードし、/usr/share/openmeetings (以降 $red5 と記載)に展開して起動、
$ sudo ./red5.sh



################################################################################
# Openmeetings is up #
# 4.0.1 3795f14 2017-12-05T16:44:03Z #
# and ready to use #
################################################################################





が表示されたら、http://hogeserver.hogeddns.jp:5080/openmeetings にアクセスするとセットアップが始まる。

※接続可能なポートが絞られていて、外部から5080ポートでアクセスできない場合には、事前にApacheでProxy設定しておく必要がある。

インストール先はどこでもかまわないが、他のシステムに習って/usr/share配下にしてみた。




■Openmeetings (はじめに的な画面)

Enabling import of PDFs into whiteboard

Install GhostScript on the server, you can get more information on http://pages.cs.wisc.edu/~ghost/ regarding installation. The instructions for installation can be found there, however on most linux systems you can get it via your favorite package managers (apt-get it).


と表示された。今は考えない。次へ。

■DB configuration

ここで、現行システムに入っている MySQL を選択しCheckボタンを押したところ、以下が表示された。
Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: MySQL


で、MySQLのところにリンクがあって、ここをクリックすると情報が。

  • MySQLのデフォルトキャラクターセットがUTF8であることを確認しておくこと。
  • MySQLがListen状態にあること。
  • Openmeetingsが利用する空のデータベースを作成しておくこと(中身はインストール時に作られる)。
  • もし、問題が発生したらデータベースを空にしてインストールを再実行して欲しいこと。
  • JConnectorをココから落としてきて、
    $red5/webapps/openmeetings/WEB-INF/lib/
    に入れた上で、もう一度インストールを実行してみて欲しいこと。


という話。

一旦、red5.shを止めてコネクタをダウンロードし、そのコネクターを配置して、再度red5.shを実行、ブラウザからアクセスする。

そして、MySQLにデータベースとユーザーを作る。
$ mysql -u root -p
Enter password:[MySQLのrootのパスワード][Enter]

mysql> create database openmeetings default character set 'utf8';
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on openmeetings.* to 'openmeetings'@'localhost' identified by 'openmeetingsユーザーのパスワード' with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> quit
Bye


という具合。

改めて以下の設定。
  • Choose DB type → MySQL
  • Specify DB host → localhost
  • Specify DB Port → 3306
  • Specify the name of the database → openmeetings
  • Specify DB user → openmeetings
  • Specify DB password → openmeetingsユーザーのパスワード


Checkボタンを押してOK!

ちなみに、データベースを初期化してまっさらにするには以下を実行。
$ mysql -u root -p
mysql> drop database openmeetings;
mysql> create database openmeetings default character set 'utf8';


データベースを削除して作り直しているだけですが…。



■Userdata

最初のユーザーを決める。
  • Username → hogeuser
  • Userpass → hogeuserのパスワード
  • EMail → hogeuserのメールアドレス
  • User Time Zone → Japan


■Group(Domains)

Openmeetings内のグループ分けに使う。後から変えられるのでなんでもいい。
  • Name → Family




■Configuration

基本的な動作設定。

  • Allow self-registering → ユーザーは管理者が登録するのでOFF
  • Send Email to new register Users → これも同様でOFF
  • New Users need to verify their EMail → ココまでOFFなので不要、OFF
  • Default DB objects of all types will be created → そうしてもらうON
  • Mail-Refer → webmaster@hogeserver.hogeddns.jp
  • SMTP-Server → hogeserver.hogeddns.jp
  • SMTP-Port → 25
  • SMTP-Username → hogeuser
  • SMTP-Userpass → SMTP上のhogeuserのパスワード
  • Enable TLS in Mail Server Auth → OFF
  • Set inviter's email address as ReplyTo in email invitations → ON
  • Default Language → 日本語


SMTP設定は結構重要。メールを飛ばして会議に参加してもらうことも多いので、ちゃんとメールが飛ばせるようにすることはとっても大事。



■Converters

これが冒頭の「難しいことを考えなければ」の話で、ちゃんと揃えようと思うと結構大変な気がする。とりあえず、後からでも設定が可能なはずなので何も設定せずに進めておく。

今回は、既にこれらの設定が終わっているシステムでOpenmeetingsをバージョンアップさせたいのだ!

  • Document conversion DPI → 150(画面で見る分には問題ないかな)
  • Document conversion JPEG Quality → 90(これもこんなもんかなと)
  • ImageMagic Path → 空欄
  • FFMPEG Path → 空欄
  • SoX Path → 空欄
  • OpenOffice/LibreOffice Path for jodconverter → 空欄




■Crypt Type

よくわからない。デフォルトのまま。

■red5SIP Configuration

今のところSIPを利用する予定はないので、OFF。



最後に「Finish」ボタンを押したら、インストール開始。と書かれているので、ボタンをクリックする。
モノの数秒で設定完了。

Enter the Application からアプリケーションにログインする。

ログインしたら英語表示になるのは相変わらず変わらない。初期ユーザーの言語にデフォルトランゲージが反映されないのはそのままの模様。



ところで、会社ネットワークでポートが塞がれている場合に、5080ポートを80や443に変更したい、というニーズがあるかもしれない。実際、自分がそうだったりするわけだが、その場合は以下のApache設定とOpenmeetingsの設定で行けそう。443も3.3.0以前の古いバージョンなら行ける。

■Openmeetings 3.0.5~3.1.5 近辺

Apache: openmeetings.conf
#
# Apache Openmeetings
#

<VirtualHost *:80>

ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
ProxyPass / http://hogeserver.hogeddns.jp:5080/
ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined

</VirtualHost>

<VirtualHost *:443>

ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
ProxyPass / http://hogeserver.hogeddns.jp:5080/
ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-ssl-access.log combined

SSLEngine on
SSLCertificateFile /etc/ssl/private/om.hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/om.hogeserver.key

</VirtualHost>

※この設定の場合、omが名前解決できるようにDNSへの登録が必要になるので注意。従来のサービスの中に/openmeetingsの場合だけProxyする設定でも行けるはず。

$red5/webapps/openmeetings/public/config.xml
<!-- この設定をしないと1935を3回トライしてからトンネルにトライする
<rtmpport>1935</rtmpport> ←コメント化
-->
<rtmpport>80</rtmpport></pre> ←追加

<!-- トンネルする際に利用するポートを設定しているらしい
<red5httpport>5080</red5httpport> ←コメント化
-->
<red5httpport>80</red5httpport> ←追加

※Ver3.0.5で$red5/conf/red5.propertiesを色々といじってみたけど効果なし。また、トンネルさせるとタイムラグが出やすいような気がする…。

■Openmeetings 3.2.1近辺

このあたりで、ログイン直後にWebSocketでエラーが起きて画面が表示されないようになってきた模様。
以下でproxy_wstunnelとproxy_httpを有効化しておく必要がある。

$ sudo a2enmod proxy_wstunnel
$ sudo a2enmod proxy_http
$ sudo service apache2 restart


その上で、設定を以下のように変える。

Apache: openmeetings.conf
#
# Apache Openmeetings
#

<VirtualHost *:80>
ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
# ProxyPass / http://hogeserver.hogeddns.jp:5080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://hogeserver.hogeddns.jp:5080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://hogeserver.hogeddns.jp:5080/$1 [P,L]

ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined
</VirtualHost>

<VirtualHost *:443>
ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
# ProxyPass / http://hogeserver.hogeddns.jp:5080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://hogeserver.hogeddns.jp:5080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://hogeserver.hogeddns.jp:5080/$1 [P,L]

ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined

SSLEngine on
SSLCertificateFile /etc/ssl/private/om-hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/om-hogeserver.key
</VirtualHost>



$red5/webapps/openmeetings/public/config.xml
<!-- <rtmpport>1935</rtmpport> --> ←コメント化
<rtmpport>80</rtmpport></pre> ←追加

<!-- <red5httpport>5080</red5httpport> --> ←コメント化
<red5httpport>80</red5httpport> ←追加


ここら辺まではなんとかProxyだけで動作させることができそうな気配。
3.3.2でも80番ポートでならば動いてくれた。




一度使い始めると本当に便利で手放せないツールになる。
調子に乗って高解像度なビデオ・画面共有をしなければ、帯域も殆ど使わないから、他に迷惑をかけることも殆どない。

2020年末にはFlashのサポートが停止される。
それまでに別の何かに置き換えられるのだろうか。
楽しみにしつつその動向を追いかけていこうと思う。

OpenmeetingsをSSLで動作させる設定(3.3.0以降)

$
0
0

ChromeはHTTPSでないとマイクやカメラを列挙しないように仕様が変わったらしく(サービス提供者にプレッシャーを掛け続けているという話だったが、元ネタ場所は失念)、HTTPのままでは使えない。

実際、HTTPのままのOpenmeetingsにログインして会議室に入ってみると、カメラやマイクはあっても文字が列挙されず選択肢は真っ白だ。



このページは4部作の2つ目。
OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)
OpenmeetingsをSSLで動作させる設定(3.3.0以降)
OpenmeetingsをそれでもProxyで動作させる(危険)
Openmeetingsのアップグレード & ChromiumとFlash


バージョン3.3.0でCSRF(Cross-Site Request Forgery)の脆弱性を修正したので、3.3.0以降の場合には、前回記事の単純なHTTPSのProxy設定をしてもCSRFのエラーで動かない。具体的には「ソースはhttps:om.hogeserver.hogeddns.jpなのに、http:om.hogeserver.hogeddns.jpにアタックされたー!」と表示されて動かない。

※Apacheの設定に明るい方ならProxy設定だけで動かせるかもしれない。ぜひ教えてください。いくら探しても見つからないのです…

そのため、Chromeで使えるようにするためには、Openmeetings自体をHTTPSで動作させる若干大掛かりな感じの設定変更が必要。

やり方は「Using OpenMeetings with RTMPS and HTTPS」に書いてあるが、なんか難しい…

実際にやるのは以下。
  • サーバー証明書(署名済み)、サーバー秘密鍵、ルート証明書をpacks12形式にまとめる。*
  • おまとめ証明書をベースにキーストアを作成。*
  • ルート証明書をベースにトラストストアを作成。
  • Openmeetingsの設定をSSLに変更。
  • Apacheをの設定をSSLに合わせる。
  • ユーザーのPCにあるJavaのキーストアにルートCAと中間CAの証明書をインポート。

…と、サーバー管理者だけでなく、利用者に対するハードルもかなり上がってしまう。

*新たに証明書を作る場合には順序が逆に。先にキーストアを作り、そのキーストアをベースに証明書署名要求を作って署名をしてもらい…となる。今回この方式を記事にしたのは、keytoolのパラメータが「import」となっていて「作る」ように見えずモヤモヤ悩んだため。

※設定の過程でカット&トライしたのだが、どうにも動作が変わらないことがあった。Chromeの閲覧履歴を消したら設定変更が反映されたりするので、動作確認にも注意が必要。

キーストアとトラストストアについては、こちらで一言で説明されている。
引用「インフラSEの運用・構築メモ キーストアとトラストストアについて
  • キーストア
    自らが作成したサーバー証明書を保存する。
  • トラストストア
    CAが発行したルート証明書・中間証明書など自らが信頼する証明書を保存する。

今回で言えば、キーストアには新たに作成するopenmeetingsサーバーのサーバー証明書を入れておき、トラストストアにはCA証明書を入れることになる。

現在、過去に記載した記事で構築したオレオレなルート認証局を運用しており、利用しているPCにはルート証明機関としてインストール済みだ。この仕組を流用する。

なお、元々あるキーストアは無視して良さそう。
$red5/conf/keystore.jmx
$red5/conf/truststore.jmx

実際に作り出すキーストア・トラストストアの拡張子は jks のため。




■サーバー証明書(署名済み)、サーバー秘密鍵、ルート証明書をpacks12形式にまとめる

今回、om.hogeserver.hogeddns.jp というドメイン名でサービスを提供しようとしているので、このドメイン名を持つサーバー秘密鍵・証明書署名要求を作成した。証明書署名要求にはオレオレ認証局で署名をする。

できあがった署名済みのサーバ証明書とサーバー秘密鍵を以下の名前で配置。
red5.crt
red5.key



これをpkcs12形式でまとめる。ルートCAや中間CAの証明書も一緒に入れておくようにと書かれている。
$ openssl pkcs12 -export -in red5.crt -inkey red5.key -out red5.p12 -name red5 -certfile ca.crt
Enter Export Password:
Verifying - Enter Export Password:
unable to write 'random state'

※中間CA証明書もあわせて入れる場合には、パラメータに -certfile Intermediate.crt …と追加していけば良い模様。




■おまとめ証明書をベースにキーストアを作成

できあがったpkcs12形式にまとめた証明書をベースにキーストアを作成する。-importkeystoreとパラメータを付けるが、なければキーストアが作られる。
$ keytool -importkeystore -srckeystore red5.p12 -srcstoretype PKCS12 -destkeystore ./keystore.jks -deststoretype pkcs12 -alias red5
キーストアred5.p12を./keystore.jmxにインポートしています...
出力先キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
ソース・キーストアのパスワードを入力してください:



pkcs12形式のエクスポートパスワードとキーストアのパスワードが違うとキーストアができない。そのときには、-destkeypass パラメータでキーストアのパスワードを決めてあげれば良いみたい。

この操作で新規にキーストアが作られ、ベースとなったpkcs12からサーバー証明書・秘密鍵、ルート証明書が格納できた。

なお、サーバー証明書は以前の記事で書いた方法で作成、署名したものを利用しているが、サーバー証明書を新規に作る場合には Using OpenMeetings with RTMPS and HTTPS にかかれている手順でできた。

ざっくりと書くと…
  • キーストアを作る
  • キーストアの情報をベースに署名要求を作る
  • 自前CAで署名
  • 署名した証明書をキーストアにインポート

という手順。




■ルート証明書をベースにトラストストアを作成

証明機関をまとめたトラストストアを作成。こちらもパラメータに -import をつければ、なければストアが作られる。

$ keytool -import -file ca.crt -alias hogeCA -keystore ./truststore.jks
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
所有者: EMAILADDRESS=webmaster@hogeserver.hogeddns.jp, CN=om.hogeserver.hogeddns.jp, O=hogehoge, ST=hogehoge, C=JA
発行者: EMAILADDRESS=webmaster@hogeserver.hogeddns.jp, CN=om.hogeserver.hogeddns.jp, O=hogehoge, ST=hogehoge, C=JA



この証明書を信頼しますか。 [いいえ]: y
証明書がキーストアに追加されました



ここまででキーストアとトラストストアができあがった。




■Openmeetingsの設定をSSLに変更

3.3.2でHTTPS & RTMPSで動くように設定をしてみる。

$red5/conf/red5-core.xml
    <!-- RTMPS --> ←ここを有効化
<bean id="rtmpsMinaIoHandler" class="org.red5.server.net.rtmps.RTMPSMinaIoHandler">



<bean id="rtmpsTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">



</bean>



$red5/conf/red5.properties
rtmps.keystorepass=KeyStoreを作ったときに入力したパスワード
rtmps.keystorefile=conf/keystore.jks
rtmps.truststorepass=TrustStoreを作ったときに入力したパスワード
rtmps.truststorefile=conf/truststore.jks



$red5/webapps/openmeetings/public/config.xml
設定値を以下の通り変更。
<rtmpsslport>443</rtmpsslport>
<useSSL>yes</useSSL>
<red5httpport>443</red5httpport>
<protocol>https</protocol>



$red5/conf/jee-container.xml
<!-- Tomcat without SSL enabled -->
の範囲をコメント化し、
<!-- Tomcat with SSL enabled -->の範囲を有効化する。



Apacheの設定。どうしても、Proxyが上手く動作しなくて困った…
SSL setup with apache in front of tomcatに解決方法が示されていた!

#
# Apache Openmeetings
#

<VirtualHost *:443>
ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@nayu.mydns.jp

ProxyPreserveHost on
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) wss://om.hogeserver.hogeddns.jp:5443/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) https://om.hogeserver.hogeddns.jp:5443/$1 [P,L]
ProxyPassReverse / https://om.hogeserver.hogeddns.jp:5443/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined

SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/private/om-hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/om-hogeserver.key
</VirtualHost>



この SSLProxyEngine on 設定で上手くProxyができるようになった。




■ユーザーのPCにあるJavaのキーストアにルートCAと中間CAの証明書をインポート

よく使うんですよ、画面共有。

SSLでOpenmeetingを動かす場合、画面共有する人は、そのPCでルートCA(&多分中間CA)をJavaのキーストアにインポートしておく必要がある。

具体的には、
C:\Program Files (x86)\Java\jre1.n.n_nn\bin\keytool.exe
を使って、キーストアcacerts
C:\Program Files (x86)\Java\jre1.n.n_nn\lib\security\cacerts
にルートCAと中間CAの証明書をインポートする。

手順は
  • ルートCAと中間CAの証明書を準備。
  • コマンドプロンプトを「管理者」で開く。
  • Javaのbinディレクトリへ移動。
  • キーストアに準備した証明書をインポート

となる。

>cd "C:\Program Files (x86)\Java\jre1.n.n_nn\bin" ←TABキーを途中で押したりして探しながらディレクトリ移動
C:\Program Files (x86)\Java\jre1.n.n_nn\bin>keytool -import -alias root -keystore ..\lib\security\cacerts -file インポートする証明書.crt
キーストアのパスワードを入力してください: ← changeit で行ける



証明書をインポートしないと、ツールの実行まではできるが、画面共有を開始できない(ボタンを押しても何も反応しない)。




ここまでの手順で、SSLでサービスを提供できた。


SSLのインストール手順はUbuntu12時代に書かれたものだったため、久しぶりにUbuntu12をインストールして使ってみた。その際、Oracle Javaをインストールするのに以下を参考にさせていただいた。
Ubuntu 12.04 に Oracle Java 6, 7 (JRE, JDK) をインストール
Java6, Java7 は古すぎるのかインストールできなかったが、Java8はインストールできた。

めっちゃ助かりました。

OpenmeetingsをそれでもProxyで動作させる(危険)

$
0
0

Openmeetingsを取り巻く環境…

  • OpenmeetingsがCSRF(Cross-Site Request Forgery)に対応したこと。
  • Google ChromeがHTTPSの通信でないとカメラとマイクを使わせないこと。
を考慮したとき、OpenmeetingsをHTTPSで動かすことが正しい、となって設定を試してみたけれども、フル機能をユーザーに使ってもらおうとした時にはハードルが高すぎる。

これは4部作の3つ目。
OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)
OpenmeetingsをSSLで動作させる設定(3.3.0以降)
OpenmeetingsをそれでもProxyで動作させる(危険)
Openmeetingsのアップグレード & ChromiumとFlash


Javaが内部で持っているキーストアに、ルート証明書をインストールするとか、もう荒行レベルと感じるだろうと思う。

Apacheの設定では逃げられない(逃げられるのかもしれないけれど、見つけられなかった)ので、Openmeetingsの設定でどうにかできないかと頑張ってみたものの、それも上手く働かせられなかった。

これは、ソースに手を入れるしかない…




えぇ、完全に危険なソース変更です。わざわざCSRF対応しているのに、それを無効化するのですから。

この問題の性質を調べてみると、クローズドな環境(ユーザーを自動で登録させていないので、アカウントは全て関係者のみ)ならば、いたずらされても問題は広がりにくい。

※IPAがわかりやすく情報公開をしてくれている。
3. CSRF (クロスサイト・リクエスト・フォージェリ)

ということで、ウチの中だけで考えれば「割り切り案件」と判断した。




やることは、
  • ソースのダウンロード
  • ソースの改変
  • コンパイル
  • モジュールの差し替え

である。

ソースは公式からたどって必要なバージョンを落としてくる。
3.3.0以降はCSRF対策されているので、お試しで3.3.2とした。

ファイルを展開したら、そのディレクトリに入る。
以降 $src と表記。

■ソースの改変

$src/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
//Add custom resource loader at the beginning, so it will be checked first in the
//chain of Resource Loaders, if not found it will search in Wicket's internal
//Resource Loader for a the property key
getResourceSettings().getStringResourceLoaders().add(0, new LabelResourceLoader());
getJavaScriptLibrarySettings().setJQueryReference(getV3());
getRequestCycleListeners().add(new CsrfPreventionRequestCycleListener() {
@Override
public void onEndRequest(RequestCycle cycle) {
Response resp = cycle.getResponse();
if (resp instanceof WebResponse && !(resp instanceof WebSocketResponse)) {
WebResponse wresp = (WebResponse)resp;
wresp.setHeader("X-XSS-Protection", "1; mode=block");
wresp.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
wresp.setHeader("X-Content-Type-Options", "nosniff");
wresp.setHeader("X-Frame-Options", xFrameOptions);
wresp.setHeader("Content-Security-Policy", contentSecurityPolicy);
}
}

@Override
protected boolean isChecked(IRequestHandler handler) {
if (handler instanceof WebSocketRequestHandler || handler instanceof WebSocketMessageBroadcastHandler) {
return false;
}
return super.isChecked(handler);
}
// CSRF対策の無効化
@Override
protected boolean isEnabled() {
return false;
}

});



■コンパイル

Mavenを使うのでインストール。
$ sudo apt install mvn

※コマンドの使い方は、「Maven2使い方メモ」がとてもわかり易かった。


コンパイル。情報は公式「How to Build a Distribution」にある。
$ mvn clean install -P allModules,unpacked,mysql -DskipTests=true -Dwicket.mode=DEVELOPMENT

※色々ダウンロードしながらコンパイルするので、長時間が掛かる。


■モジュールの差し替え

コンパイルした結果のモジュールを差し替える。

$red5/webapps/openmeetings/WEB-INF/lib/openmeetings-web-3.3.2.jar



$src/openmeetings-web/target/lib/openmeetings-webservice-3.3.2.jar

に置き換える。





後は、red5.shを再起動すればOK。

やることはこれだけなんだけれども、結局結構な紆余曲折をしてしまった。セキュリティ対策は大事なことだけれど、なんとか設定で逃げられるようにはできないものだろうか…。

Openmeetingsのアップグレード & ChromiumとFlash

$
0
0

ようやくOpenmeetings最新バージョンへの更改準備が整った。
アップグレードするには何をすれば良いのだろうか。

…そうだ、以前、アップグレードを断念したのは、データのバックアップが失敗するからだった。

これは4部作の最終話。
OpenmeetingsインストールからProxy設定(3.0.5~3.2.1近辺)
OpenmeetingsをSSLで動作させる設定(3.3.0以降)
OpenmeetingsをそれでもProxyで動作させる(危険)
Openmeetingsのアップグレード & ChromiumとFlash


調べてみたところ、情報がここに。
Unable to take backup using GUI or Admin.sh
openmeetings-user mailing list archives

一番最初に選んだバージョンがたまたまこれに当たってしまった模様。
使っていた3.0.5はバックアップできないバグがあったけれども、3.0.7では修正されている、手作業でデータベースを更新して回避しといて、という話

■じゃあ、回避しましょう。

でも、回避について中身が分かっている人の言葉が少ないなぁ…どうすりゃいいんだろ。

$ mysql -u root -p

mysql> select host, user, password from mysql.user; ← ユーザー一覧
mysql> show databases ← データベースの一覧
mysql> show tables from openmeetings; ← テーブルの一覧
mysql> show full columns from om_user; ← テーブルom_userの列一覧

これらでターゲットを確認して~



mysql> use openmeetings; ← データベースの選択
mysql> update om_user set regdate = now();
Query OK, 9 rows affected (0.00 sec)
Rows matched: 9 Changed: 9 Warnings: 0

mysql> select id, login, regdate from om_user;
+----+--------------+---------------------+
| id | login | regdate |
+----+--------------+---------------------+
| 1 | hogeuser | 2018-01-14 08:08:57 |
| 2 | hogewife | 2018-01-14 08:08:57 |
     ・
     ・
     ・
| 9 | hogefriend | 2018-01-14 08:08:57 |
+----+--------------+---------------------+
9 rows in set (0.00 sec)



ということでした。




■バックアップとリストア

答えはここに書いてあるが、バックアップボタンを押してファイルを取り出し、データベースをまっさらにして新しいバージョンをインストールし、インポートボタンを押すだけ。
Upgrading OpenMeetings via the Web-Interface

実際には、インポートボタンを押すと admin.sh が動作してファイルができあがり、バックアップデータがダウンロードされる。

新バージョンをファイル展開し、データベースを削除・再作成して起動してインストールを完了させて、その後にインポートボタンを押せばデータは復元される。

ただ、この方法だと、インストール時に作ったユーザーが残ってしまう。元の状態を復元する場合にはコマンドを実行する必要があった。


■コマンドラインで行うリストア

バックアップデータは画面で採取すれば問題なし。

新バージョンを一旦インストール完了させた上で停止し、コマンドラインから復元する。

$ sudo ./admin.sh -v -i -file /バックアップがあるディレクトリ/backup_2018_01_14_08_21_42.zip --drop --skip-default-objects



どうやら、 --drop が付いているのがミソみたいで、元の状態が復元された。
また、--skip-default-objects はバージョンによってちょっと変わるっぽいので注意。

新バージョンを一度インストールすると、データベースへの接続設定は保管されるので、その後は上記のリストアでいつでも元に戻せる。




■バージョン4.0.1の設定。

CSRF対策を外したモジュールを作成し、差し替え(危険だが利用状況から割り切り)。これは長くなるので以前の記事参照、ということで。

これによりProxy設定で動作可能となることから、3.2.1で作成したApache設定を利用。
Apache: openmeetings.conf
#
# Apache Openmeetings
#

<VirtualHost *:80>
ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://hogeserver.hogeddns.jp:5080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://hogeserver.hogeddns.jp:5080/$1 [P,L]

ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined
</VirtualHost>

<VirtualHost *:443>
ServerName om.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://hogeserver.hogeddns.jp:5080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://hogeserver.hogeddns.jp:5080/$1 [P,L]

ProxyPassReverse / http://hogeserver.hogeddns.jp:5080/

ErrorLog ${APACHE_LOG_DIR}/openmeetings-error.log
CustomLog ${APACHE_LOG_DIR}/openmeetings-access.log combined

SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/private/om-hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/om-hogeserver.key
</VirtualHost>



※モジュールは proxy_wstunnel や proxy_http を有効化。

このバージョンにはconfig.xmlがなかった!やっと出番がやってきましたね、
$red5/conf/red5.properties を編集。

# RTMPT
rtmpt.host=0.0.0.0
#rtmpt.port=8088 ← コメント化
rtmpt.port=80 ← 追加


設定した結果、HTTPでもHTTPSでも接続ができるようになったー!
当面はこれで使えそうだ。




おまけ。

コタツPCとしてLinuxBeanを使わせてもらっている。検証に使いたいのだが、Ubuntu14ベースのためGoogle Chromeはサポート対象外となっており、Chromiumを使おうと思った。

■メニューが日本語表示されない(英語モードで動いている)

答えがここに。
Chromium WebブラウザをUbuntu系Linuxに導入した後にチェックしたい4つの設定 2, 日本語表示されない

結論からすると、
$ sudo apt-get install chromium-browser-l10n



をした後、Chromeを再起動すれば良さそう。

■Flashが動かない

接続検証に使いたいのに Flash が動かない。

答えはここに。
INSTALL PEPPER FLASH PLAYER FOR CHROMIUM IN UBUNTU VIA PPA

書かれている手順にちょっとだけ手を加えて…
$ sudo apt-get install pepperflashplugin-nonfree
sudo cp /usr/lib/pepperflashplugin-nonfree/etc-chromium-default.txt /usr/lib/pepperflashplugin-nonfree/pepflashplayer.sh
$sudo chmod 755 /usr/lib/pepperflashplugin-nonfree/pepflashplayer.sh



このファイルの先頭に以下を追加。
/usr/lib/pepperflashplugin-nonfree/pepflashplayer.sh
#!/bin/bash ← 追加
# part for pepperflashplugin-nonfree : begin

ftashso="/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so"



さらに以下を追加。
/etc/chromium-browser/default

CHROMIUM_FLAGS=""

. /usr/lib/pepperflashplugin-nonfree/pepflashplayer.sh



これで動くらしい。

chromiumを再起動して
chrome://flash
へアクセスして動作していることを確認する。

■証明書のインポート

設定から証明書をインポートできる。
OSに証明書をインポートしても上手く動かなかった…。




年末から今日にかけて色々と試してようやくバージョンアップができた。
最新版、使いやすい~、ウキウキだ~。

Openmeetings タイムアウトしてしまう問題の解決

$
0
0

会議中ただただ話を聞いているケースもあったりする。そして突然「じゃあ、君、発表しなさい」…なんて言われて、マイクON操作したらいきなりログイン画面に戻る…。


いや、先方に失礼千万なログアウト…原因が見えない…何がどうなってんの?

色々試してみるしかない。





いろいろ試したけど、タイムアウトするのはブラウザ側?とさえ思えてしまう動作をしていた。

この仕掛への登場人物は…



  • Openmeetings

  • Red5

  • Apache ← Proxyさせて443ポートでアクセスできるようにしている

  • Chrome/Edge等のブラウザ


WebSocketでセッションを張って、Openmeetings側からはPINGを飛ばしているようなログが見えている。

実際、何か操作を始めるまでは音声は通っているので、だって、「君、発表しなさい」までは聞こえてるんだから。

となると、間にいるRed5かApacheが切断してるんじゃないのか…と。


で、よくよく確認してみると5080ポートでアクセスしているメンバーも突然の切断を体験してる…となると?Red5が切断していることになるな。


で、ここにタイムアウト設定を入れてみる。デフォルトだと30分、今まで勝手にログイン画面に戻る症状もだいたい30分ぐらいと思ってたから症状に合うような気がしてきた。


$red5/webapps/openmeetings/WEB-INF/web.xml


                </web-resource-collection>
<auth-constraint/>
</security-constraint>
<!-- タイムアウト設定 ここから 480分=8時間-->
<session-config>
<session-timeout>
480
</session-timeout>
</session-config>
<!-- タイムアウト設定 ここまで -->

</web-app>



赤文字部分を追加。


これで、Openmeetingsを再起動すれば設定が反映されるだろう。

これが決定版かな。


ということで、利用者各位の協力を得て動作確認…問題なし。

解決まで、長い道のりだったな~2週間以上悩みに悩んだけど、やっと落ち着いたよ~。




やってみたこと その1


ApacheでKeepAlive on を書いてみたが、デフォルトがONなので効果なし。




やってみたこと その2


設定ファイルをいじり、ApacheでKeepAliveを有効にしてみたりしたけど、特に動作は変わらない。

$red5/webapps/openmeetings/WEB-INF/classes/applicationContext.xml


        <!--
5000 == 5 sec
300000 == 5 min
900000 == 15 min
1800000 == 30 min
3600000 == 1 hour
86400000 == 1 day
-->
<bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob"
p:sessionTimeout="86400000" p:testSetupTimeout="86400000" p:roomFilesTtl="86400000" p:resetHashTtl="86400000" />
<!-- sessions clean-up -->

最初に見つけたときはこれかー!という感じ、全てのタイムアウト時間をまる1日に設定してみた。

結果は変わらない。結局Openmeetingsの動作の問題じゃないみたいだ。




やってみたこと その3


ソースを見てみた…

openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java


public class CleanupJob extends AbstractJob {

private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, getWebAppRootKey());

private long sessionTimeout = 18 * 60 * 60 * 1000L; // 30 min → 18 hour

private long testSetupTimeout = 18 * 60 * 60 * 1000L; // 1 hour → 18 hour

private long roomFilesTtl = 18 * 60 * 60 * 1000L; // 1 hour → 18 hour

private long resetHashTtl = 24 * 60 * 60 * 1000L; // 1 day


できあがったモジュールはopenmeetings-service-4.0.1とopenmeetings-web-4.0.1なので置き換えてみた。


さらに、デバッグログを出してみた。

./openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java

にちょっと手を入れて…。


30分放置した後に何らかの操作をすると、セッションを閉じるイベントが飛んでくるところまではわかった。

これでOpenmeetingsの設定じゃなさそうだと思い始めた。




Version 4.0.1 を使い始めたら、もう、元には戻りたくない。色々なものが使いやすくなっている。特に、画面共有はとても見やすくてホワイトボードを使った議論→議事録そのものの画面共有で議論…に移行している。また、音声のタイムラグも発生しにくくなっているように感じる。さらにボリュームの調整が各個人でできるようになったことも議論のしやすさに貢献。


これにより、ユーザーの皆さんの評判も今まで以上に良くなっている。


今のバージョンの問題は、画面共有をして議論している間に、新たに人が入ってきて画面共有を受けると、元々共有を受けていた人の画面が固まってしまうこと。

また、複数のホワイトボードを開いて、そのホワイトボードを複数人が同時に切り替えると時々パラパラ漫画のように画面が切り替わり続けるようになること。


これからのバージョンアップできっとこれらも改善されることだろう。期待して待っていよう。


Google日本語入力でタッチキーボードのフルキーボードが出せない

$
0
0
Windows10でログイン画面の挙動が何か違う。PIN番号によるログインができるように設定をしているが、Microsoft IME の場合にはフリックキーボードで数字が出るのに、Google日本語入力の場合には、何度どうやっても別のキーボードが出てくる。

Fall Creators Update をインストールしたら、タッチキーボードの挙動が変わった。Microsoft IME のときには多彩な選択肢があるのに、Google日本語入力の場合には選択肢が少なく、フルキーボードは選択できない。



PIN番号入力はもう諦めた。でもフルキーボードはどうにかしたいと思ったら、答えがここに。

Windows10 Fall Creators Update 適用後、タッチキーボード(フルキーボード)が表示されない。【Ver1709】

レジストリでフラグを立てて、Fall Creators Update前のインターフェースに戻す模様。

①キー[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TabletTip\1.7]を選択
②値の作成 [新規]→[DWORD(32ビット)値]
③値の名前を[DisableNewKeyboardExperience]に変更
④名前変更を行った[DisableNewKeyboardExperience]をダブルクリックで開き、値のデータを[1]に変更
⑤PCを再起動
※引用元は上記の記事


この通りに設定したら、インターフェースが古くなってフルキーボードが使えるようになった。
めでたしめでたし。



乙カレー!

20年前に感じた衝撃、作り出された誤変換が当たり前の文化、連文節入力をしても文脈を全く読まないとてつもない怪文書。当時の国産IMEはハイクオリティな変換ができたがOSにスッキリはまらず、価格差?もあって衰退していった。

iOSはフリックというインターフェースをぶっ込んできて、これは凄かった。でも変換はもう一つな感じだったので、サードパーティ製の変換ソフトが解禁されたときに飛びついた!しかし、制限が強くかかっていて動きも緩慢に…。
Androidに変えた時はその当時気に入っていたIME来たぜ!と喜んだものの、廉価版だからなの?という変換クォリティでがっかり。

ということで「いつまでたっても自分に馴染もうとしないIME」を使い続けている。

そんななかで、WindowsにGoogle日本語変換がやってきて、これはどうなんだろう?と興味を持って使ってみたら、時々どうしようもない変換(いくら学習し直しても頑固に直さない)をすることがあるものの、サジェストが冴え渡るなかなかの変換精度で気に入っていた。タブレットを買ったときにもすぐにインストールして使っていた。

で、Windows8 → Windows10 にした時にトラブって、再インストール。Windows10 → Fall Creators Updateしたら使えることは使えるんだが、タッチキーボードの選択肢がとても狭まってしまった。

こういう歴史を感じてきている身としては、プラットフォームを持つ大企業の横暴で、またしても性能の高いサードパーティ製品を排除しようとしているんだなーと感じる。
でもねー、元々「乙カレー」だからねー、期待してないっすよその変換には。だから勝手に色々とみんなのツールや思いを潰しまくらないでくれよー、と思ってしまうのであった。

めでたしと書いたものの、古いの使うフラグを立てて使うなんてのが本質的にめでたい訳がない、でしょ!?

VBAでTreeViewやImageListのプロパティページが開けない

$
0
0
なるほど古い技術なんですね。でも、それでも他のよりはいいかなぁと思った。
で、TreeViewやImageListをフォームに貼ってプロパティページを開こうとしたら…

次のクラスは登録されていません。
次の CLSID オブジェクトを参照してください。:{7EBDAAE1-8120-11CF-899F-00AA00688B10}


というエラーが出たのだった。



どうやら、プロパティページで使用されているライブラリがVisualStudio6.0時代のライブラリを参照していて、それは既に頒布されてなかったりするのでエラーになっている模様。

やることは…
  • ライブラリをダウンロード
  • インストーラーから必要ライブラリを抽出
  • ライブラリを登録

である。何か懐かしいコマンドが出てきたー。



■ライブラリをダウンロード

ここに情報があった。
Visual Basic 6.0 を Windows のサポートについて

このページの中に「Microsoft ダウンロード センター」へのリンクがあった。

ここから、VB60SP6-KB2708437-x86-JPN.msi をダウンロードしてきた。

これをインストールして問題がない方は、これをインストールして完了かと。



■インストーラーから必要ライブラリを抽出

msiからファイルを抽出する方法が kurukuru-papaのブログ にサクッと書いてあった。

今回は、
start /wait msiexec /a VB60SP6-KB2708437-x86-JPN.msi targetdir="C:\Users\hogeuser\Downloads\temp\extruct" /qn

で展開した。



■ライブラリを登録

展開したファイルは C:\Windows\SysWOW64 にコピーした。

保存場所の選定は、このサイトを参考に行った。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

これによれば、 SysWOW64 には32bitのライブラリが入るらしいので抽出したファイルを保管。

登録には「管理者」でコマンドプロンプトを開いて以下を。
regsvr32 C:\Windows\SysWOW64\msstkprp.dll


もし、登録を解除するなら以下を。
regsvr32 /u C:\Windows\SysWOW64\msstkprp.dll




もっと良いコントロールがあるのかなぁ。

Mattermostを試してみる

$
0
0

Slackが便利。少し前に耳にしたが…今用意している仕組みと何が違うの?と聞くと、相手がログインしていなくてもメッセージを気軽に出せることかなー、だったので気にしていなかった。


ところが、最近再び社内でクローズアップされてきている。ちょっと調べてみると、色々と便利そうではあるが、始めようとすると費用感をどうにかする必要がある。


ならばMattermostをインストールして試してみよう、ということになった。






まずは何者かを調べてみようと思ったら…色々とまとめてくれている人がいた。

SlackクローンのMattermostを使ってみる - 導入、初期設定編-


で、ここで基礎知識を得て色々とたどってみたところ、

Installing Mattermost on Ubuntu 16.04 LTS

にインストール方法が書いてあることを確認。


■MySQL設定


既に運用中のシステムを使うが、これにはUbuntu16とMySQLが導入済み。

ユーザーとデータベースを作る。


$ mysql -u root -p
mysql> create user 'mmuser'@'localhost' identified by 'mmuser-password';
mysql> create database mattermost;
mysql> grant all privileges on mattermost.* to 'mmuser'@'localhost';
mysql> quit

 


■Mattermost Server のダウンロードと展開。


ここからダウンロードしてくる。

Download - Mattermost


この日のバージョンは Latest Release: 4.7.2 となっていた。

これを展開する。


これを、ドキュメントとは違っているけど、/usr/shareに移動。


$ tar zxvf mattermost-4.7.2-linux-amd64.tar.gz
$ sudo mv mattermost /usr/share/

ユーザを作って持ち主を変え、グループに書き込み権限を付ける。


$ sudo useradd --system --user-group mattermost
$ sudo chown -R mattermost:mattermost /usr/share/mattermost/
$ sudo chmod -R g+w /usr/share/mattermost/

 


■Databaseドライバ設定


/usr/share/mattermost/config/config.json を開き、赤文字部分を編集する。



"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
"DataSourceReplicas": [],
"DataSourceSearchReplicas": [],
"MaxIdleConns": 20,
"MaxOpenConns": 300,
"Trace": false,
"AtRestEncryptKey": "",
"QueryTimeout": 30


mostest はパスワードに、dockerhost は localhost に、mattermostはデータベース名の mattermost に書き換える。


 


■起動するかどうかを試す


とりあえず起動してみる感じ。これで黄色部分が表示されたらOKらしく、[CTRL]+Cで


$ cd /usr/share/mattermost/
$ sudo -u mattermost ./bin/platform
[2018/03/06 08:02:39 JST] [INFO] Loaded system translations for 'en' from '/usr/share/mattermost/i18n/en.json'
[2018/03/06 08:02:39 JST] [INFO] Server is initializing...

[2018/03/06 08:02:42 JST] [INFO] Starting Server...
[2018/03/06 08:02:42 JST] [INFO] Server is listening on [::]:8065
[2018/03/06 08:02:42 JST] [INFO] API version 3 is scheduled for deprecation. Please see https://api.mattermost.com for details.
[2018/03/06 08:02:42 JST] [INFO] Starting 4 websocket hubs
[2018/03/06 08:02:43 JST] [INFO] Starting workers
[2018/03/06 08:02:43 JST] [INFO] Starting schedulers.
^C(ここで表示が止まった。マニュアルに沿って割り込みを入れた)
[2018/03/06 08:09:22 JST] [INFO] Stopping schedulers.

[2018/03/06 08:09:22 JST] [INFO] Server stopped

 


■自動起動するように設定する


systemd の unit ファイルを作るそうで…


$ sudo touch /lib/systemd/system/mattermost.service
$ sudo vi /lib/systemd/system/mattermost.service

中身はこれを貼り付ける。Administrator Guide から変えた場所は赤文字。


[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=simple
ExecStart=/usr/share/mattermost/bin/platform
Restart=always
RestartSec=10
WorkingDirectory=/usr/share/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=mysql.service

unitを追加、起動、確認、サービスの有効化。


$ sudo systemctl daemon-reload
$ sudo systemctl start mattermost.service
$ sudo systemctl status mattermost.service
mattermost.service - Mattermost
Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
Active: active (running) since 火 2018-03-06 08:43:36 JST; 31s ago

$ sudo systemctl enable mattermost.service

ということで、サービスの登録までできた模様。


■接続して確かめつつ最初の設定


http://hogeserver:8065


最初に作られるユーザーは system_admin 権限になる模様。

そのため、root@hogeserver.hogeddns.jp なアカウントを作ってみた。


ログインしたら「Go to System Console」で設定開始。

後は追々設定していけばいいだろう。


GENERAL -> Configuration
Site URL: https://mm.hogeserver.hogeddns.jp

GENERAL -> Localization
Default Server Language: 日本語
Default Client Language: 日本語

NOTIFICATIONS -> Email
Enable Email Notifications: true
Notification Display Name: Hogeserver master
Notification From Address: webmaster@hogeserver.hogeddns.jp
Notification Fotter Mailling Address: このサービスはHogeserverで運用しています。
SMTP Server: hogeserver.hogeddns.jp <- localhostでもいいかもしれない
SMTP Server Port: 25 等々

 


■Apache設定


443ポートでサービス公開しようと思う。

Openmeetingsの設定を参考にして、mmという仮想ホストを作り…


mattermost.conf


#
# Mattermost
#

<VirtualHost *:443>
ServerName mm.hogeserver.hogeddns.jp
ServerAdmin webmaster@hogeserver.hogeddns.jp

ProxyPreserveHost on
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://mm.hogeserver.hogeddns.jp:8065/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://mm.hogeserver.hogeddns.jp:8065/$1 [P,L]
ProxyPassReverse / http://mm.hogeserver.hogeddns.jp:8065/
ProxyPassReverse / ws://mm.hogeserver.hogeddns.jp:8065/

Header edit Content-Security-Policy ws: wss:

ErrorLog ${APACHE_LOG_DIR}/mattermost-error.log
CustomLog ${APACHE_LOG_DIR}/mattermost-access.log combined

SSLEngine on
SSLCertificateFile /etc/ssl/private/any-hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/any-hogeserver.key
</VirtualHost>

 


接続・利用に問題なし、とみられる。


 




 


■全文検索対応(部分一致で検索ができるようにする)


入れなくても部分一致検索ができるようなら、何もしなくていいと思う。

できないような気がしたので挑戦。


Mroonga v8.00 documentation >> 2.インストール >> 2.4. Ubuntu

Mattermostの日本語メッセージ全文検索対応まとめ(MySQL編)


$ sudo add-apt-repository -y ppa:groonga/ppa
$ sudo apt update
$ sudo apt-get install -V mysql-server-mroonga

$ mysql mattermost -u mmuser -p
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |

mysql> alter table `Posts` engine = Mroonga;
mysql> quit

$ sudo apt install groonga-tokenizer-mecab
$ mysql mattermost -u mmuser -p
mysql> alter table `Posts` DROP INDEX idx_posts_message_txt;
mysql> alter table `Posts` add fulltext index idx_posts_message_txt (`Message`) comment 'parser "TokenMecab"';

$ sudo apt install mecab mecab-ipadic


 


/etc/mysql/my.cnf に以下を追加。


[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB
# MeCab Full-Text Parser Plugin Settings
loose-mecab-rc-file=/etc/mecabrc
innodb_ft_min_token_size=1


[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

 


MySQLの再起動。


$ sudo service mysql restart
$ sudo service mattermost restart

 


先日、MySQLのバージョンアップが提供された。

導入したところ、Mroongaが外れてしまう問題が発生、インストール用のSQLを流し込んで復活させた。


たしか、mysql_install_db というSQLを流し込んだはず…




 


使ってみた印象。


文字を書き込めて検索できて、必要ならメールを飛ばせて、画面も簡単に貼り付けられる…ということで、IRCよりかなり便利に使えている。


オンプレでこうしたコミュニケーション手段を持つことができるのはいい、と思うのだった。


 




★以下はやりかけ、上手く動作させるまでに至らなかった。


■Dockerインストール


いざとなったら会話がしたい。ということで、WebRTCが要求するDockerをインストールする。


DockerはCommunity Edition(CE)とEnterprise Edition(EE)があるようだが、


Get Docker CE for Ubuntu


必要パッケージ、GPGキー、リポジトリを導入。


$ sudo apt update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
→ これは結局全てインストール済みだった
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 


Dockerのインストールとテスト。


$ sudo apt update
$ sudo apt-get install docker-ce
$ sudo docker run hello-world

 


これで色々と試してみたけど、ビデオ通話ができない。


docker を使って mattermost-webrtc というのを実行しなければならないらしい。


$ sudo docker run --name mattermost-webrtc -p 7088:7088 -p 7089:7089 -p 8188:8188 -p 8189:8189 -d mat
termost/webrtc:latest

 


この後色々とやってみたのだけれど…知識不足で設定完了せず。


 

Alfrescoの起動方法を変える systemctl

$
0
0

Alfrescoを起動する方法、現状がよろしくなかった。

/etc/init.d/alfrescoに定義を書いて、root権限で動作させている。


変えましょう…




■サービスを止める


今までの手順だとこちら。


$ sudo service alfresco stop

※終了に猛烈に時間がかかる(5分、CPU使用率は高くならない)ことがあったが、原因を突き止められずにここまできた。


サービスの登録状況は sysv-rc-conf で見る。


$ sysv-rc-conf --list
acpid 2:on 3:on 4:on 5:on
alfresco 0:off 1:off 2:on 3:on 4:on 5:on 6:off
alsa-utils 0:off 1:off 6:off S:on

という具合。


サービスを削除する。


$ sudo update-rc.d alfresco disable ← これは無効化。やらなくていいかも。
$ sudo update-rc.d alfresco remove ← これで /etc/rc?.d からシンボリックリンクが消える
$ sudo rm /etc/init.d/alfresco ← 起動スクリプトを削除
$ sysv-rc-conf --list
acpid 2:on 3:on 4:on 5:on
alsa-utils 0:off 1:off 6:off S:on

きれいに消えた。


 




■起動ユーザーを作る


ユーザー alfresco を作って、Alfresco関連ファイルの持ち主を alfresco に変える。


$ sudo useradd --system --user-group alfresco
$ sudo chown -R alfresco:alfresco /usr/share/alfresco/

 


■起動用の設定ファイルを作る


このあたりを参考に。


https://gist.github.com/fmaul/b05d9b8d8b5ff8ff0a0657f2c25d7d8d

http://alfrescoblog.magenta.dk/content/creating-systemd-service-alfresco-installation


/lib/systemd/system/alfresco.service


[Unit]
Description=Alfresco Content Service
After=syslog.target network.target mysql.service

[Service]
Type=forking
ExecStart=/usr/share/alfresco/alfresco.sh start
ExecReload=/usr/share/alfresco.sh restart
ExecStop=/usr/share/alfresco/alfresco.sh stop
User=alfresco
PIDFile=/usr/share/alfresco/tomcat/temp/catalina.pid

[Install]
WantedBy=multi-user.target

 


rootでインストールしたので、スクリプトに若干の修正が必要。


/usr/share/alfresco/alfresco.sh


#!/bin/sh

echo "TRACE : 101"

# Allow only root execution
#if [ `id|sed -e s/uid=//g -e s/\(.*//g` -ne 0 ]; then
# echo "This script requires root privileges"
# exit 1
#fi

echo "TRACE : 102"

※コメントアウトする


■サービスとして登録


まずは起動を試す。


$ sudo sudo systemctl daemon-reload
$ sudo systemctl start mattermost.service
$ systemctl status mattermost.service
● alfresco.service - Alfresco Content Service
Loaded: loaded (/lib/systemd/system/alfresco.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2018-04-14 11:08:41 JST; 10s ago
Process: 6033 ExecStart=/usr/share/alfresco/alfresco.sh start (code=exited, status=0/SUCCESS)

これで起動が確認できたらOKかな。


サービスとして登録。


$ sudo systemctl enable alfresco.service

 




これで移行ができる。


も、もしかして init.d で何かするより簡単!?

Windows10 April 2018 Update がフリーズ

$
0
0
フリーズしました。

契機は、Bluetoothマウスがバッテリー切れになったこと。

あれ?マウス?あれ?キーボードも反応しない!?ん???




結論はここに。

Windows 10 April 2018 UpdateでChromeがフリーズする問題が発生 - 解決方法も

ここから引用
現時点では明確な回避方法は見つかっていませんが、Win + Ctrl + Shift + Bを押してグラフィックスドライバをリセットすると、システムのフリーズ解除に役立つことがある場合もある模様。




おかげでとりあえずの復旧、たまたま目にしたこの記事に助けられた。

ありがとうございました。

Windows10の大型アップデートで設定が戻される

$
0
0

大型アップデートで設定が元に戻される。



  • ブートメニューポリシー

  • 高速スタートアップ

  • Superfetch


ブートメニューはセキュリティリスクなのかなぁ?

SSHD入れてるんで、高速化はそちらに任せたい。




■ブートメニューポリシー


本当にこれだけはどうにかして欲しい、F8でブートメニューが起動できない設定。


コマンドプロンプトを「管理者権限」で開き、


> bcdedit /enum

Windows ブート ローダー
--------------------------------

bootmenupolicy Standard

ほら、もとに戻ってる…。


>bcdedit /set {default} bootmenupolicy legacy
この操作を正しく終了しました。

 


もとに戻すときは、legacyをstandardに変えるか、大型アップデートを適用すればいい。


 




■高速スタートアップ


これが動いていると、マルチブートで動作するUbuntuからWindowsのパーティションに正しくアクセスできなくなる。読み出せるけど書き込めない、だったかな。


コントロールパネル → 電源オプション → 電源ボタンの動作を選択する → 現在利用可能ではない設定を変更します → 高速スタートアップを有効にする のチェックを外す。


 




■Superfetch


全体的なレスポンス向上に役立つらしいが、起動直後の勢い良く使いたいときにこれが動くことでディスクアクセスが100%になり、イライラしか生まない。

→ 空き時間に動かしゃいいのに。


コマンドプロンプトから services.msc を起動、Superfetchのプロパティを開く。

スタートアップの種類を無効にし、サービスを停止して、OKボタンを押す。


 




よほどの自信作なんですなぁ。

どうしても使わせたい形なんだろうけど、こちらとしてはどうしても使いたくない形なんですよね、困ったものです。


 


それはそうと、Google日本語入力も学習結果がリセットされてね?あれもびっくり。


「n」を変換するとNGになったり、「なのか」を変換すると7日になったりと、個人的には絶対に行わない変換候補が先頭に出てきて、前後のフレーズが変わると根強く7日になっていたのを根気強く学習させて使いやすくしてたのに…

Ubuntu18.04に移行 SSHと静的IPアドレス、IPv6無効化、タイムゾーン設定

$
0
0

Ubuntu18.04がリリースされ、利用させてもらっている主要パッケージが対応していることがわかったので、色々と整理しながら徐々に新システムに移行しようと考えた。


利用しているサービスが増えてきたからLDAPを導入しようとか、よくよく考えるとAndroidからVPN接続できていないからなんとかしようとか、夢広がリング。


それと、今までお世話になってきたデスクトップは入れない方向で考えている。運用を始めた頃にはGUIは簡単と思っていたのだけれど、自分的に割とコマンドでできることが増えてきた。余計なものを動かさないシンプルさを求め、デスクトップなしで頑張ってみよう。


まずは、Ubuntu18.04 Server をダウンロード

インストールはとっても簡単、インストール時に日本語は選べないようなので英語にした。

それと、インストールの段階でIPアドレスを手動で固定した。


インストール直後にログインしたら、このメッセージが表示された。


Ubuntu 18.04 LTS hogeserver tty1

hogeserver login: hoge
Password:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

System information disabled due to load higher than 1.0

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), user "sudo ".
See "man sudo_root" for details.

hoge@hogeserver:~$ _

このまっさらな感じがステキ。




■公開鍵暗号を用いた接続


SSHDは最初から入ってるので、公開鍵暗号を用いた接続に切り替えていく。

本来はクライアント側で秘密鍵と公開鍵を作り、サーバーに公開鍵を渡す…という事のようなんだけれど、クライアント側がWindowsなので、サーバー側で鍵を作り秘密鍵をクライアントに持ってくることにした(いつもサーバー側で作業するから、サーバーとクライアントの意味を取り違えて、仕組みを上手く理解できずにいた…)。

※参考サイト

【Linux/Ubuntu】SSH公開鍵認証の設定方法

SSHでリモートホストに接続する前にやっておくと便利なことは? ssh-keygenコマンド

公開鍵暗号を用いてのSSH接続(きほん)

お前らのSSH Keysの作り方は間違っている


$ cd
$ mkdir .ssh
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hogeuser/.ssh/id_rsa):何も入力せず[Enter]
Enter passphrase (empty for no passphrase):パスフレーズを入力[Enter]
Enter same passphrase again:同じパスフレーズを入力[Enter]
Your identification has been saved in /home/hogeuser/.ssh/id_rsa.
Your public key has been saved in /home/hogeuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qD3z4gGcRjNr2q2la85hbn++nm7MmDfI6pjwRgqlgp0 hogeuser@hogeserver
The key's randomart image is:
+---[RSA 4096]----+
|O*B+ |
|BoO+. |
|OO = . |
|*+* = + o |
|++ B.o+ S |
|+.*.*. o |
| +.E |
| |
| | ← これは作成の都度変わる
+----[SHA256]-----+
$ ll ~/.ssh
total 16
drwxrwxr-x 2 hogeuser hogeuser 4096 May 19 04:46 ./
drwxr-xr-x 5 hogeuser hogeuser 4096 May 19 04:42 ../
-rw------- 1 hogeuser hogeuser 3326 May 19 04:46 id_rsa
-rw-r--r-- 1 hogeuser hogeuser 745 May 19 04:46 id_rsa.pub

これで秘密鍵と公開鍵ができた。


サーバー側でauthorized_keysに公開鍵(id_rsa.pub)を追記し、パーミッションを変更。


$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ ll ~/.ssh
total 20
drwxrwxr-x 2 hogeuser hogeuser 4096 May 19 09:37 ./
drwxr-xr-x 5 hogeuser hogeuser 4096 May 19 09:36 ../
-rw------- 1 hogeuser hogeuser 745 May 19 09:37 authorized_keys
-rw------- 1 hogeuser hogeuser 3326 May 19 04:46 id_rsa
-rw-r--r-- 1 hogeuser hogeuser 745 May 19 04:46 id_rsa.pub

クライアント側のWindowsのどこに秘密鍵を置くのが正しいのか…見られなそうなところって…

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\teraterm

あたり?に ~/.ssh/id_rsa の中身をテキストに貼り付けて配置。


Teratermでこのファイルを利用して接続を試し、問題なければパスワード認証をやめる。


$ sudo vi /etc/ssh/sshd_config

HostKey /etc/ssh/ssh_host_rsa_key ← (1)コメントになっていたのを外に出す(鍵接続許可)
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PasswordAuthentication no ← (2)追加してパスワード接続をできなくする
#PermitEmptyPasswords no

$ sudo systemctl restart ssh

最後、サーバー上にある id_rsa を削除すればOKっぽい。




■静的IPアドレスの設定


当面IPv4のみとして、インストール時に静的IPアドレスを設定したが、変更するときにはどこで何をするのか…。答えはここに。


※参考サイト

Ubuntu 18.04 LTSで固定IPアドレスの設定


サイトに従って実際に中身を見てみると…


$ sudo vi /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
addresses:
- 192.168.77.55/24
gateway4: 192.168.77.1
nameservers:
addresses:
- 192.168.77.231
search:
- hogeserver.hogeddns.jp
optional: true
version: 2

となっていた。


変更したらこのコマンドで反映させるそうな。


$ sudo netplan apply

 




■IPv6無効化


IPv6を無効化する場合は以下で行う。昔書いた /etc/sysctl.confに書き込む手は一時的には使えるんだが、再起動すると戻ってしまう。

※DNS管理の知識が足らないので、トラブルが起きないように…

How to disable IPv6 on Linux


恒久的に反映させるならGrubの設定が必要、赤文字部分を追記し…


/etc/default/grub


・・・
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
・・・

以下のコマンドでGrubに反映。


$ sudo update-grub

これでIPv6は無効化する。


 




■タイムゾーンの設定


ログを見たらタイムゾーンがUTCだ。解決策はここに。

Qiita / [Ubuntu16.04] timezoneの確認と設定


$ timedatectl ← 現状確認
Local time: Sun 2018-05-20 06:00:12 UTC
Universal time: Sun 2018-05-20 06:00:12 UTC
RTC time: Sun 2018-05-20 06:00:12
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
$ sudo timedatectl set-timezone Asia/Tokyo ← タイムゾーン設定
$ timedatectl ← 反映結果の確認
Local time: Sun 2018-05-20 15:05:11 JST
Universal time: Sun 2018-05-20 06:05:11 UTC
RTC time: Sun 2018-05-20 06:05:11
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

設定ファイルを一生懸命修正する方法もあるようだけれども、コマンドに任せたほうが安心感が高そうな気がする…




これからの道のりを想像すると、ワクワクとドキドキがないまぜになってやってくる。

どうかうまくいきますように…。


Ubuntu18.04に移行 Samba-ad-dc

$
0
0

従来、Sambaはファイル共有としただけ使ってきたが、SambaでActive Directoryが構築できることがわかり、最初にその環境を作ろうと考えた。


目指せシングルサインオン!


ということで、タイトルは「移行」だけど、前回に引き続きほぼまっさらからのインストールとなる。


ドメイン参加とかあるので、テストのために評価版のWindows10を利用させていただくことにする。





まずは学習。


Ubuntu documentation / Samba and LDAP (今回のインストールには影響なし)

Ubuntu documentation / Kerberos (今回のインストールには影響なし)

【新人研修2016-5】 Samba4でActive Directory Domain Controller構築

Server World / Samba AD DC : サーバーの設定

ネットワークエンジニアとして / Kerberos Authentication

SUSE Linux Enterprise Server インストールおよび管理 / LDAPとKerberosの使用

Qiita / Samba4を用いたWindows/Linux認証統合とネットワークホームディレクトリ

Qiita / Samba4 を使用したKerberos バックエンドなSamba Active Directory を構築する


Kerberos認証やLDAP認証はインストールしただけでは動かない。slapd.confは廃止、設定にはコマンドを要求、中身まっさら。わかっている人にはとっても便利なもの、でもハードルが高かった…知識がないとシナリオから1mmでも外れると進まなかった(やってみたけどわからなかったんだよなー)。


それに引き換え、Sambaは使えるように使えるように後押ししてくれるようだ。これなら「やってみて足らなくなったら加える」方式で進められる!


今回やることを整理するとこんな感じに。



  • Sambaインストール

  • ツールを使ってActive Directoryを構築

  • 標準のresolverを停止させ、samba-ad-dcによる名前解決に移行

  • 認証系をsystemdからWinbinddに移行

  • Windowsからドメイン参加

  • ユーザー管理


 




■Sambaインストール


$ sudo apt update
$ sudo apt install samba
$ samba --version
Version 4.7.6-Ubuntu

sambaをインストールすれば諸々のツールも一緒に入ってくる…ということで、上記の通りインストール。


バージョンは4.7.6となっていた。


 




■ツールを使ってActive Directoryを構築


こちらを読ませていただいたところ、今のSambaは色々な機能を内包しているようだ。しかもだいぶ前から…

遂に登場!最新Samba 4.0系列のすべて


一気に設定をしたいが、考えを整理。



Kerberosを実装

過去トライして結局挫折したKerberos。Heimdal Kerberosのソースを取り込んでいるとのこと。

ぜひこれを便利に使いたい。


LDAPを独自実装

これも過去にトライして挫折。

ぜひこれも便利に利用したい。


DNSを実装

大規模には向かないとあるが、ウチの中だけで利用するDNSだから、これも便利に利用したい。


現在、内向きDNS(BIND9)を運用中。目的は2つ。



  1. LAN内の各種サーバーにFQDNでアクセスできるようにするため。

  2. DHCPと連携して互いがホスト名でアクセスできるようにするため。いわゆるDynamicDNS。


名前解決できないときによそのDNSに聞きに行くことができるみたいなので、運用中のDNSを聞きに行く先にすりゃOKだ。


将来的にはDHCPと連携させたいが、それはその時に考える。


NTP

これは外に用意しなければならない見込み。

今あるものを利用しつつ進める。



 


Kerberosとは

認証システムでシングルサインオン(SSO)を提供する。

組織は独自のRealm(レルム)を構成してKDC(Key Distribution Center)を配置、KDCにはAS(Authentication Server)、TGS(Ticket Granting Server)がある。Realmにあるマシン・サービスをPrincipalと呼ぶ。ユーザーがパスワードを入力するのはASに認証を受けるときだけで、Principalからサービスを受ける際にはチケットが利用されるため、パスワード漏洩の危険は最小限となる。


ということらしい。さて…


Realmは自分の責任範囲。ウチの場合は *.hogeserver.hogeddns.jp のすべてが責任範囲である。

これが大きな組織だったりすると、*.section.hogeserver.hogeddns.jp とかになるかもしれない。

WindowsなActive DirectoryにおけるDomain(ドメイン)はRealmと同義とのこと。


┌─────────────────────┐
│hogeserver(hogeserver.hogeddns.jp) │
│ ┌───┐┌────┐┌──────┐ │
│ │Kopano││Alfresco││Openmeetings│… │
│ └───┘└────┘└──────┘ │
└─────────────┬───────┘
────┬──────┬──┴────────── hogeserver.hogeddns.jp
┌───┴──┐┌──┴──┐ Realm = HOGESERVER.HOGEDDNS.JP
│Openmeetings││ livingPC │・・・ Domain= MYHOME とした
└──────┘└─────┘

Windows的に考えると、DomainはHOGESERVERにしたいなーと思ったりしたが、その設定だとエラーが発生する。ノード名がhogeserver.hogeserver.hogeddns.jpとなって何か(グループ名?)とバッティングするから許してもらえない模様。以下をよく読んで決める。

Active Directory Naming FAQ


 


samba-toolsについては以下にmanpageの翻訳あり。

日本 Samba ユーザ会 / Samba ドキュメント翻訳プロジェクト


その他、参考サイトのコマンド例を見ながら、以下の通りとした。


$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.001 ← smb.confがあるとエラーになる
$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [NETWORKNAME.PROVIDER.NE.JP]: HOGESERVER.HOGEDDNS.JP[Enter] ← 責任範囲を大文字で
Domain [HOGESERVER]: MYHOME[Enter] ← smb.confの中では globalセクションでworkgroup=MYHOME指定になる
Server Role (dc, member, standalone) [dc]:[Enter]
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: [Enter]
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.53]: 192.168.33.231[Enter] ← とりあえず、内向きDNSに向けておく
Administrator password:アルファベットと数字と記号を混ぜたパスワード[Enter]
Retype password:同じの[Enter]
Looking up IPv4 addresses
Looking up IPv6 addresses
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=hogeserver,DC=hogeddns,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=hogeserver,DC=hogeddns,DC=jp
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: hogeserver
NetBIOS Domain: MYHOME
DNS Domain: hogeserver.hogeddns.jp
DOMAIN SID: S-1-5-21-nnnnnnnnn-nnnnnnnnnn-nnnnnnnnnn

 


いたるところで教えてくれている --use-rfc2307 ってなんだろ?


ここ に「この拡張を追加することでUNIXの属性(ユーザーID,グループID,ホームディレクトリ等)をADに格納できるようになる」と書かれている。入れておかないと後々困ることが想定される。

後からこれを使うためには拡張のための手動設定が必要みたいなので、最初から設定しておこう。


なお、このオプションを使いつつ対話形式で進める場合には、--interactiveをつけないと"ERROR: No domain set!”と怒られる。


 


ということで…samba-toolが作ってくれた krb5.conf を所定の場所にコピーする。


$ sudo cp -a /var/lib/samba/private/krb5.conf /etc

 


ちなみに、できあがったsmb.confはこちら。IPv6を使わないので、その設定だけ加えておく。


/etc/samba/smb.conf


# Global parameters
[global]
dns forwarder = 192.168.33.231
netbios name = HOGESERVER
realm = HOGESERVER.HOGEDDNS.JP
server role = active directory domain controller
workgroup = MYHOME
idmap_ldb:use rfc2307 = yes

# IPv6を使わないようにする
bind interfaces only = yes

interfaces = 127.0.0.1 192.168.33.55

[netlogon]
path = /var/lib/samba/sysvol/hogeserver.hogeddns.jp/scripts
read only = No

[sysvol]
path = /var/lib/samba/sysvol
read only = No

 


はて…この共有は?

@it 第7回 Active Directoryの導入 (2/2)

@it SysvolフォルダとNetLogONフォルダについて



netlogon下位互換のために用意されているフォルダ。

sysvolの中のscriptsを共有。
sysvolグループのポリシーの設定ファイル等が保管される。

だそうです。


 




■標準のresolverを停止させ、samba-ad-dcによる名前解決に移行


内包しているDNSサービスを開始するにあたっては53番ポートを利用する必要があるが、標準でsystemed-resolveというDNSスタブに掴まれており、起動できない。


通常は使い続けるべきサービスなんだろうと思うが、一時的にもそうだし、将来的にも内向きDNSは必須なので、無効にする。


そして、systemed-resolveを無効化したら、/etc/resolv.conf を削除する。※削除しないと作った中身は再起動のたびに空っぽにされる。


$ sudo netstat -tulpn | grep :53 ← 現状確認
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 731/systemd-resolve
udp 0 0 127.0.0.53:53 0.0.0.0:* 731/systemd-resolve
$ sudo systemctl disable systemd-resolved.service
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
$ sudo rm /etc/resolv.conf

これで、/etc/resolv.conf が自動で作られることはなくなる。


改めて、/etc/resolv.conf を手動作成する。中身はこんな感じで。


domain hogeserver.hogeddns.jp
#search hogeserver.hogeddns.jp ← ドメインは1つだからseachでなくて良いはず
nameserver 127.0.0.1 ← sambaが内包しているDNSを利用

 


以降の操作は、名前解決ができずに以下のエラーが出るかも。気にしないで進める。


$ sudo hogehoge-command
sudo: unable to resolve host hogeserver: Resource temporarily unavailable

 


Sambaを普通にインストールすると、古いタイプのサービスが登録される模様。

以下にある方法で新しいサービスに切り替えて開始する。

Managing the Samba AD DC Service Using Systemd


$ sudo systemctl mask smbd nmbd winbind ← 従来のサービスをマスクする
Unit smbd.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/smbd.service → /dev/null.
Created symlink /etc/systemd/system/nmbd.service → /dev/null.
Created symlink /etc/systemd/system/winbind.service → /dev/null.
$ sudo systemctl disable smbd nmbd winbind ← 従来のサービスを無効化する
$ sudo systemctl unmask samba-ad-dc ← どうやらマスクされていたようなのでマスクを解除
Removed /etc/systemd/system/samba-ad-dc.service ← 結果 /dev/null へのシンボリックリンクが消える
$ sudo systemctl enable samba-ad-dc.service ← サービス有効化
$ sudo systemctl daemon-reload ← デーモンの再読込

 


ここで一回再起動。リゾルバとか変わってるので、いろいろ考えずにやれる再起動でサービス有効化。


$ sudo reboot

 


ただし、再起動すると「winbinddがないからエラー」ってのが起きる。この問題を解決するためにWinbindを再インストールなんかしてみたりして。

treedown’s Report / (2/2)sambaのActive Directoryが停止⇒起動しない:解決編


$ sudo apt install winbind
$ sudo reboot

 


設定がきちんと反映されているか確認する。


$ sudo systemctl status samba-ad-dc.service ← サービス起動しているか確認
samba-ad-dc.service - Samba AD Daemon
Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-06-03 20:07:48 JST; 7min ago
Docs: man:samba(8)
man:samba(7)
man:smb.conf(5)


$ sudo netstat -tulpn | grep :53 ← 53番ポートでsambaが活躍しているか確認
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1083/samba
udp 38400 0 0.0.0.0:53 0.0.0.0:* 1083/samba

$ ping google.co.jp ← ちゃんと名前解決できてる?
PING google.co.jp(xxxxxxxx-xx-xxx.xxxxx.net (nnnn:nnnn:nnnn:nnn::nnnn)) 56 data bytes
64 bytes from xxxxxxxx-xx-xxx.xxxxx.net (nnnn:nnnn:nnnn:nnn::nnnn): icmp_seq=1 ttl=54 time=7.42 ms

$ ping hogeserver ← ドメインにアクセスできそう?
PING hogeserver.hogeddns.jp (192.168.33.55) 56(84) bytes of data.
64 bytes from hogeserver.hogeserver.hogeddns.jp (192.168.33.231): icmp_seq=1 ttl=64 time=0.015 ms

いい感じ!


※この段階で、/etc/netplan/50-cloud-init.yaml に記載している nameservers の指定は意味をなさない。削除しても動作に問題は出なかった。


 




■認証系をsystemdからWinbinddに移行


Samba-AD-DCで認証を担当するのはWinbindd、これをPAM(Pluggable Authentication Module)の1つに加える。最初にライブラリをインストールする。


$ sudo apt install libpam-winbind

 


インストールすることで必要なファイルが書き換えられるが、念の為、以下のコマンドでWinbindが入っていることを確認。ついでに、ログイン時にホームディレクトリを作成する設定をする。


$ sudo pam-auth-update

x PAM profiles to enable:
x
x [*] Unix authentication
x [*] Winbind NT/Active Directory authentication ← Winbindを認証に利用
x [*] Register user sessions in the systemd control group hierarchy
x [*] Create home directory on login ← ログイン時にホームディレクトリを作成
x [*] Inheritable Capabilities Management
x

 


次にNSS(Name Service Switch/各種情報の検索順を指定するために利用される)にWinbindを指定する。最初にライブラリをインストールし…


$ sudo apt install libnss-winbind

 


/etc/nsswitch.confを書き換えて、ユーザーとグループの検索にWinbindが利用されるようにする。


# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

#passwd: compat systemd
#group: compat systemd
passwd: compat winbind
group: compat winbind
shadow: compat ← ここにはwinbindを加えない。wbinfoが失敗する可能性
gshadow: files

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

 


認証系が動き出すので、smb.confに追加で設定を書き入れる。


/etc/samba/smb.conf


# Global parameters
[global]
dns forwarder = 192.168.33.231
netbios name = HOGESERVER
realm = HOGESERVER.HOGEDDNS.JP
server role = active directory domain controller
workgroup = MYHOME
idmap_ldb:use rfc2307 = yes

# AD からすべての情報を取得(RFC2307も)
idmap config MYHOME:unix_nss_info = yes
# AD のユーザー属性 gidNumber からプライマリグループを取得
idmap config MYHOME:unix_primary_group = yes

# Winbind NSS info mode設定(RFC2307情報が未設定の場合のデフォルト値)
template shell = /bin/bash
template homedir = /home/%U

# ユーザー・グループの一覧を取得可能とする
# 一覧を取得するのに時間がかかる(ユーザーやグループが多い等)場合にnoへ
# yesの場合に getent passwd でユーザーが列挙される
winbind enum users = yes
winbind enum groups = yes


# IPv6を使わないようにする
bind interfaces only = yes
interfaces = 127.0.0.1 192.168.33.55

[netlogon]
path = /var/lib/samba/sysvol/hogeserver.hogeserver.hogeddns.jp/scripts
read only = No

[sysvol]
path = /var/lib/samba/sysvol
read only = No

当初、idmap config MYHOME:range など設定してみていたが、*:range と重なるからエラーと怒られていた。だが、これ、どうやらよそのドメインと接続するときに設定するもの?のようで、security = domain や security = ads のときにしか有効にならない、しかし、それだとsambaが起動しない。IDマップ管理はこっちでやるから黙っとけ、ということと認識して設定をやめた。


設定を変更したら、以下で再読込が可能。


$ sudo smbcontrol all reload-config

 


設定した結果をtestparmしてみると指摘事項が表示される。


$ sudo testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[netlogon]"
Processing section "[sysvol]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC

Press enter to see a dump of your service definitions

 


対策として以下。

okuの日記: net-fs/samba 3.6 → 4.1


/etc/security/limits.conf


#<domain>      <type>  <item>         <value>
* soft nofile 16384 ← 追記
# End of file

 


設定を反映させるために再起動。


$ sudo reboot

 


これで、Ubuntu側の設定は完了!


 




■Windowsからドメイン参加


おなじみの「システムのプロパティ」→「コンピュータ名」タブ→「変更...」ボタン→「コンピューター名/ドメイン名の変更」ポップアップでドメイン参加する。


ドメイン名として hogeserver.hogeddns.jp を指定し、ユーザー名 Administrator 、パスワードはsamba-toolを使ったときに入力したパスワードを指定。


ドメインから認証されると再起動を求められる。


再起動後にはユーザーとして hogeserver.hogeddns.jp\Administrator を指定してログインする。

後でわかったけど、MYHOME\Administrator でも同じらしい。


拍子抜けするほどすんなりできた~


 


設定の試行錯誤をしていた頃、ドメインに入ろうとするときに「内部エラー」が発生、どうも認証がうまくいかないようだった。

このときには、一度、エクスプローラーで hogeserver.hogeddns.jp にアクセスし、Administratorでアクセスすることで認証可能になったりもしたが、最終的にはwinbindを正しく設定できればサクッと認証されるみたい。

設定が整理できた後、一からやり直してみたらドンズバでドメインに参加できた。


 




■ユーザー管理


SambaのADを利用したIDマッピングについては ここ に詳しく書かれている。Microsoftが提供する「Active Directory ユーザーとコンピューター」を使えばIDはAD内で一意に一貫して管理され、必要に応じてUNIX属性 uidNumberを手書きすりゃUbuntu側のローカルユーザーと結び付けられるっぽい。


Windows 10 用のリモート サーバー管理ツール をダウンロードしてインストールする。

ぱっと見で以下のツール類がインストールされる。



  • Active Directory 管理センター

  • Active Directory サイトとサービス

  • Active Directory ドメインと信頼関係

  • Active Directory ユーザーとコンピューター


とりあえず、「Active Directory ユーザーとコンピューター」を利用してユーザーを作ってみる。


ユーザーログオン名は hoge@hogeserver.hogeddns.jp になるらしい。

昔の名前だと MYHOME\hoge だそうな…へー。


確かにこれらでWindowsからログインできる。


エクスプローラーで \\hogeserver にアクセスすると…



  • netlogon

  • sysvol


というネットワーク共有が見えている。パスワードは求められない。ファイルやフォルダを見ることができて、書き込みもOK。別ユーザーからは書き込みNG。想定通り。


 


さて、Ubuntuの側では、Active Directoryのユーザーとグループは以下で参照できる。


$ wbinfo -g ← グループ一覧
$ wbinfo -u ← ユーザー一覧

 


さらに、Winbindがnsswitch.confに設定されているから、以下のコマンドでも参照できるようになっているはず。


$ getent group  ← グループ一覧
root:x:0:
daemon:x:1:

winbindd_priv:x:114:
BUILTIN\administrators:x:3000000:
BUILTIN\users:x:3000009:
BUILTIN\guests:x:3000015:
BUILTIN\server operators:x:3000001:
BUILTIN\pre-windows 2000 compatible access:x:3000017:
MYHOME\denied rodc password replication group:x:3000005:
MYHOME\domain admins:x:3000004:
MYHOME\domain users:x:100:
MYHOME\domain guests:x:3000012:
MYHOME\domain computers:x:3000019:
MYHOME\schema admins:x:3000006:
MYHOME\enterprise admins:x:3000007:

$ getent passwd ← ユーザー一覧
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

hogeuser:x:1000:1004:hoge user:/home/hogeuser:/bin/bash
MYHOME\administrator:*:0:100::/root:/bin/bash
MYHOME\guest:*:3000011:100::/home/guest:/bin/bash
MYHOME\hoge:*:3000047:100:hoge user:/home/hoge:/bin/bash
MYHOME\user2:*:3000048:100:two user:/home/user2:/bin/bash

getent passwd でドメインユーザー名が列挙できなかったとき、以下を参考にした。

[Samba] getent only displays local users & groups


追加直後のユーザーを確認してみた。


$ id myhome\\user2
uid=3000048(MYHOME\user2) gid=100(users) groups=100(users),3000048(MYHOME\user2),3000009(BUILTIN\users)

※黄色部分はユーザーを作るたびにインクリメントされる。


作ったユーザー名を指定してsuとかでユーザを切り替えることができて、その際にホームディレクトリが自動で作られることまでわかった。


hogeuser@hogeserver:~$ su - myhome\\user2
Password:
MYHOME\user2@hogeserver:~$ pwd
/home/user2

 


さあ「Active Directory ユーザーとコンピューター」でUNIX属性を設定しようとしてみたら…Windows 10とWindows Server 2016 では、UNIX Attributes タブがMissingだった。

UNIX属性は「表示」→「拡張機能」を有効にしてあげると、プロパティ画面に「属性エディタ」が表示されるようになり、ここで設定できるようになっている。

以下、上記サイトから引用しつつ整理。



UsermsSFU30NisDomainNIS(Network Infomation Server)はIDやパスワード、/etcとかの情報を提供するサービスな模様。

NISを運用している場合には設定が必要なんだろうと思ったけれども、それにしてもSFU(Service for UNIX)って…今は判断がつかない。
uidNumberUser ID(UID)のこと。
gidNumberGroup ID(GID)のこと。

これは載ってなかったけど、設定するとプライマリグループになる。
loginShellユーザーがログイン時に利用するシェルを指定。

/bin/bash とかで良さそうだが、デフォルト値として設定済み。
unixHomeDirectoryユーザーのホームディレクトリで、これが存在しないとログインできないとか。

これもデフォルト値として設定済み。
primaryGroupIDユーザーは複数のグループに所属することができる。

ディレクトリやファイルを作成するとプライマリグループの所有権が設定される。

のハズだけど、更新するとエラーに…理由未確認
GroupmsSFU30NisDomain上と一緒。
gidNumberGroup ID(GID)のこと。

作成したユーザーの uidNumber は未設定だが、ここに Ubuntu側のUIDを設定してあげれば、ユーザーを結びつけることができた。


★重要★

一度、ユーザー情報を参照するとWinbinddは情報をキャッシュするので、Ubuntu側で古い情報が表示されてびっくりする。これは、以下でキャッシュをクリアすれば解消する。


$ sudo net cache flush

これは、ユーザーを削除したときなども同じ。

どうにもよくわからないが、それでもなお値が反映されず、5分位すると反映される場合も。何かのキャッシュなんだろうけど、最後の詰めが甘い…わかる方ぜひ教えてください。


ユーザーの情報をUbuntuで見たり編集したりするには、こちら。


$ sudo apt install ldb-tools
$ sudo ldbedit -H /var/lib/samba/private/sam.ldb

 


さぁ、移行を進めていこう!


 




■途中で調べたことメモ


testparm


設定が正しいのか確認するにはこれ。

とにかくSambaは優しい、なんとか動いてくれようとする。論理エラーがちょっと発生していても動いてくれたりするので、これでちゃんと確認しておかないと。


今回でいうと、以下の問題が発生していた…

ERROR: The idmap range for the domain * (tdb) overlaps with the range of MYHOME (ad)!

これに関しては、domain * って言われて…あぁ、レンジ設定とかしないのねAD-DCだし、となった。


ちなみに、-v をつけると、未設定のパラメータが埋まったものを出力してくれる。


 


ファンクションレベル


ちなみに、このバージョンのドメインレベルのデフォルトは 2008 R2 だった。


$ sudo samba-tool domain level show
Domain and forest function level for domain 'DC=hogeserver,DC=hogeddns,DC=jp'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
$ $ sudo samba-tool domain level raise --domain-level 2012_R2 --forest-level 2012_R2
ERROR: Domain function level can't be higher than the lowest function level of a DC!

これを 2012 R12 まであげようと思ったけど、エラーになった。


現在、Windows Server は 2016まで進んでいるけれど、Sambaの実装は 2008 R2 までの模様(2012 R2 に参加はできるみたいなことが書いてあったけど、試してないです)。

Microsoftは最低限2008まで上げておけといっており、最初からそのバージョンになっているので、OKと判断。


 


samba_dnsupdate


ドメインに参加できない事態が発生したり、ドメインに参加できているようでいてドメインの機能が使えない(実際はキャッシュでログオンしていた)かったりしたときに、これはDNSで名前解決ができていないのが駄目なんじゃ?と思って調べてみたもの。


それと、実は、IPv6のレコードが残っていて困っていたのもこのコマンドを調べた理由。


多分これでレコードをいろいろと編集できると思うが、今回は出番なしで終了。


 


systemdの起動順序


winbindが上手く起動しないとき、順序の問題が発生してるんじゃ?と疑って調べてみた。

systemdのサービスの起動順序を決める


実際は別の問題(winbindの再インストールで解消)だったが、有益な情報。


 


Winbindのキャッシュとユーザー削除に至るプロセス


で…suでログインしてホームディレクトリが作られた後、そのユーザーを「Active Directory ユーザーとコンピューター」で削除してみた。

getent passwd では表示されないが、ディレクトリの所有者として表示さている…はて?


$ id -nu 3000 ← IDからユーザー名を得る。このときはuidNumberに3000を設定していた
$ ls -ln ← ユーザーとグループをID表示

 


何が保管されているのか中身を見てみよう…


$ sudo ldbedit -H /var/lib/samba/private/sam.ldb --show-deleted

データとしては残っているみたい。


削除は3段階。[cifs-protocol] show-recycled and show-deleted LDAP controls

第1段階 有効なオブジェクトが削除済みオブジェクトに変換される(isDeleted=TRUE)

第2段階 削除済みオブジェクトの保管期限を過ぎたら、再資源オブジェクト(資源ごみのイメージ?)に変換される(isRecycled=TRUE)

第3段階 再資源オブジェクトの保管期限を過ぎたら、資源ごみ回収(メモリ解放)される。


ただ、確認したオブジェクトは isRecycled=TRUE の段階にあって、もう単純復旧はできないレベルになっていた。中身を見て見る限り、削除前に設定した uidNumber 属性とかは残っていなかった。nsswitch.conf で winbindを外すと表示されない、じゃあ、Winbindは何を見てディレクトリの所有者の名前を表示しているのか…キャッシュか!


Samba Member Server Troubleshooting

UNIX属性を変更した後にもこれを実行すると反映される。


 




移行のためのまっさらな環境はVMware Playerで構築。

いつでもまっさらにしてやり直すことができるから、やってみて上手く行ったら手順を残し、最後の本番に備える…というやり方。


理解不十分なままやってみたら思ってたのと違う、別のやり方を探して…的なことを繰り返して理解を深めていく「体で覚えるタイプ」の進め方、仮想マシンだからできるこのやり方でぶつかりながら進んでいるけど、簡単に全容は掴めない。


でも、だからといって世界の素晴らしい技術者たちが長い時間を掛けて積み上げてきた技術を全部読んでから進める、つーのは重いよ…。


 


海外サイトだと、とりあえずこうやりゃできる!って形式の記事も多いけど、これはこれでもう少し意味を書いて欲しい。それでいて、詳しく!すると、複雑過ぎて頭に入ってこない。へっぽこSEが幸せになれる、程々なバランスで完全エスコートタイプの記事を誰か書いてくれてないかなー。と思っていたら、

Qiita / Samba4を用いたWindows/Linux認証統合とネットワークホームディレクトリ

に出会った。


4年前の記事であり、自分が考えていた方向とは少し違うけれどもとっても勉強になった。この記事のおかげでActive Directoryを始めることができた。感謝感謝!でした。


 


さて…これから移行を進めていくわけだけど、それぞれのシステムをSSOに対応させる必要があることから、単純移行と比べたら大変になるんだろうけど、できあがるシステムはきっと管理しやすいものになるだろう。…を夢見て進めよう。

Ubuntu18.04に移行 Samba内蔵DNSとDHCP

$
0
0

自宅で各種デバイスの電源を入れる…。すると、自動的にIPアドレス割り振られ(DHCP)、それぞれのホストに名前でアクセスできる(DynamicDNS)。自宅で運用しているサービスはインターネットからもアクセスするが、LAN内でも同じFQDNで名前解決できる(内向きDNS)。


いま、この環境をbind9とisc-dhcp-serverで実現している。


Samba-AD-DCを中心に据えた場合、これをどうすれば実現できるのか。



それにしても、Sambaには感謝である。前回記事で長く書いた通り、簡単にActive Directoryが構築できる。記事が長いのは基礎知識のオンパレードだったからで、やること自体はものすごく少ない。


ただ…なんか、内蔵DNSとisc-dhcp-serverの連携方法がほとんど見つからないんですが、これは?


SambaWikiにはBIND9をバックエンドにした場合の設定が書かれている。

SambaWiki / Configure DHCP to update DNS records with BIND9


考え方を探してみると…

StackExchange / ISC DHCP with Active Directory Secure Dynamic DNS Updates

Active DirectoryにおけるDNS更新にはKerberos認証が使われ、ISC DHCP は TSIG をサポートしている、と。


その他を色々と見てみて

・DHCPでIPアドレスを貸し出すときに、DNS更新をするスクリプトを呼び出す。

・グループDnsAdminsに含まれるユーザーがDNSを更新する。

とすれば良さそうなことがわかった。


やり方はここらへんに。

SambaWiki / Configure DHCP to update DNS records with BIND9

ArchLinux / Samba/Active Directory ドメインコントローラ

Michael Kuron's Blog / ISC DHCPd: Dynamic DNS updates against secure Microsoft DNS


 




じゃあやってみましょう。



  • DHCPサーバーのインストール

  • DynamicDNSを実行するためのユーザーを作成

  • DynamicDNSを実現するためのスクリプトをインストール

  • スクリプトが利用するKerberosクライアントをインストール

  • AppArmorの設定

  • DynamicDNSを実行するユーザーの鍵ファイルを取り出す

  • 逆引きゾーンの作成

  • DHCPのイベントにスクリプトを登録

  • 動作の確認


※あえて細かく分割。今回はちょっと手作業が多いかも。


 




■DHCPサーバーのインストール


選択肢はどのくらいあるのか。


ISC DHCP server検索するとすぐに目につく、自らを古典的と名乗るシステム。

今、Keaを開発しているので、そちらでニーズが満足できるならそっちを使ってくれと書かれている。
Kea DHCP server現在、積極的に開発を進めているとのこと。

リースとホスト予約をデーターベースで管理する。

クライアントとリレーが含まれないとされる。
BusyBox DHCP組み込み系に強いBusyBoxが提供するDHCP。

サイズは小さいけどすべての機能が盛り込まれる。
MAAS DHCPベアメタルを提供するサービスMAASの一部。

興味が沸き起こったが、うちの場合は根底が変わるっぽい。
OpenDRIM DHCP正直なところ、情報が少ない…
UEC Provisioning DHCP小規模ならこれで十分、と書かれているが、これも情報が少ない。
WIDE-DHCPv6KAMEプロジェクトが提供するDHCP。

ちょっと古そうな気配。
DHCP module for FreeRADIUSRADIUS認証サーバーを提供、その中でDHCPをサポート。データベース他の様々なデータストアを処理できる。

探すパワーが、だってisc-dhcp-serverの情報ばっかり出てくるから…

でもまぁ見た感じ、ISCかBussyBoxかなぁ、下手にDBとか言われると自分的には扱いきれない。結局、参考文献の多いISCにしようかと思った。Ubuntu12時代からお世話になってるし。


ということで、インストール。


$ sudo apt update
$ sudo apt install isc-dhcp-server
$ dhcpd --version
isc-dhcpd-4.3.5

バージョンは4.3.5となっていた。


インストールするとユーザー dhcpd が追加されている。


$ getent passwd
dhcpd:x:111:115::/var/run:/usr/sbin/nologin

 


設定ファイルは2つに別れている模様。

/etc/dhcp/dhcpd.conf

/etc/dhcp/dhcpd6.conf


IPv6は当面使わないので、コチラだけ変更。

/etc/dhcp/dhcpd.conf



# option definitions common to all supported networks...
# クライアントがホストの名前解決を行う際のドメイン名
option domain-name "hogeserver.hogeddns.jp";
# クライアントが利用するDNSサーバー
option domain-name-servers 192.168.33.231; ← このサーバーのIPアドレス

# クライアントが貸出期間を要求しない場合の貸出時期間(秒) 24時間
default-lease-time 86400;
# クライアントが貸出期間を要求した場合の最大貸出時間(秒) 1週間
max-lease-time 604800;


ddns-update-style none; ← 最終的に別の方法で更新するのでそのまま


# 将来唯一のDHCP、今もNAT配下で唯一のDHCPなので権威をもたせたい
authoritative; ← 先頭の # を外して有効化


# NAT配下のネットワークに合わせてサブネットの宣言
subnet 192.168.33.0 netmask 255.255.255.0 {

# --- default gateway
option routers 192.168.33.2;

# --- NTP server ※まだNTPサーバー機能をセットアップしてないので既存を利用
option ntp-servers 172.16.119.231;

# --- Timezone -9:00 ※dhcpd.leasesに影響?試したけど、効果が見えない
# option time-offset -18000;

# --- Lease range setting
range 192.168.33.64 192.168.33.128;
}

 


設定できたら、サービスを再起動。


$ sudo systemctl restart isc-dhcp-server

 


これで、IPアドレスが提供されるようになる。


 




■DynamicDNSを実行するためのユーザーを作成


まずは、Windows10の方から「Active Directory ユーザーとコンピューター」でユーザー dhcpd を追加。


・ユーザー名を dhcpd とした。
・パスワードを dhcpd#passw0rd とした。複雑性(英数字記号を含む)が求められるため。ログインしないのだからランダムが最良だがテスト動作で使ったりするかもなので今回はこれを設定。
・パスワードは 無期限 とした。サービス提供用のため。
・ユーザーをグループDnsAdminsに入れた。
 
・UNIX属性を設定し、Ubuntu側の dhcpd と合わせた。
 uidNumber = 111
 gidNumber = 115
 unixHomeDirectory = /var/run
 loginShell = /usr/sbin/nologin

 


これがシステムにどのように反映されているのかUbuntu側で確認してみる。


$ sudo net cache flush ← これをやっておかないと古い情報が表示されるケースも
$ getent passwd

dhcpd:x:111:115::/var/run:/usr/sbin/nologin
MYHOME\dhcpd:*:111:100::/home/dhcpd:/bin/bash

$ id myhome\\dhcpd
uid=111(dhcpd) gid=115(dhcpd) groups=115(dhcpd),100(users),3000039(MYHOME\dnsadmins),3000009(BUILTIN\users)

 


多分大丈夫だろう。ちなみに、unixHomeDirectoryとloginShellはsmb.confで設定した内容がそのまま表示されている。もしも問題になったら調べることにして先に進む。


 




■DynamicDNSを実現するためのスクリプトをインストール


そもそもSamba Internal DNSとの連携情報が少ない中で、

ArchLinux / Samba/Active Directory ドメインコントローラ

ここに貴重な情報がぎっしりと書かれていた。ぜひ、この情報を活用したい…


ということで、ここで取り上げられている aur-samba-dhcpd-update を使わせていただくことに。


これは、DHCPのイベントが発生したときに呼び出すスクリプトで、スクリプトの中でケルベロスのチケットを発行して samba-tool を呼び出し、DNSの状態を適切に更新してくれるとっても良くできたツール。


ただ、これUbuntuのパッケージにはなっていないため apt でインストールできないので、ダウンロードしてきて手動で設置することにした。


ダウンロード先は以下。

GitHub / djlucas/aur-samba-dhcpd-update

ここで [Clone or Download] ボタンから [Download ZIP] を選択してダウンロードしてみた。

これを Teratermの SSH SCP... でサーバーに送り込む(送り込む方法は何でもいい)。


unzipコマンドをインストールして展開し、スクリプトが想定する場所に[ほぼ]配置する。


$ sudo apt install unzip
$ unzip aur-samba-dhcpd-update-master.zip

$ cd aur-samba-dhcpd-update-master
$ sudo cp -a samba-dnsupdate.sh /usr/bin
$ sudo chown root:root /usr/bin/samba-dnsupdate.sh
$ sudo chmod 755 /usr/bin/samba-dnsupdate.sh

$ sudo cp -a dhcpd-update-samba-dns.sh /usr/bin
$ sudo chown root:root /usr/bin/dhcpd-update-samba-dns.sh
$ sudo chmod 755 /usr/bin/dhcpd-update-samba-dns.sh

$ sudo cp -a dhcpd-update-samba-dns.conf /etc/dhcp
$ sudo chown root:root /etc/dhcp/dhcpd-update-samba-dns.conf
$ sudo chmod 644 /etc/dhcp/dhcpd-update-samba-dns.conf

 


スクリプトが読み込む conf ファイルは想定と違っているので変更。

/usr/bin/dhcpd-update-samba-dns.sh


#!/bin/bash
# Begin dhcpd-update-dns.sh

#. /etc/dhcpd/dhcpd-update-samba-dns.conf || exit 1
. /etc/dhcp/dhcpd-update-samba-dns.conf || exit 1

 


作られた当時と isc-dhcp-server の動きが違う可能性。これを追記する。

/usr/bin/samba-dnsupdate.sh



DEL)
kerberos_creds
HNAME=$(host $IP | awk '{print$5}' | cut -d . -f 1)
host -t A $HNAME.$DOMAIN > /dev/null
if [ "${?}" == 0 ]; then
delete_host
fi

 


スクリプトの動作設定は以下の通りとする。

/etc/dhcp/dhcpd-update-samba-dns.conf


# Variables
KRB5CC="/tmp/dhcpd4.krb5cc" ← チケット名らしい
KEYTAB="/etc/dhcp/ddns-keys/dhcpd.keytab" ← ちょっと先で作成する keytab を指定
DOMAIN="hogeserver.hogeddns.jp"
REALM="HOGESERVER.HOGEDDNS.JP"
PRINCIPAL="dhcpd@${REALM}"
NAMESERVER="hogeserver"
ZONE="${DOMAIN}"

※このconfファイル、多少繊細なところがあるので注意して設定。


 


 




■スクリプトが利用するKerberosクライアントをインストール


aur-samba-dhcpd-updateは kinit と klist を使用する。

利用可能なパッケージは2つ(heimdal-clients, krb5-user)あり、どちらでも問題なく動作しそう。


今回は heimdal-clients を利用させていただいた。


$ sudo apt install heimdal-clients

 


 




■AppArmorの設定


dhcpdからaur-samba-dhcpd-updateを呼び出そうとすると、AppArmorに弾かれる。


そもそも、AppArmorって?



引用 Wikipedia / AppArmor

各プログラムにセキュリティプロファイルを結びつけ、プログラムのできることに制限をかけるプログラムである。



ということで、aur-samba-dhcpd-updateやそれが呼び出すモジュールを実行できるように、AppArmorに設定を加えていく。

Ubuntu Manuals / apparmor.d


どうやら、ここにおいたファイルは読み込まれるみたいなので、ファイルを作ってみる。

/etc/apparmor.d/dhcpd.d/samba-dhcp-update


#include <abstractions/base>
#include <abstractions/lxc/container-base>
/usr/bin/samba-dnsupdate.sh rix,
/usr/bin/cut mix,
/etc/ld.so.cache r,
/run/systemd/journal/dev-log/** rw,

※はっきりいうが、この設定には自信がない。それでも、なんとか動きそう。


設定が終わったら、AppArmorを再起動する。


$ sudo systemctl restart apparmor.service

 


 




■DynamicDNSを実行するユーザーの鍵ファイルを取り出す


dhcpdユーザーのKerberos keysをキータブに出力する。


$ sudo samba-tool domain exportkeytab /etc/dhcp/ddns-keys/dhcpd.keytab --principal=dhcpd@MYHOME
Export one principal to /etc/dhcp/ddns-keys/dhcpd.keytab
$ sudo ls -l /etc/dhcp/ddns-keys/dhcpd.keytab
-rw------- 1 root root 382 Jul 7 19:44 /etc/dhcp/ddns-keys/dhcpd.keytab
$ sudo chgrp dhcpd /etc/dhcp/ddns-keys/dhcpd.keytab ← dhcpdグループに変えて
$ sudo chmod 640 /etc/dhcp/ddns-keys/dhcpd.keytab ← dhcpdグループでも読めるようにする

Principalとして MYHOME\\dhcpd 等を指定してみたが、うまくキータブが出力されない。この書き方でどうにか。


出力された /etc/dhcp/ddns-keys/dhcpd.keytab に中身があることを確認すべき

名前の間違いがあった場合でもエラー表示がされないから、ファイルの中身がない場合も。


 




■逆引きゾーンの作成


DynamicDNSをやろうとするとき、スクリプトが逆引きゾーンも管理してくれるので、作っておこう。


$ samba-tool dns zonecreate hogeserver 33.168.192.in-addr.arpa -U Administrator
Password for [MYHOME\Administrator]: パスワードを入力[Enter]
Zone 33.168.192.in-addr.arpa created successfully

 


 




■DHCPのイベントにスクリプトを登録


これも、ArchLinux / Samba/Active Directory ドメインコントローラに書かれている情報をそのまま利用させていただく。


具体的には、赤文字を追加。

/etc/dhcp/dhcpd.conf



# こんなサブネットで運用するという宣言
subnet 192.168.33.0 netmask 255.255.255.0 {

# --- default gateway
option routers 192.168.33.2;

# --- NTP server
option ntp-servers 172.16.119.231;

# --- Timezone -9:00
# option time-offset -18000;

# --- Lease range setting
range 192.168.33.64 192.168.33.128;

# --- DynamicDNS
on commit {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientName = pick-first-value(option host-name, host-decl-name);
execute("/usr/bin/dhcpd-update-samba-dns.sh", "add", ClientIP, ClientName);
}
on release {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
set ClientName = pick-first-value(option host-name, host-decl-name);
execute("/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);
}
on expiry {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
# set ClientName = pick-first-value(option host-name, host-decl-name); ←期待通りに動作しない
# execute("/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);
execute("/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP);
}
}

 


設定を変えたら再起動。


$ sudo systemctl restart isc-dhcp-server

 




■動作の確認


以下でログの出力状況を見ながら…


$ tail -f /var/log/syslog

 


いろいろな設定を変えているので、再起動してからテストしたほうが無難かもしれない。


Windows側で ipconfig /renew コマンドや、NICの無効化→有効化 等を行えばDHCPへのリクエストが飛ぶので、その後にへんてこなエラーが出力されないか確認する。


以上で設定完了。


 




■やってみたこと


Samba-AD-DCのIPアドレス変更


実は、DHCPのテストのため、仮想マシンたちをNAT配下に収めた。その場合にやらなきゃならないことはここに書かれている。

Samba Wiki / Changing the IP Address of a Samba AD DC


 


バックアップを取るように書かれているが…今はHDDイメージを取ってあるから、それでいいや。

IPアドレスをnetplanで変えてから、DNSのレコードを書き換える。


$ samba-tool dns update 192.168.33.231 hogeserver.hogeddns.jp hogeserver A 172.16.149.231 192.168.33.231 -U Administrator
Password for [MYHOME\Administrator]:
Record updated successfully

 


自分自身をクラスB(172.16.149.231)からクラスC(192.168.33.231)へ移動しており、これを反映させた。更新したいサーバーは自分自身だがIPアドレス指定 or localhost にしないと届かない。何故なら hogeserver で名前解決すると古いIPアドレスにアクセスしに行ってしまうから。


これ以外の登録情報は以下のツールで一発解決。


$ sudo samba_dnsupdate --verbose

 


何をどう更新すればいいの?つーか何が登録されているの?については以下で確認。


どんなゾーンがあるの?

hogeserver.hogeddns.jpゾーンはどんなゾーン?

hogeserver.hogeddns.jpゾーンに登録されているレコードは?


の順で確認している。


$ samba-tool dns zonelist hogeserver -U Administrator
Password for [MYHOME\Administrator]:
2 zone(s) found

pszZoneName : hogeserver.hogeddns.jp
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : DomainDnsZones.hogeserver.hogeddns.jp

pszZoneName : _msdcs.hogeserver.hogeddns.jp
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : ForestDnsZones.hogeserver.hogeddns.jp


$ samba-tool dns zoneinfo hogeserver hogeserver.hogeddns.jp -U Administrator
Password for [MYHOME\Administrator]:
pszZoneName : hogeserver.hogeddns.jp
dwZoneType : DNS_ZONE_TYPE_PRIMARY


$ samba-tool dns query hogeserver hogeserver.hogeddns.jp hogeserver.hogeddns.jp ALL -U Administrator
Password for [MYHOME\Administrator]:
Name=, Records=3, Children=0
SOA: serial=3, refresh=900, retry=600, expire=86400, minttl=3600, ns=hogeserver.hogeserver.hogeddns.jp., email=hostmaster.hogeserver.hogeddns.jp. (flags=600000f0, serial=3, ttl=3600)
NS: hogeserver.hogeserver.hogeddns.jp. (flags=600000f0, serial=110, ttl=900)
A: 192.168.33.231 (flags=600000f0, serial=110, ttl=900)
Name=_msdcs, Records=0, Children=0
Name=_sites, Records=0, Children=1
Name=_tcp, Records=0, Children=4
Name=_udp, Records=0, Children=2
Name=DomainDnsZones, Records=0, Children=2
Name=ForestDnsZones, Records=0, Children=2
Name=hogeserver, Records=1, Children=0
A: 192.168.33.231 (flags=f0, serial=2, ttl=900)
Name=W10TRIAL, Records=1, Children=0
A: 192.168.33.64 (flags=f0, serial=3, ttl=1200)

 


クライアントのIPアドレス変更


まだ、DynamicDNSの設定ができていない段階で、クライアント側(Windows10)のIPアドレスを変更したくなった。


・isc-dhcpd-server を止めてリースファイル /var/lib/dhcp を削除。

・samba-tool dns update でクライアント側のIPアドレスを書き換え。

・sambaのキャッシュをクリア。 net cache flush

・isc-dhcpd-server を再開。

・クライアント側でNICを無効化→有効化。


これを手動でやろうと思ったら大変だ。DynamicDNSの設定はやっぱり必要なんだろうなぁと思った。


 


別のユーザーで実行してみる


設定してみたものの、とにかく色々なエラーが出て困った。

以下の通り dhcpd ユーザーでコマンドを実行してみてデバッグした。


$ sudo -u MYHOME\\dhcpd dhcpd-update-samba-dns.sh add 192.168.33.64 W10TRIAL

 


以下は発生したエラーとその対応について記載したもの。


kinit: krb5_init_creds_set_keytab: Failed to find dhcpd@HOGESERVER.HOGEDDNS.JP in keytab FILE:/etc/dhcpd/dhcpd.keytab (unknown enctype)
→ このエラーは1.キータブが正しく出力できていない 2.AppArmerで読み込みがブロックされている 等で発生。
  キータブを出力する際のPrincipalを dhcpd@MYHOME に修正して対応。

dhcpd: Removing A record for host W10TRIAL with IP *ここにIPアドレスが出ていない* A from zone hogeserver.hogeddns.jp on server hogeserver
ERROR(runtime): uncaught exception - (-1073741811, 'An invalid parameter was passed to a service or function.')
→ スクリプトの途中で host -t A クライアント名 で取り出したIPを取り込んでいる。
  ドメイン名が間違っていたためにIPが引けずにエラーになっていた。/etc/dhcp/dhcpd-update-samba-dns.conf を修正して対応。
  この問題は探しても「BUG」って出てたようで一瞬絶望したけど、単なる設定ミスだった。ログの出方の問題。

dhcpd: Removing PTR record 64 with hostname recor from zone 33.168.192.in-addr.arpa on server hogeserver
ERROR(runtime): uncaught exception - (9714, 'WERR_DNS_ERROR_NAME_DOES_NOT_EXIST')
→ 逆引きゾーンがなかったので追加して対応。サーバーのIPアドレスから名前は明白、上記赤文字の通りとした。

dhcpd: Adding PTR record 64 with hostname W10TRIAL to zone 33.168.192.in-addr.arpa on server hogeserver
ERROR(runtime): uncaught exception - (1383, 'WERR_INTERNAL_DB_ERROR'
→ ユーザーがグループ DnsAdmins に入っていなかったので入れた。その上で、再起動。再起動しないと復旧しなかった。

 


AppArmorメモ


設定がとにかくよくわからない。情報がぁ…


ubuntu manuals / apparmor.d - syntax of security profiles for AppArmor.


 


いずれにしても、よくわからない。


aa-complain ← 指摘するだけして実行はさせる


aa-enfoce ← ルールを厳格に適用


$ sudo aa-complain /usr/sbin/dhcpd
Setting /usr/sbin/dhcpd to complain mode.

 


この状態で、IPアドレスを再発行させて・・・


$ sudo aa-logprof
Reading log entries from /var/log/syslog.
Updating AppArmor profiles in /etc/apparmor.d.
Enforce-mode changes:

$ sudo aa-enforce /usr/sbin/dhcpd
Setting /usr/sbin/dhcpd to enforce mode.

なんにも出ないのが不気味。


 


設定を変えたら、設定を読み込み直す。


$ /etc/apparmor.d/usr.sbin.dhcpd | sudo apparmor_parser -r

 


全部読み込み直し!という場合は以下。そんなに時間の掛かるものでもないからこっちのが楽かも。


$ sudo systemctl restart apparmor.service

 


なかなか情報がなくて、以下を参考に。


English version of IT College wiki / Apparmor and its usage


※manを見ろとか書いてるコメントがどっかのコミュニティにあったけど、見ても全然わからないよ、公式なマニュアルみたいなものが全然ないよ、どこに書いてんの?


こんなのが出てるわけだけど…


Jul 1 15:58:40 hogeserver kernel: [19505.650202] audit: type=1400 audit(1530428320.000:5318952): apparmor="AUDIT" operation="getattr" profile="/usr/sbin/dhcpd" name="/usr/bin/cut" pid=4112 comm="samba-dnsupdate" requested_mask="r" fsuid=111 ouid=0

 


audit監査ツールが出したログであると示している。
typeどこにもなんにも載ってない。1400??
audit(time:id)タイムスタンプ、イベントごとに振られるID。IDで追いかけると関連するものが拾える模様。
apparmorDENIEDやALLOWEDが出力されている場合には動作がわかりそう。問題はAUDIT、これなんだ?
operation行われた操作が何かを表す。

getattr しているらしい。openとかもある。
profileこの監査に利用された設定情報。

/etc/apparmor.d/usr.sbin.dhcpd が使われたことになる。
name操作されようとしたファイル。ここでは、/usr/bin/cutが対象。
pid実行時のプロセスID。
comm実行されたコマンド。ここでは samba-dnsupdate が実行されている。
requested_maskリクエストされた要求。ここでは read。
denied_mask拒否された場合に表示される、拒否された要求。

出力されていないのは、ここでは拒否されていないから。
fsuidフィルシステムID ←??
ouidオブジェクトオーナーID ←??

とりあえず動く…を目指すためには apparmor="DENIED"のときに、対象となるファイル(name)に対して何をしようとしていたのか(requested_mask)を調べて、それを追記していけばいいみたい。


 




 


もしかして…これでできちゃったんじゃない?InternalなDNSでDynamicDNSな環境が!

しっかりと内向きDNSとして動いてくれそうだ!


情報が少なくてなかなかに大変だったけど、手動でインストールしたスクリプトがどんなことをしているのかもだいぶ理解できたので、今後何かが起きたときにもどうにか対処できるんじゃないかな。


 

Windows10からLinkstationにアクセスできない

$
0
0

LinkstationにWindows10からアクセスできない問題の根本解決は、CIFSによるアクセスができるようにする設定変更じゃなく、LinkstationにSMB2.0以上でアクセスできるようにすること。


LS-CHL-V2は古い機種のためかSMB2.0以上に対応していない。でも、Linkstationって中身Linuxとか聞いたことあるし、だとしたらできないことはなさそうだけど…。


ということで少し怪しげな扉を開けることに。


ターゲットの型番は LS-CHL-V2 、ファームウェアは 1.74 。





Topic: FW supporting SMB V2 にかかれているURLを見たら「やるしかない」的な空気を感じる。そう…


現在利用しているLS-CHL-V2はWebの設定画面からSMB2.0以上を選べないので、ハッキングしてSambaの設定をいじってSMB2.0以上のアクセスができるようにすればいいみたい。


いろいろと自由にいじれるようにするにはSSHで接続ができるようにするのがいいと思うけど、現時点で困っているのはSMB2.0以上のアクセスができない点だけなので、そこだけ直す方向で考えることにした。


ということで、やること。


・ACP Commander をダウンロードする。
・SSHで接続できるようにする。
・Sambaの設定を変える。


で良さそう。


 




■ACP Commander をダウンロードする


ACP Commander というのは、外からLinkstationにコマンドを実行させることができるツールな模様。


NAS-CENTRAL → Buffalo@NAS-Central とたどって、Downloadsをクリック。


TOOLS/ALL_LS_KB_ARM9/ACP_COMMANDER を見ると acp_commander.jar がおいてある。これをダウンロードする。

うまく辿れなかったけど、ACP Commanderについては、ここに一言書かれている。

Buffalo@NAS-Central / ACP Commander


コマンドの実行は、Ubuntuからやってみた。


$ java -jar acp_commander.jar -v
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.

WARNING: This is experimental software that might brick your linkstation!


Version 0.4.1 (beta)

Usage: acp_commander [options] -t target

options are:
-t target .. IP or network name of the Linkstation

 


バージョンは 0.4.1、使い方はこれを見ればわかりそう。


コマンドの実行については、以下を参考にした。

Linuxをはじめよう! / BUFFALO LinkStationにSSHアクセス

かならぼ / リンクステーション(LinkStation)のrootをとって、SSHログインをしたよ

ボンタくんの備忘録 / root のパスワードを消し、telnet できるようにする


$ java -jar acp_commander.jar -t <LinkstationのIPアドレス> -ip <LinkstationのIPアドレス> -s
↑ 名前解決ができるとしてもIPアドレスで書く。
↑ -ipオプションは必要ないもののように見えるけど、書かないとコマンドが動かない。

ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.

WARNING: This is experimental software that might brick your linkstation!



Please enter your admin password for "172.16.nnn.nnn":
Password: ********** ← adminのパスワードを入力
Using random connID value = 73B1D2D9B0F6
Using target: LS-CHL-V236D.hogeserver.hogeddns.jp/172.16.nnn.nnn
Starting authentication procedure...
Sending Discover packet...
Found: LinkStation (/172.16.nnn.nnn) LS-CHL-V2(YURYAKU) (ID=00018) mac: nn:nn:nn:nn:nn:nn Firmware= 1.740 Key=06BE5701
Trying to authenticate EnOneCmd... ACP_STATE_OK
Trying to authenticate with admin password... ACP_STATE_OK
Enter telnet commands to LS, enter 'exit' to leave
/root> 実行したいコマンドをここで入力 ← ここで1回目のコマンドだけ結果がエコーされる
ただし、エコーされるのはある程度の範囲まで。全部じゃないのでファイルの中身は最初の方しか見えない。
>[ctrl]+[d] ← セッション終了
Changeing IP: ACP_STATE_PASSWORD_ERROR
Please note, that the current support for the change of the IP is currently very rudimentary.
The IP has been set to the given, fixed IP, however DNS and gateway have not been set. Use the WebGUI to make appropriate settings.
↑ 必ずエラーが出るが動作するので原因究明は諦めた

 




■SSHで接続できるようにする


※ACP Commanderを利用してのコマンド実行は以下のパターンのいずれかの方法で行った。


$ java -jar acp_commander.jar -t 172.16.nnn.nnn -ip 172.16.nnn.nnn -pw password -s
$ java -jar acp_commander.jar -t 172.16.nnn.nnn -ip 172.16.nnn.nnn -pw password -c "実行するコマンド"

ここで password は Linkstation のWeb設定画面にログインする際に利用する admin さんのパスワード。コマンド履歴が残るなーと思って、パスワードを password に変えておいた。


/etc/sshd_config の中身を見てみる。

結果、以下を書き換えると、rootでSSHに接続できるようになりそう。


#PermitRootLogin yes
PermitRootLogin no

PermitRootLogin yes ← 有効化
#PermitRootLogin no

 


実行するコマンドは以下。


# sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/sshd_config
# sed -i 's/PermitRootLogin no/#PermitRootLogin no/g' /etc/sshd_config

※ACP Comannderを利用。


このバージョンで UsePam=no とすると、sshdが起動してこないので注意。


sshd.sh の中身を一部書き換える。
kuhnboy / Gain SSH access to the Buffalo LinkStation 421e
smartnova / LinkStation 220DW への SSH


/etc/init.d/sshd.sh
if [ "${SUPPORT_SFTP}" = "0" ] ; then
echo "Not support sftp on this model." > /dev/console
exit 0
fi

if [ "${SUPPORT_SFTP}" = "1" ] ; then
echo "Not support sftp on this model." > /dev/console
exit 0
fi

※sshdが起動しないラスボスレベルの難しい問題をこの情報が助けてくれた!


 


数字は何でもいいみたいだけど、とにかくここでexitするのを止めたいというこの模様。

実行するコマンドは以下。


# sed -i 's/"${SUPPORT_SFTP}" = "0"/"${SUPPORT_SFTP}" = "1"/g' /etc/init.d/sshd.sh

※ACP Comannderを利用。


 


SSHで接続する際にrootを利用するが、rootのパスワードを変更しておく。

色々な変え方がネット上に書かれていたが、パスワードを変更できたのはこれ。


# (echo p@ssw0rd ; echo p@ssw0rd) | passwd ← できた
# sed -i 's/root:$1$\.FfVx9fl$UiT1Agi1p3\/ry\.Zkr3e4m\/:17734:0:99999:7:::/root::17734:0:99999:7:::/g' /etc/shadow ← パスワードクリア

※ACP Comannderを利用。


 


ファイルが意図通りに書き換わったことを確認した上で、sshdを再起動する。


# /etc/init.d/sshd.sh restart

※ACP Comannderを利用。


 


sshdの起動には少し時間がかかる。

見慣れないエラーも出るのでドキドキしたが、どうにか起動した。

起動を確認するために、Ubuntuからポートスキャンしてみた。


$ nmap 172.16.nnn.nnn

Starting Nmap 7.01 ( https://nmap.org ) at 2018-07-22 17:33 JST
Nmap scan report for linkstation (172.16.nnn.nnn)
Host is up (0.00058s latency).
rDNS record for 172.16.nnn.nnn: LS-CHL-V236D.hogeserver.hogeddns.jp
Not shown: 990 closed ports
PORT STATE SERVICE
22/tcp open ssh ← 起動成功!
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
515/tcp open printer
873/tcp open rsync
3689/tcp open rendezvous
8873/tcp open dxspider
22939/tcp open unknown

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

 


Ubuntuからsshでログインしてみる。


$ ssh root@linkstation
The authenticity of host 'linkstation (172.16.nnn.nnn)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes[Enter]
Warning: Permanently added 'linkstation,172.16.nnn.nnn' (RSA) to the list of known hosts.
Password:[Enter] ← ん?なんだろこれ??
Password:[Enter]
Password:[Enter]
root@linkstation's password: 先程設定したrootのパスワードを入力[Enter]
root@LinkStation:~# ← ログインできた!
# uname -a
Linux LinkStation 3.3.4-88f6281 #1 Thu Jun 22 15:47:23 JST 2017 armv5tel unknown

 


もちろん、公開鍵方式での接続にもトライしたけど、設定を変えてもどうにもうまくいかない。

つーか、そもそも、ACP Commanderでどうにでも設定が変えられるっぽいことを考えたら、色々細々設定しても意味はないかも。ということで、割り切りとした。


 




■Sambaの設定を変える


Sambaの設定自体は、/etc/samba/smb.conf にあるのだが、Sambaが設定を読み込むたびにsmb.confを生成しているらしく、smb.confを書き換えても意味がない。


よって、Sambaを起動するシェル自体を書き換える。

ここに答えがあった。

forums.buffalotech.com / How to enable SMBv2 on Linkstation LS-WXL systems so it works with modern OSes


/etc/init.d/smb.sh に赤文字部分を追加。



configure()
{
## built-in account(admin / guest) passwd db check.
pdb_check=`/usr/local/bin/pdbedit -L |grep ^admin:`
if [ "${pdb_check}" = "" ] ; then
echo -e 'password\npassword\n' | /usr/local/bin/smbpasswd -as admin
echo -e '\n\n' | /usr/local/bin/smbpasswd -as guest
fi

## configure files from Buffalo parameters.
echo "configure samba"

# for active directory logon
if [ "$domain" == "ad" ] ; then
/usr/local/bin/create_krbconf.sh ${pdc} ${ad_dns}
/etc/init.d/sethostname.sh
fi

touch /etc/printcap
/usr/local/sbin/nas_configgen -c samba
if [ $? -ne 0 ]; then
echo "$0 configure fail"
exit 1
fi
/bin/sed -i '3i\\
min protocol = SMB2\\
max protocol = SMB2\\
' /etc/samba/smb.conf

}

 


これで /etc/samba/smb.conf の3行目(globalセクション)にプロトコル指定が追加されるようになる。


変更後、以下を実行。


# /etc/init.d/smb.sh reload

 


これで、LinkstationにWindows10からアクセスができた。


 




こうしてコマンド実行できることはきっとセキュリティホール扱いなんだろうと思う。

だけど、いざとなったら自分でどうにかできちゃうのは魅力的、と思うのだった。

Alfrescoでクォータ超過?

$
0
0

そんなはずはない・・・クォータなんて設定していない。なんだろ?


突然こんなエラーが起きるようになって、でも、何も設定は変えていないつもり。

モジュールのアップデートは時々やってるけど、それが影響している!?





結論は、Apacheの設定不足。以前は問題なく使えていたような気がするが、何かが変わったのだろう、きっとそうだ。


出ていたエラーはこれ。

Alfresco ディスカッション - 1M以上のファイルがアップロードできない


[Sun Aug 19 08:50:00.569479 2018] [ssl:error] [pid 52276] [client 192.168.nn.nn:51164] AH02018: request body exceeds maximum size (131072) for SSL buffer, referer: https://hogeserver.hogeddns.jp/share/page/site/workspace/documentlibrary
[Sun Aug 19 08:50:00.569526 2018] [ssl:error] [pid 52276] [client 192.168.nn.nn:51164] AH02257: could not buffer message body to allow SSL renegotiation to proceed, referer: https://hogeserver.hogeddns.jp/share/page/site/workspace/documentlibrary
[Sun Aug 19 09:03:32.707603 2018] [ssl:error] [pid 54710] [client 192.168.nn.nn:51241] AH02261: Re-negotiation handshake failed, referer: https://hogeserver.hogeddns.jp/share/page/site/workspace/documentlibrary

 


対策はこれ。

Qiita / SSLのアップロードサイズを増やす


#
# Hoge Server SSL Settings...
#
<VirtualHost *:443>

ServerAdmin webmaster@hogeserver.hogeddns.jp
ServerName hogeserver.hogeddns.jp

ErrorLog ${APACHE_LOG_DIR}/ssl-error.log
CustomLog ${APACHE_LOG_DIR}/ssl-access.log combined

# SSL設定
SSLEngine on
SSLCertificateFile /etc/ssl/private/hogeserver.crt
SSLCertificateKeyFile /etc/ssl/private/hogeserver.key

SSLCACertificateFile /etc/ssl/hogeCA/private/hogeserver.hogeddns.jp.crt
SSLCARevocationFile /etc/ssl/private/hogeserver.crl

SSLCARevocationCheck chain

<LocationMatch ^/(share|webapp|Microsoft-Server-ActiveSync)>
SSLVerifyClient optional
SSLVerifyDepth 1
SSLRequire ( %{SSL_CLIENT_VERIFY} eq "SUCCESS" ) \
or ( %{REMOTE_ADDR} =~ m/^192\.168\.[0-9]+\.[0-9]+$/ )

# アップロード最大サイズ問題の回避(1GB)
SSLRenegBufferSize 1073741824
</LocationMatch>

# Alfresco - /share /alfresco
include sites-conf-extra/alfresco.conf

# kopano webapp - /web-app
include sites-conf-extra/kopano-webapp.conf

# kopano z-push - /Microsoft-Server-ActiveSync
include sites-conf-extra/z-push.conf

</VirtualHost>

 


色々なサービスを1つのサーバーで動かしていることから、設定ファイルがものすごく長くなったので、includeする形に整理しておいたのだった。なお、LocationMatchさせているところは、クライアント証明書による認証をしている、外向きにサービス展開するとちょっと怖いから。

設定がこれであっているのかどうかわからないけど、晒してみる。


サイズの指定は Directory や Location の中でのみ有効らしい。

サイズも1GBまでいいかなーと思っているが、そんな設定が運用上許されるのかどうかはわからないが、Reloadはできた。


あと、必要ならalfrescoディレクトリにもこの設定をしておいたら良さそう。


 

Windows10 ログイン直後に固まる

$
0
0

最近、Windows10にログインすると、使い始められるようになるまで超時間がかかる。きっかけがいまいちわからないけど、ここ数ヶ月に渡って発生している問題。


ログインする→デスクトップのアイコンが表示される→通知領域のアイコンがちょっとだけ表示れたところで固まる→1分固まる(もっと長いかも)→デスクトップのアイコンが再描画されて使えるようになる。という挙動。


hoge daughter から「そういえばパソコンなんだけど、ログインした後に固まっちゃってさぁ、使えるようになるまでめっちゃ時間かかるんだよね~」と指摘されて、これは本格的に修正しなければと考えたのだった。





結論からすると、DAEMON Tools Lite 10.3 → 10.9 へのアップグレードで解消。

便利に使わせてもらっているツールでとても気に入っているのだが、自動アップデートをOFFにしていたのが問題発生の原因と言える。おそらく、広告がうざったいとかそんな理由だったんだろうけれども、ずいぶんと長い間それこそうざったい思いをしたのだった…。


問題の調査には以下を行った。



  • Microsoft以外のサービスを無効化

  • 挙動を確認して原因を特定して無効化

  • Microsoft以外のサービスを有効化して問題が発生しないことを確認

  • 原因となっているアプリケーションをアップデート


 




■Microsoft以外のサービスを無効化


コマンドプロンプトから


C:\Users\hogeuser>msconfig

を入力して「システム構成」というアプリケーションを起動。


「サービス」タブで「Micorosoftのサービスをすべて隠す」をチェックし、Microsoft以外のサービスを「すべて無効」ボタンで無効にする。※作業の最後に、Microsoft以外のサービスをすべて有効にするのを忘れないようにしましょう。


OKボタンをクリックし、PCを再起動する。


 




■挙動を確認して原因を特定して無効化


再起動してログインしたら、DAEMON Tools Lite がタスクバーでキラキラしている。


システムへの変更を許可しますか?と聞かれているのだ。

タイムアウトするまで動けないっぽい雰囲気とぴったり合致!きっとこれだ。


DAEMON Tools Lite がどこで起動しているか、というとスタートアップだ。


今は、スタートアップをタスクマネージャーから管理できるっぽいので、[CTRL]+[SHIFT]+[ESC]でタスクマネージャーを起動する。


「スタートアップ」タブをクリックし、その中にある DAEMON Tools Lite Agent を無効にしてみる。※作業の最後に、DAEMON Tools Lite Agent を有効にするのを忘れないようにしましょう。


 




■Microsoft以外のサービスを有効化して問題が発生しないことを確認


コマンドプロンプトから


C:\Users\hogeuser>msconfig

を入力して「システム構成」というアプリケーションを起動。


すべてのサービスを有効化して再起動し、問題が発生しないことを確認。

スカッと起動するじゃない、原因はこれだったんだぁ。


 




■原因となっているアプリケーションをアップデート


DAEMON Tools Lite は設定画面から自動アップデートができる。

画面に従ってインストールを完了させる。


タスクマネージャーを起動してスタートアップを確認したところ、DAEMON Tools Lite Agent は無効になったままだ。これを有効にして再起動する。


再起動する…OK!スカッと起動した~最新バージョンでは問題対処済みだった~!


 




記事をまとめながら…あれ?これって問題の本質的な解決じゃないや、と気付く。


Microsoft以外のサービスを止めたら DAEMON Tools Lite が許可を求めていることがわかったということは、「スタートアップ時に許可を求めるアプリケーションがあっても、その許可を求めるダイアログの表示を妨げるサービスがある」ということだ。


そいつをどうにかしない限り、原因不明の「めっちゃ時間かかるんだよね~」が再発する可能性がある。対症療法でしかなかった…。


結果を急いじゃだめですなぁ。

Viewing all 77 articles
Browse latest View live