仮想化ベースのセキュリティが有効であるとVMware Workstationの仮想マシンが起動できない

Windows 10 Pro Version 1909
VMware Workstation 15 Pro 15.5.1
CPU: Intel Core i7-3520M

自端末へ VMware Workstation 15 Pro をインストールして幾ばくかの時間を隔てたのちに改めて仮想マシンの起動を試みたところ、見慣れぬエラーメッセージに見舞われて面食らった。曰く、

VMware Workstation と Device/Credential Guard には互換性がありません。VMware Workstation は Device/Credential Guard を無効にした後で実行することができます。詳細については、 http://www.vmware.com/go/turnoff_CG_DG を参照してください。

とのことである。調べてみるとWindows Defender Application GuardやWindows サンドボックスを導入すると仮想化ベースのセキュリティが有効になって、此れがVMware Workstationと相容れない情勢であるBIOSでIntel VT-xを有効にしてあっても無効であるものと判断されている。

何もしていないのに壊れたと憤慨したものであるが、Windows サンドボックスを有効にした覚えがある。何もしていないのに壊れたという申し立ては必ず嘘である。

こういう事では困るから慌ててWindows サンドボックスを無効にしたのであるけれども此れがちっとも効果が無い。コマンドプロンプトからmsinfo32を立ち上げて「システムの要約」→「仮想化ベースのセキュリティ」項目を確認すると値は「実行中」である。はてな、此は如何にと思案に暮れているとどうも無効にする手順が別に在る模様である。

先ずはローカルグループポリシーエディターを起動して、「コンピューターの構成」→「管理用テンプレート」→「システム」→「Device Guard」と辿る。そうして二つの設定「Windows Defender アプリケーション制御を展開する」「仮想化ベースのセキュリティを有効にする」を無効とする。

次いで幾つかのレジストリキーを削除する。

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\LsaCfgFlags
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\LsaCfgFlags
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\EnableVirtualizationBasedSecurity
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\RequirePlatformSecurityFeatures

自端末には EnableVirtualizationBasedSecurity しか見当たらなかったから此れのみ削除した。続いてコマンドプロンプトを管理者として実行して以下のコマンドを放り込む。全体どういう了見でこのUUIDが世に出たか知れないけれども兎に角、効く。

mountvol X: /s
copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
mountvol X: /d

ここまでこなしたら端末を再起動する。起動中に Credential Guard を無効にするか否かを問われ、無効にするならWindowsキーもしくはF3キーを押下する。時間制限があるからもたついていると何もせぬままに起動が進行してしまう。

あらためてmsinfo32を実行すると無事、仮想化ベースのセキュリティが無効になり仮想マシンの起動も恙無く済んだ。VMware Workstation ProとWindows サンドボックスの両立はむつかしいようであるから欲を張らずに、仮想化ベースのセキュリティを都度、有効か無効に切り替えてどちらかを選ぶしかないようである。

参考:
Windows Defender Credential Guard の管理
“VMware Workstation and Device/Credential Guard are not compatible” error in VMware Workstation on Windows 10 host (2146361)

ownCloudのインストール時にMySQLのエラーが表示されて処理がちっとも進まない

ownCloud: 10.3.2
MySQL: 8.0.18

ownCloudをインストールしようとするとこういうエラーメッセージを受け取るようになった。

Error while trying to create admin user: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

どうもMySQL8系からは認証プラグインにcaching_sha2_passwordが標準で採用されるようになり、従来からのmysql_native_passwordから置き換わった模様である。ownCloud 10.3.2はこの流れに未だ対応していない為にエラーとなっているのである。これを避けるために一先ずMySQL接続ユーザの認証プラグインをかつてのmysql_native_passwordへと設定した。

mysql> create user 'ocadmin'@'localhost' identified by 'p@ssw0rd';
mysql> grant all on owncloud.* to 'ocadmin'@'localhost' with grant option;
mysql> select user, plugin from mysql.user where user = 'ocadmin';
+---------+-----------------------+
| user    | plugin                |
+---------+-----------------------+
| ocadmin | caching_sha2_password |
+---------+-----------------------+

mysql> alter user 'ocadmin'@'localhost' identified with mysql_native_password by 'p@ssw0rd' ;
mysql> select user, plugin from mysql.user where user = 'ocadmin';
+---------+-----------------------+
| user    | plugin                |
+---------+-----------------------+
| ocadmin | mysql_native_password |
+---------+-----------------------+

mysql> create database owncloud;

そうして改めてownCloudのインストールを試みると恙無く完了したのでよかった。

参考:
6.4.1.2 Caching SHA-2 Pluggable Authentication

Squidをソースから導入してSSL Bumpを設定する

サーバOS: Ubuntu 18.04 Server
クライアントOS: Windows 10 Pro version 1903
Squid 4.9

まずはソースコードを取得するところから始める。

$ wget -c http://www.squid-cache.org/Versions/v4/squid-4.9.tar.bz2
$ wget -c http://www.squid-cache.org/Versions/v4/squid-4.9.tar.bz2.asc
$ gpg --recv-keys B06884EDB779C89B044E64E3CD6DBF8EF3B17D3E
$ gpg --verify squid-4.9.tar.bz2.asc
(snip)
gpg: Good signature from "Amos Jeffries (Squid Signing Key) <squid3@treenet.co.nz>" [unknown]

libssl-dev パッケージが不足していると configure: error: library 'crypto' is required for OpenSSL というエラーメッセージが突き付けられるから予めの導入を要する。

$ sudo apt install libssl-dev
$ sudo useradd -s /bin/false squid
$ tar jxvf squid-4.9.tar.bz2
$ cd squid-4.9/
$ ./configure --prefix=/usr/local/squid --enable-ssl-crtd --with-openssl --with-default-user=squid
$ make all
$ sudo make install

次いで自己署名証明書を生成する。これはルート証明書として取り扱うことになる。証明書のセキュリティが侵害されるとMITM攻撃に晒される恐れがあるというから十分に注意を払わねばならない。

$ cd /usr/local/squid/etc/
$ sudo openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
$ sudo openssl x509 -in myCA.pem -outform DER -out myCA.der

作成した自己署名証明書をクライアントの端末へコピーしてインストールする。

証明書を右クリックしてコンテキストメニューから「証明書のインストール」を選択
「証明書をすべて次のストアに配置する」を選択して「参照」
「信頼されたルート証明期間」を選択して「OK」を押下す
「次へ」をクリック
「完了」をクリック
インストールを許すなら「はい」をクリック

実際に証明書がインストールされたか否かを詳らかにするため inetcpl.cpl を実行してインターネットのプロパティを開く。

「コンテンツ」タブを開いて「証明書」ボタンをクリック
インストールされたことを確認

squidサーバの設定へ戻り、証明書の所有者とパーミッションを変更してsquidユーザだけが読み取れるようにしておく。

$ sudo chown squid:squid myCA.pem
$ sudo chmod 400 myCA.pem
$ ls -l myCA.pem
-r-------- 1 squid squid 3095 Nov 24 00:05 myCA.pem

設定ファイル squid.conf の編集に移る。動的に生成された証明書をキャッシュできるメモリやディスクの容量を指定する箇所があるけれども、どの程度が適当かとんと検討がつかぬから思い切って公式サイトの手引きの4倍をセットした。

あと sslcrtd_program の項目に ssl_crtd コマンドを指定しているサイトが其処此処に見られたけれども、此れがどうしても見当たらなくてこまった。リリースノートを過去へ遡ってゆくとバージョン4.0.5からは名称が security_file_certgen へと移り変わった模様である。

$ sudo vi /usr/local/squid/etc/squid.conf
#http_port 3128
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/usr/local/squid/etc/myCA.pem
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 16MB
sslcrtd_children 20
sslproxy_cert_error deny all
ssl_bump stare all

動的に生成される証明書をキャッシュしておくディレクトリを用意する為に次のコマンドを実施する。

$ sudo /usr/local/squid/libexec/security_file_certgen -c -s /usr/local/squid/var/cache/squid/ssl_db -M 16MB
Initialization SSL db...
Done

これで一通りの下拵へは済んだから愈々Squidを起動するとパーミッションにまつわるエラーメッセージでまったく起動できない。/usr/local/squid/var/ 以下の所有者を一斉に squid へと差し替えて事なきを得た。

$ sudo /usr/local/squid/sbin/squid
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
         messages will be sent to 'stderr'.

$ sudo chown -R squid:squid /usr/local/squid/var/
$ sudo /usr/local/squid/sbin/squid

あとはクライアント端末のProxy設定をよしなに整えてやれば終いである。

ログを流しながらGoogle Chromeで多数のサイトを閲覧したけれどもちっともキャッシュにヒットせずTCP_MISSばかり発生するから此は如何にと思っていたらどうも先んじてGoogle ChromeのキャッシュにヒットするせいでSquidの出番がなかった模様である。

Google Chromeの起動オプションに --disk-cache-size=1 を指定して実質的にキャッシュを無効にしてから改めて試験を実施するとキャッシュにヒットした証のTCP_MEM_HITが現れるようになった。

–disk-cache-sizeを指定する。0は際限なくキャッシュするようであるから1とした
TCP_MEM_HITがたくさん見られて喜ばしいログ

参考:
Dynamic SSL Certificate Generation
Compiling Squid

Tera Termで以ってtelnetで25番ポートへ接続してSMTPコマンドを打ち込むための設定

Tera Term 4.104

メールサーバの移行作業後にtelnetで以ってメール送信のテストをおこないたかったけれどもWindows10はデフォルトでTelnetクライアントが無効になっているようである。さりとて有効化は都合が許さなかった為に代わりにTera Termを用いるよう助言をいただいたものである。

ところがTera TermのTelnetで25番ポートへ接続するとSMTPバナーは表示されるもののキー入力をしても何ら反応がないので誠に困った。tcpdumpで様子を窺うと入力内容は送信されているようであるからエコーバックがなされていないような風情である。

調べると次のようにTERATERM.INIの設定を変更せねばならぬ模様である。

Telnet プロトコルに対応していないホスト(通常 23 以外のポート番号を使用)に TCP/IP 接続する場合、ローカルエコーを on に、送信する改行コードを CR+LF にする必要がある場合があります。

TCPLocalEcho=on
TCPCRSend=CRLF

TCPLocalEcho をonに、TCPCRSend をCRLFにセットすることで23番以外のポートへTelnetで接続した途端にローカルエコーが有効にされ、送信改行コードがCR+LFに変更されるというのである。

そうすると無事、操作を受け付けるようになった。

参考:
非 telnet TCP/IP 接続用の端末設定

Sambaサーバをソースからインストールする

OS: Ubuntu Server 18.04
Samba 4.11.2

Sambaサーバの導入時にいつも多数のエラーに見舞われて躓くから、此れを僅かでも楽ちんにする手助けとしてインストールの成功までを記録として記すものである。まずはソースコードを準備して解凍・展開し、configureスクリプトを実行する。

$ wget -c https://download.samba.org/pub/samba/stable/samba-4.11.2.tar.gz
$ wget -c https://download.samba.org/pub/samba/stable/samba-4.11.2.tar.asc
$ gunzip samba-4.11.2.tar.gz

$ gpg --recv-keys 52FBC0B86D954B0843324CDC6F33915B6568B7EA
$ gpg --verify samba-4.11.2.tar.asc
(snip)
gpg: Good signature from "Samba Distribution Verification Key " [unknown]

$ tar xvf samba-4.11.2.tar
$ cd samba-4.11.2/
$ ./configure

そうするといくらもしないうちにエラーメッセージが現れる。一つ解決しても又出る。次々出る。メッセージから容易に解決策が見つかることもあるけれどもどうしても判然としないものもあるから一処に纏めておくのが肝要であろうとおもう。

エラーメッセージ対応策
The distutils module is unusable: install “python-devel”?一見すると libpython3-dev の導入で解決しそうな風情であるけれどもちっとも改善される気配がないから bin/config.log を調べてみると ModuleNotFoundError: No module named 'distutils.sysconfig'というメッセージが残されており、これを解決するには python3-distutils パッケージを導入すると良いようである。
Checking for header Python.h : Distutils not installed? Broken python installation? Get python-config now!一見すると python-config の導入で解決しそうな風情であるけれどもそういったパッケージが見当たらなくて困った。 libpython3-dev パッケージが解決してくれた。
Samba AD DC and –enable-selftest requires lmdb 0.9.16 or laterActive Directory Domain ControllerとしてSambaの構築に取り組む積もりで無ければ --without-ad-dc オプションを付与してconfigureスクリプトを再実行する。取り組むのであれば liblmdb-dev パッケージをインストールすれば宜しい気色であるけれどもaptで探ってもどうしてかパッケージが見当たらないから GitHub – LMDB/lmdb からリポジトリをクローンしてビルドする必要があった。
Checking for program ‘pkg-config’ : not found
Checking for GnuTLS >= 3.2.0 : not found
pkg-configlibgnutls28-dev のパッケージをいっぺんに二つとも導入すればよかった。
Checking for jansson : not found Jansson JSON support not found. Try installing libjansson-dev or jansson-devel. Otherwise, use –without-json to build without JSON support. JSON support is required for the JSON formatted audit log feature, the AD DC, and the JSON printers of the net utilityJSON形式で監査ログを出力したり、Active Directory Domain Controllerをセットアップする場合には libjansson-dev パッケージを導入すれば宜しい。不要であれば --without-json オプションを付与する。
Checking for header archive.h : no libarchive support not found. Try installing libarchive-dev or libarchive-devel. Otherwise, use –without-libarchive to build without libarchive support. libarchive support is required for the smbclient tar-file modesmbclientからtar-fileモードを使用する場合に必要とあるけれども全体どういうものか判然としない。それで不要と判断を下すなら --without-libarchive オプションを付与するだけである。一方、無くてはならない向きには libarchive-dev パッケージを導入する。
Checking for acl_get_fd : not found
ACL support not found. Try installing libacl1-dev or libacl-devel. Otherwise, use –without-acl-support to build without ACL support. ACL support is required to change permissions from Windows clients.
Windowsクライアントからパーミッションを変更する場合は libacl1-dev パッケージが必要になる。そういった機能に出番を求めていないなら --without-acl-support オプションで宜しい。
LDAP support not found. Try installing libldap2-dev or openldap-devel. Otherwise, use –without-ldap to build without LDAP support. LDAP support is required for the LDAP passdb backend, LDAP idmap backends and ADS. ADS support improves communication with Active Directory domain controllers.LDAPのサポートはお呼びでないなら --without-ldap オプションを付与してconfigureスクリプトを再実行する。欠くことの許されない場合は libldap2-dev パッケージの出番となる。
Active Directory support not available: LDAP support is not available. Active Directory support not found. Use –without-ads for building without Active Directory support. ADS support improves communication with Active Directory domain controllers.Active Directoryをサポートせずともよいならば --without-ads の付与で終いである。必需と考えるなら libldap2-dev が入り用である。
PAM support is enabled but prerequisite libraries or headers not found. Use –without-pam to disable PAM support.PAMで以って認証を実施するためには libpam0g-dev が必要となるけれども要らない機能と見るならば --without-pam オプションを付与する。
Checking for gpgme_new : not found GPGME support not found. Try installing libgpgme11-dev or gpgme-devel and python-gpgme. Otherwise, use –without-gpgme to build without GPGME support or –without-ad-dc to build without the Samba AD DC. GPGME support is required for the GPG encrypted password sync feature GPGME(GnuPG Made Easy)の機能はActive Directory Domain Controllerを導入する場合に併せて求められる模様である。libgpgme-dev パッケージの導入で解決できた。--without-gpgme オプションを付加すればGPGMEを使用しない。

configureスクリプトに何らオプションを付け加えないで実施するなら、lmdbを手ずからビルドして次いで必要となるパッケージを一遍にインストールしてやれば宜しい。

$ git clone https://github.com/LMDB/lmdb.git
$ cd lmdb/libraries/liblmdb/
$ make
$ sudo make install

$ sudo apt install python3-distutils libpython3-dev pkg-config libgnutls28-dev libjansson-dev libarchive-dev libacl1-dev libldap2-dev libldap2-dev libpam0g-dev libgpgme-dev

$ ./configure
(snip)
'configure' finished successfully (49.706s)

$ make
$ sudo make instal
$ /usr/local/samba/sbin/smbd -V
Version 4.11.2

参考:
Package Dependencies Required to Build Samba
Samba – Jay Ts, Robert Eckstein, David Collier-Brown – Google ブックス