Active Directoryサーバのセキュリティ強化アップデート(CVE-2022-38023)に伴うONTAPファイルサーバへの影響についてのメモ

WindowsのActive Directoryサーバに対してセキュリティ攻撃ができることが判明したため、Active Directoryサーバに対してセキュリティ強化がWindows Update経由で2022年11月に配布されている。

このときのアップデートで対応されたのは下記の3点

KB5021131: CVE-2022-37966 に関連する Kerberos プロトコルの変更を管理する方法
KB5020805: CVE-2022-37967 に関連する Kerberos プロトコルの変更を管理する方法
KB5021130: CVE-2022-38023 に関連する Netlogon プロトコルの変更を管理する方法

CVE-2022-37966とCVE-2022-38023はどちらも暗号化方式として脆弱なRC4-HMACを使用するのをやめてAESに変更する、というものとなっている。

このため、Kerberos/NTLMv2のどちらを使っていてもRC4-HMACを使用している場合は、このWindows Update適用後に問題が発生する、ということになる。

Windows サーバで構成されているActive Directoryサーバ側での対応については以下にまとめられている

CVE-2022-37966 への対応とその影響について
CVE-2022-37967 への対応とその影響について
CVE-2022-38023 への対応とその影響について

いろいろ書いてあるが、Windowsサーバのレジストリ設定をすることで、強制適用を延期できるけど、最終的にはアクセスできなくなるよ、ということになっている。

で・・・どういう場合に問題が発生するのか?というところが問題となる。

問題が発生するもの

・Active Directoryサーバに対してRC4-HMAC暗号化を使ってKerberos認証を行う場合
・Active Directoryサーバに対してRPC署名を使ってNTLMv2認証を行う場合
・Active Directoryサーバに対してRPCシールとRC4-HMAC暗号化を使ってNTLMv2認証を行う場合

2023/07/24追記: sambaによるActive Direcotryサーバで NTLMv2認証を使う場合(詳細は一番下で解説)

問題が起こらないもの

・Active Directoryサーバに対してAES暗号化を使ってKerberos認証を行う場合
・Active Directoryサーバに対してRPCシールとAES暗号化を使ってNTLMv2認証を行う場合
 (NTLM/Netlogon Secure Channel は同じ意味)

(他にも大丈夫な場合はあると思います)

具体的な環境

2023年5月時点で適切にWindows Updateが実施されているWindows 7 / Windows Server 2012以降のマシンで、Active Directoryに参加している場合はKerberos/AESなので問題ない

Windowsであってもworkgroupとして認証を行う場合はNTLMv2となる場合があるので注意が必要

Linuxからcifs-utilsを使ってCIFS領域をマウントする場合、標準設定ではNTLMv2を使用するため注意が必要

LinuxをActive Directoryに参加させる場合、注意が必要
 Microsoft の 2022 年 11 月の更新により Active Directory の統合が中断される
 Red Hat Enterprise Linux and Microsoft security update of November 2022

ファイルサーバでの問題発生例

Active Directoryに参加しているファイルサーバでは以下のような形で認証が行われる模様

・[クライアント]→Kerberos認証→[ファイルサーバ]→Kerberos認証→[Active Directory]
・[クライアント]→NTLMv2認証→[ファイルサーバ]→NTLMv2認証→[Active Directory]

クライアントからどちらの形式でアクセスをしてくるかで、ファイルサーバ側からActive Directoryへの問いあわせ手法も変わる、ということになる。

このため、ファイルサーバの仕様で問題が発生することとなるため各社がお知らせを出している

・sambaでの問題 RC4/HMAC-MD5 NetLogon Secure Channel is weak and should be avoided Samba 4.15.13/4.16.8/4.17.4以降で対応
・NetAppでの問題 SU530: [Impact Critical] NTLM authentication fails due to enforcement of Netlogon RPC sealing (Microsoft CVE-2022-38023) ONTAP 9.7以降の2023年4月中旬以降提供バージョンで対応
・RedHat/samba CVE-2022-38023
・DELL PowerScale/iSilon PowerScale: Isilon: Netlogon RPC Elevation of Privilege Vulnerability (CVE-2022-38023) OneFS 9.5.0以降で対応
・DELL Unity Dell Unity: Is Unity affected by CVE-2022-38023? (User Correctable) Unity OE 5.1.0以降で対応

・Synology Synology-SA-22:24 Samba AD DC 2023/05/11時点では未提供だが対象リストを見ると通常のファイルサーバ用途では対応不要?
 QNAP,バッファローなども特にお知らせは無し

2023/07/24追記

・バッファロー TeraStation/LinkStation CVE-2022-38023の脆弱性対応によるTeraStation/LinkStationへの影響について
WindowsOSじゃないLinuxベースのやつは影響を受けるようです

・QNAP QTSシリーズ Vulnerabilities in Samba CVE-2022-37966 | CVE-2022-37967 | CVE-2022-38023 | CVE-2022-45141
FreeBSDベースのQESシリーズは影響なし、ですが、それ以外の通常QNAPは影響あり、と

NetApp ONTAPでの対応

対応が必要であるかの調査

NetApp ONTAPでは、ファイルサーバ=>Active Directoryの通信をRC4-HMACで行ってたということで修正がONTAP OSの修正がリリースされています。

2023年4月後半以降にリリースされたONTAP 9.7以降のパッチリリースのみが今回の問題に対応しています。

詳細については富士通が見える状態でリリースを置いてくれています

ETERNUS AX/HXシリーズ, ETERNUS NR1000シリーズにおける WindowsのNetlogon脆弱性対応(CVE-2022-38023)による影響(CIFS接続不可)について

いろいろ書いてありますが、とりあえず、今使ってるNetAppファイルサーバにNTLMv2を使ってアクセスしてきてるユーザがいるのかを確認しましょう

「vserver cifs session show -fields auth-mechanism,protocol-version,windows-user,address」を実行して、auth-mechanismに「NTLMv2」がいる場合は対処が必須です。

netapp9101::> vserver cifs session show -fields auth-mechanism,protocol-version,windows-user,address
node          vserver session-id           connection-id address       auth-mechanism windows-user  protocol-version
------------- ------- -------------------- ------------- ------------- -------------- ------------- ----------------
netapp9101-01 svm0    14421088956793749524 535041285     172.17.44.173 Kerberos       VM2\testuser1 SMB2_1
netapp9101-01 svm0    14421088956793749539 535041298     172.17.44.174 NTLMv2         VM2\testuser1 SMB3
2 entries were displayed.
netapp9101::>

このテスト環境では、172.17.44.173はWindows 7 SP1クライアント、172.17.44.174はRHEL 7.6からCIFSマウントしている環境でした。

このRHEL7.6は「mount -t cifs //svm0.adosakana.local/testutf /mnt2 -o user=testuser1@adosakana.local,password=パスワード,vers=3.0」と実行してマウントしているもので、sec=オプションを付けていない場合はNTLMv2を使用しているようでした。

この「vserver cifs session show -fields auth-mechanism,protocol-version,windows-user,address」はCIFS接続が継続している間は表示される、というものになっているため、数分間アクセスを行わないとリストから消えます。

このため、NTLMv2でアクセスしているかどうかが分からない機械がある場合は、アクセス操作を行ってみた直後にコマンドを実行してみる必要があります。

必要な対応

ONTAP OSのバージョンアップが必要な場合はアップデートを行います。

2023/05/11時点ではCVE-2022-38023に対応するアップデートとして以下が提供されています。

 ONTAP 9.7P22 (End of Limited Support 2025/07/31)
 ONTAP 9.8P18 (End of Limited Support 2025/12/31)
 ONTAP 9.9.1P15 (End of Limited Support 2026/06/30)
 ONTAP 9.10.1P12(End of Limited Support 2027/01/31)
 ONTAP 9.11.1P8 (End of Limited Support 2027/07/31)
 ONTAP 9.12.1P2 (End of Limited Support 2028/02/28)

FAS2520/2552/2554,FAS8020/8040/8060/8080 は ONTAP 9.9.1 までサポート
FAS2620/2650 は ONTAP 9.11.1 までサポート
FAS2720/2750などの現行機種は 制限なし

アップデート先は、同じONTAP OSバージョン内の最新にするか、ハードウェアがサポートされている範囲の新しいバージョンにするかはご自由に

ONTAP OS 9.6などのアップデート提供がバージョンを使用している場合は、ONTAP 9.7以降にアップデートする必要があります。

古いONTAPを新しいONTAPにアップデートする場合、状態によっては複数回のアップデートが必要となります

詳細は「どのバージョンの ONTAP にアップグレードできますか。」を参照してください

例えばONTAP 9.11.1へアップデートする場合、下記のような手順となります。

  ONTAP 9.4→(9.5+9.7)→9.9.1→9.11.1
  ONTAP 9.5→(9.7+9.9.1)→9.11.1
  ONTAP 9.6→9.8→9.11.1
  ONTAP 9.7→(9.8+9.11.1)

(9.5+9.7)というのはONTAP 9.5とONTAP 9.7のアップデートファイルを読み込ませてONTAP 9.7のアップデートとして実行すると、内部的に自動的にONTAP 9.5の適用を行ったあとに9.7適用を行ってくれる、ということをします。

どんな感じでアップデートするか、というのは「この記事」から持ってきた下記画面を参照してください。

1)「イメージの追加」からアップデートするファイルを2つ登録する

2) 新しいバージョンを選択して「更新」

3) まずは古いバージョンの方の適用が開始される

4) 続いて新しいバージョンの方が適用される

5) 終了


NetAppでの調査/対応に関するメモ

NetAppでサポートする認証方式の変更

Set the SMB server minimum authentication security level

「vserver cifs security show -fields lm-compatibility-level」で現在設定されている認証方式を確認

netapp9101::> vserver cifs security show -fields lm-compatibility-level
vserver lm-compatibility-level
------- ----------------------
Cluster -
Snapmirror-WAN
        -
netapp9101
        -
netapp9101-01
        -
svm0    lm-ntlm-ntlmv2-krb
svm2    lm-ntlm-ntlmv2-krb
svm3    lm-ntlm-ntlmv2-krb
7 entries were displayed.
netapp9101::>

値の意味は下記

ValueDescription
lm-ntlm-ntlmv2-krb (default)The storage virtual machine (SVM) accepts LM, NTLM, NTLMv2, and Kerberos authentication security.
ntlm-ntlmv2-krbThe SVM accepts NTLM, NTLMv2, and Kerberos authentication security. The SVM denies LM authentication.
ntlmv2-krbThe SVM accepts NTLMv2 and Kerberos authentication security. The SVM denies LM and NTLM authentication.
krbThe SVM accepts Kerberos authentication security only. The SVM denies LM, NTLM, and NTLMv2 authentication.

標準ではLM, NTLM, NTLMv2, Kerberosに対応している、ということになっている。

NetApp側で強制的にLM,NTLM,NTLMv2クライアントを排除する、という場合は「krb」に変更する

Kerberos接続時のAES暗号化を有効化

Enable or disable AES encryption for Kerberos-based communication

「vserver cifs security show -fields is-aes-encryption-enabled」を実行して確認。ONTAP 9.12.1以降は「true」が標準値となる。

netapp9101::> vserver cifs security show -fields is-aes-encryption-enabled
vserver is-aes-encryption-enabled
------- -------------------------
Cluster -
Snapmirror-WAN
        -
netapp9101
        -
netapp9101-01
        -
svm0    false
svm2    false
svm3    false
7 entries were displayed.
netapp9101::>

なお設定を変更する場合は、ドメイン認証を求められるので注意

netapp9101::> vserver cifs security modify -vserver svm0 -is-aes-encryption-enabled true
Info: In order to enable CIFS AES encryption, the password for the CIFS server
      machine account must be reset. Enter the username and password for the
      CIFS domain "ADOSAKANA.LOCAL".
Enter your user ID: administrator
Enter your password:
netapp9101::> vserver cifs security show -fields is-aes-encryption-enabled
vserver is-aes-encryption-enabled
------- -------------------------
Cluster -
Snapmirror-WAN
        -
netapp9101
        -
netapp9101-01
        -
svm0    true
svm2    false
svm3    false
7 entries were displayed.
netapp9101::>

なお、AES暗号化に関連する設定は is-aes-encryption-enabled 以外に aes-enabled-for-netlogon-channel という設定もある。こちらの詳細については「CVE-2022-38023適用後 NetAppがActive Directoryに参加できない」参照


2023/07/24追記

sambaによるActive Direcotryサーバで NTLMv2認証を使う場合のトラブル

sambaの商業サポートを行っているOSStechに2023/07/21付けのお知らせとして「Windows Updateに伴うSambaの認証の問題を解消するアップデートです。」が掲載されています。

曰く、セキュアチャネルが壊れ、下記3種類の問題が発生するとのこと。

・Sambaのみを使用したActive Directoryサーバ環境におけるNTLM認証が失敗
・リモートデスクトップの認証が失敗
・Sambaのみを使用したNTドメイン環境でNTドメインのログオンが失敗

バグとしては恐らく「BUG 15418: Secure channel faulty since Windows 10/11 update 07/2023」となる

てっきりActive Directoryサーバを運用しているWindows Serverのみ気を使っていればいいのかと思ったら、クライアント側にも影響があったとは・・・


2023/11/14追記

ONTAP 9.10.1より前のONTAPで、CVE-2022-38023適用したActive Directoryドメイン(sambaドメイン含む)に参加できない、という事象が発生した。

詳細は「CVE-2022-38023適用後 NetAppがActive Directoryに参加できない」に書いたが、Active DIrectoryサーバとONTAP間のkerberos通信の暗号化をRC4 MD5ではなくて、AESを使うようにしなければならないので、NetAppのcifsオプションにあるis-aes-encription-enabledとaes-enabled-for-netlogon-channelを有効にする必要がある、というものだった。


2024/05/23メモ

接続状態を確認するときに、どの共有にアクセスしてるか、と、ローカルユーザなのかADユーザなのかをわかるようにするオプション

「vserver cifs session show -fields auth-mechanism,protocol-version,windows-user,address,user-type,is-session-signed,smb-encryption-status,share-names,continuously-available,is-large-mtu-enabled」

ontap9131::> vserver cifs session show -fields auth-mechanism,protocol-version,windows-user,address,user-type,is-session-signed,smb-encryption-status,share-names,continuously-available,is-large-mtu-enabled
node            vserver      session-id          connection-id address       auth-mechanism windows-user  protocol-version continuously-available is-session-signed user-type   smb-encryption-status is-large-mtu-enabled share-names
--------------- ------------ ------------------- ------------- ------------- -------------- ------------- ---------------- ---------------------- ----------------- ----------- --------------------- -------------------- ---------------
ontap9131 svm01 6194701287448117256 2260371604    172.17.44.162 Kerberos       ADOSAKANA\testuser1 SMB3_1           No                     false             domain-user unencrypted           true                 ipc$,testshare2

ontap9131::>

APC Network Management Card のメモ 2023/04/13版

久しぶりにAPC Smart-UPS に Network Management Cardを入れて設定することになった。

しかしAPCのサイトにある「Network Management Card | よくあるお問い合わせ」にある「Network Management Card 2のAPC Device IP Configration Wizard 5.0.2 を使用したIPアドレス設定方法」に記載されているリンク先は軒並み機能していなかった。

そんなわけでメモ書き

1) Network Management CardのIPアドレスを振るのはシリアル接続かDevice IPソフトウェア

Network Management Card Device IP Configuration Utility v5.0.4

ただし、Java Runtime Environment 1.8以降が必要なのだが、何を使うかが悩みどころ・・・

APCのドキュメント的にはすなおにOracle Java SE Runtime Environmentのダウンロードを推奨で

他社をみるとQuestもOracle JRE「JRE(version 1.8 or above) Installation for Microsoft Windows (4229374)

キヤノンITソリューションはAmazon Correttoを使っていた「Q:【構築手順】Windows Server環境で、オープンソースJDKを利用してセキュリティ管理ツールをインストールするには?

とりあえず今回はjre-8u361-windows-x64.exeを使った

2) Network Management Cardのfirmware

UPS Network Management Cardsのfirmware からfirmwareをダウンロード

カードを挿すUPSの種類により適用するfirmwareも異なる

3) Device IP使っても出ない場合

dhcpで範囲内にいるはずなのにDevice IPで出てこなかった

その場合はarp -aの結果からMACアドレスが「28:29:~」(Network Management Card 3/AP9640Jの場合)で始まるものを探して総当たりでhttpsアクセスしてみるとよい

4)Network Management Card 3の言語表示

Network Management Card 2では追加言語ファイルを導入しないと日本語表示がなかったりした。

Network Management Card 3は標準状態で多言語対応しているのだが、デフォルト表示が基本Englishとなっている。

ログイン画面の言語設定変更は[Configuration]-[Security]-[Local Users]-[Default Settings]

ここのLanguageを「English」から「日本語」に変えるとログイン画面の表示が日本語になります。

ログイン画面は日本語になったものの「apc」ユーザでログインすると英語表示。

これはユーザ特有設定の方にあるため、[Configuration]-[Security]-[Local Users]-[Management]でユーザ一覧を表示する

「apc」をクリックしてLanguageを「English」から「日本語」に変える

4)PCNSのコマンドファイルの指定について

シャットダウン時にバッチファイルを実行させるべく「コマンドファイルのパス」に指定しようと文字を入力しはじめたら下記の様に言われた。

コマンドファイルを読み込めませんでした。ファイルはPowerChuteインストールディレクトリのuser_filesフォルダーにある必要があります。詳細については、ヘルプを参照してください。

ということは、C:\Program Files\APC\PowerChute\user_files にファイルを置いて、ファイル名だけ指定すればいいのかと思ったが、相変わらず上記のエラー

フルパスで指定したら通った・・・

5) ssh接続がうまく行かない

PowerChute Network Shutdown のv4.4にはsshで他のサーバにログインしてコマンドを実行する機能がある。

これを利用してNetAppにログインしようとしたのだがうまくいかない

SSH アクションとして2種類登録を作ってみた

1つはユーザ名とパスワードを入力してログインするタイプ

もう1つはsshキーを使ってログインするもの。

ここで指定したsshキーは C:\Program Files\APC\PowerChute\user_files\ssh_id_rsa.txt という形でWindows Server標準のssh-keygenコマンドを使って作成したやつをコピーしたもの。

アクセス権については特に調整していない。

どちらの設定でも実行するコマンドを列挙した「SSHコマンドファイルのパス」は C:\Program Files\APC\PowerChute\user_files\netappshutdown.txt とした。

内容は以下の確認なしでNetAppを停止する手法を記載した。

set -confirmations off; system node halt -node * -inhibit-takeover true -ignore-quorum-warnings true

で・・・これだけでは動かなかった。

PowerChute Network Shutdownのヘルプにある「SSH設定」の説明で以下がある。

認識されているコマンドプロンプトは次のとおりです。
 ・$ (Linux)
 ・# (Linux admin/root)
 ・> (Windows または RPDU)
ssh_prompt_regex」設定を[SSHAction]セクションに追加することにより、カスタムコマンドプロンプトは、PowerChute構成ファイル (pcnsconfig.ini) を介して追加できます。例えば: 「~」のカスタムコマンドプロンプトを追加するには、「ssh_prompt_regex = ~\s」を追加します。

NetAppのコマンドプロンプトは「クラスタ名::> 」なので、WindowsまたはRPDUの「>」で通るものかと思っていたのですが、違ったようです。

C:\Program Files\APC\PowerChute\group1\pcnsconfig.iniの[SSHAction数字]に以下のように「::>」プロンプトを追加することで動作するようになりました。

ssh_prompt_regex = \::>\s

ONTAPをActive Directoryに参加させようとしたら時刻が狂ってて参加失敗した

ONTAPをActive Directoryに参加させようとしたら「Reason: SecD Error: no server available.」でエラーになった。

ontap91::> vserver cifs create -cifs-server newsvm0 -domain adosakana.local -ou CN=Computers

In order to create an Active Directory machine account for the CIFS server, you
must supply the name and password of a Windows account with sufficient
privileges to add computers to the "CN=Computers" container within the
"ADOSAKANA.LOCAL" domain.

Enter the user name: administrator

Enter the password:

Error: Machine account creation procedure failed
  [    91] Loaded the preliminary configuration.
  [   213] Created a machine account in the domain
  [   214] Successfully connected to ip 172.17.44.49, port 445 using
           TCP
  [   249] Encountered NT error (NT_STATUS_MORE_PROCESSING_REQUIRED)
           for SMB command SessionSetup
  [   250] Cluster and Domain Controller times differ by more than
           the configured clock skew (KRB5KRB_AP_ERR_SKEW)
  [   250] Kerberos authentication failed with result: 7537.
  [   258] Encountered NT error (NT_STATUS_MORE_PROCESSING_REQUIRED)
           for SMB command SessionSetup
  [   259] Cluster and Domain Controller times differ by more than
           the configured clock skew (KRB5KRB_AP_ERR_SKEW)
  [   259] Kerberos authentication failed with result: 7537.
  [   259] Unable to connect to LSA service on
           adserver.adosakana.local (Error:
           RESULT_ERROR_KERBEROS_SKEW)
  [   260] No servers available for MS_LSA, vserver: 2, domain:
           adosakana.local.
**[   260] FAILURE: Unable to make a connection (LSA:ADOSAKANA.LOCAL),
**         result: 6940
  [   260] Could not find Windows SID
           'S-1-5-21-937304154-1581684492-536532533-512'
  [   284] Deleted existing account
           'CN=NEWSVM0,CN=Computers,DC=adosakana,DC=local'

Error: command failed: Failed to create the Active Directory machine account
       "NEWSVM0". Reason: SecD Error: no server available.

ontap91::>

古いONTAPがActive Directoryに参加できない」や「ONTAP 9.5でsambaドメインに参加できない & ONTAP 9.7で失敗」の話かな?と思って対処してみるも変わらない

もしかして、と時刻を確認してみると、Active DirstoryサーバとONTAPとの時刻差が3分以上あった。

時計を合わせるとActive Directoryへの参加が成功した。

PowerShellから直接ssh接続でNetAppにログインして設定情報を取得してCSV化するスクリプト

先日「NetAppの設定内容をcsvファイルに出力したい」という記事で手動でやる手法について記載した。

最近のWindowsだと直接sshコマンドが実行できるようになっているので、NetApp側に公開鍵を登録して、パスワードなしでアクセスできるように設定した上で、PowerShellスクリプトを実行することで、設定をスクリプト化できないかを実施してみた。

とりあえず全項目とればいいか、と「-showallfields true」設定でやっているが、下記スクリプトはONTAP 9.10.1の場合のもので、バージョンが異なると全部の項目数が変わる可能性があるので、一度手動で「set -privilege admin -rows 0 -units GB -showallfields true ; vserver cifs share show”」を実行し、出力される項目名を確認しておくこと

# タブ区切りのため `t を指定
$count=0
$flag=0
$results=@()

$results=cmd /c ssh.exe -l admin NetAppクラスタ "set -privilege admin -rows 0 -showseparator `t -units GB -showallfields true ; vserver cifs share show" | ForEach-Object {
    $line=$_.split("`t")
    if(($line[0] -eq "vserver") -and ($flag -eq 0)){
        $flag=1
        $titlecount=$count
    }
    if(($flag -eq 1) -and ($count -gt ($titlecount+1))){
        $output = New-Object -TypeName psobject
        $output | Add-Member -MemberType NoteProperty -Name "vserver" -Value $line[0]
        $output | Add-Member -MemberType NoteProperty -Name "share-name" -Value $line[1]
        $output | Add-Member -MemberType NoteProperty -Name "cifs-server" -Value $line[2]
        $output | Add-Member -MemberType NoteProperty -Name "path" -Value $line[3]
        $output | Add-Member -MemberType NoteProperty -Name "share-properties" -Value $line[4]
        $output | Add-Member -MemberType NoteProperty -Name "symlink-properties" -Value $line[5]
        $output | Add-Member -MemberType NoteProperty -Name "file-umask" -Value $line[6]
        $output | Add-Member -MemberType NoteProperty -Name "dir-umask" -Value $line[7]
        $output | Add-Member -MemberType NoteProperty -Name "comment" -Value $line[8]
        $output | Add-Member -MemberType NoteProperty -Name "acl" -Value $line[9]
        $output | Add-Member -MemberType NoteProperty -Name "attribute-cache-ttl" -Value $line[10]
        $output | Add-Member -MemberType NoteProperty -Name "volume" -Value $line[11]
        $output | Add-Member -MemberType NoteProperty -Name "offline-file" -Value $line[12]
        $output | Add-Member -MemberType NoteProperty -Name "vscan-fileop-profile" -Value $line[13]
        $output | Add-Member -MemberType NoteProperty -Name "max-connections-per-share" -Value $line[14]
        $output | Add-Member -MemberType NoteProperty -Name "force-group-for-create" -Value $line[15]
        $output
    }
    $count++
}

$results | Export-Csv test.csv -Encoding UTF8 -NoTypeInformation  -NoClobber

ONTAPのCIFSファイルサーバで複数のホスト名でアクセスできるようにしたい

ONTAPでCIFSファイルサーバを作る時、本来のホスト名とは違うホスト名でもアクセスできるようにしておきたい、ということがある。

(サーバ統合で2台が1台になるけど、どちらでも使える様にした、など)

NetAppの標準設定では、SVMをActive Directoryに参加させる際に指定したNetBIOS名とIPアドレスでのアクセス以外は受け付けないようになっている。

例えば、下記の様に「システムエラー 59」「予期しないネットワーク エラーが発生しました。」といったエラーが出力される。

C:\Users\Administrator>net use \\winserver\testvol
\\winserver\testvol のパスワードが無効です。

'winserver' のユーザー名を入力してください: ADOSAKANA\testuser1
winserver のパスワードを入力してください:
システム エラー 59 が発生しました。

予期しないネットワーク エラーが発生しました。


C:\Users\Administrator>

SVMの設定を確認すると下記の様になっている。

netapp9101::> vserver cifs show -ins
                                          Vserver: svm0
                         CIFS Server NetBIOS Name: SVM0
                    NetBIOS Domain/Workgroup Name: ADOSAKANA
                      Fully Qualified Domain Name: ADOSAKANA.LOCAL
                              Organizational Unit: CN=Computers
Default Site Used by LIFs Without Site Membership:
                                   Workgroup Name: -
                             Authentication Style: domain
                CIFS Server Administrative Status: up
                          CIFS Server Description:
                          List of NetBIOS Aliases: -
 netapp9101::>

上記の場合、「svm0」とIPアドレス指定でのアクセス以外は受け付けない。

他のホスト名でもアクセスできるようにするにはNetBIOS Aliasを追加する必要がある。

(なお、別途、標準では無効となっているNetBIOSを有効にする必要がある。ただし、これを有効にした場合、NetApp SVM名と同じNetBIOS名の告知も始めてしまうので注意)

netapp9101::> vserver cifs add-netbios-aliases -netbios-aliases WINSERVER -vserver svm0
netapp9101::> vserver cifs show -ins
                                          Vserver: svm0
                         CIFS Server NetBIOS Name: SVM0
                    NetBIOS Domain/Workgroup Name: ADOSAKANA
                      Fully Qualified Domain Name: ADOSAKANA.LOCAL
                              Organizational Unit: CN=Computers
Default Site Used by LIFs Without Site Membership:
                                   Workgroup Name: -
                             Authentication Style: domain
                CIFS Server Administrative Status: up
                          CIFS Server Description:
                          List of NetBIOS Aliases: WINSERVER
 netapp9101::>

さて、これでアクセスできるようになったかな?と試してみるが、同じエラーが継続

C:\Users\Administrator>net use \\winserver\testvol
\\winserver\testvol のパスワードが無効です。

'winserver' のユーザー名を入力してください: ADOSAKANA\testuser1
winserver のパスワードを入力してください:
システム エラー 59 が発生しました。

予期しないネットワーク エラーが発生しました。


C:\Users\Administrator>

NetApp KB:Access by NETBIOS Alias fails に該当する問題だった。

今回のADOSAKANAドメインには、既に「WINSERVER」としてコンピュータアカウントがあった。

これが残っていると問題が発生するらしい。

まず、Windows上からコンピュータアカウントWINSERVERに関する情報をsetspn -lコマンドで確認すると下記の様な内容で登録されていた。

C:\Users\Administrator>setspn -l winserver
次の項目に登録されている CN=WINSERVER,CN=Computers,DC=ADOSAKANA,DC=LOCAL:
        HOST/winserver.adosakana.local
        RestrictedKrbHost/winserver.adosakana.local
        HOST/WINSERVER
        RestrictedKrbHost/WINSERVER
        WSMAN/winserver.adosakana.local
        WSMAN/WINSERVER
        TERMSRV/winserver.adosakana.local
        TERMSRV/WINSERVER

C:\Users\Administrator>

次に、NetApp SVMとして登録されているsvm0について確認してみると、だいぶ少ない内容で登録されていた。

C:\Users\Administrator>setspn -l svm0
次の項目に登録されている CN=SVM0,CN=Computers,DC=ADOSAKANA,DC=LOCAL:
        HOST/SVM0
        HOST/svm0.adosakana.local

C:\Users\Administrator>

まず、WindowsのActive Directgory側でコンピュータアカウント「WINSERVER」を削除。

続いてNetApp KBにあるようにsetspn -aコマンドでWINSERVERをsvm0に追加する形で登録

C:\Users\Administrator>setspn -a HOST/WINSERVER svm0
ドメイン DC=ADOSAKANA,DC=local を確認しています

CN=SVM0,CN=Computers,DC=ADOSAKANA,DC=LOCAL の ServicePrincipalNames を登録しています
        HOST/WINSERVER
更新されたオブジェクト

C:\Users\Administrator>

どのような登録になったのかを確認してみると、svm0の出力にwinserverが追加されており、winserverというエントリは無くなったことが分かる。

C:\Users\Administrator>setspn -l svm0
次の項目に登録されている CN=SVM0,CN=Computers,DC=adosakana,DC=local:
        HOST/SVM0
        HOST/svm0.adosakana.local
        HOST/WINSERVER

C:\Users\Administrator>setspn -l winserver
FindDomainForAccount: DsGetDcNameWithAccountW への呼び出しが失敗し、戻り値 0x00000525 が返されました
アカウント winserver は見つかりませんでした

C:\Users\Administrator>

この状態で先ほどエラーになったnet useコマンドを実行すると、正常に実行ができる。

C:\Users\Administrator>net use \\winserver\testvol
\\winserver\testvol のパスワードが無効です。

'winserver' のユーザー名を入力してください: adosakana\testuser1
winserver のパスワードを入力してください:
コマンドは正常に終了しました。


C:\Users\Administrator>