[Amazon FSx for NetApp ONTAP] CIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できるか確認してみた

ローカルユーザーに対して権限を割り当てさえすればアクセスできる
2022.11.17

ワークグループじゃないとローカルユーザーで認証できないとかあるのかな

こんにちは、のんピ(@non____97)です。

皆さんは「Amazon Fsx for NetApp ONTAP(以降FSx for ONTAP)のCIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できるか」と気になったことはありますか? 私はあります。

以前、ワークグループのCIFSサーバー上のCIFSファイル共有に対して、CIFSのローカルユーザーの認証情報を使ってアクセスしたことがあります。

ワークグループのCIFSサーバーをドメイン参加させることもしたことあるのですが、その際、ローカルユーザーで引き続き認証できるかは確認していませんでした。

気になったので検証してみました。

いきなりまとめ

  • FSx for ONTAPのCIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できる
  • NTFS ACLでCIFSサーバーのローカルユーザーに対して権限を与えることも可能

検証環境

検証環境は以下の通りです。

CIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できるか確認してみたの検証環境構成図

CIFSサーバーがドメイン参加している状態でSVM上にCIFSのローカルユーザーを作成し、ローカルユーザーの認証情報を使ってCIFSファイル共有にアクセスできることを確認します。

AD DCについては以下記事の検証で使用したものを流用します。

SVM上にCIFSのローカルユーザーを作成

まず、SVM上にCIFSのローカルユーザーを作成します。

今回はcifs-userというユーザーを作成しました。

# CIFSサーバーがドメインに参加していることを確認
FsxId0edb8330826eb8118::> cifs show -vserver svm1

                                          Vserver: svm1
                         CIFS Server NetBIOS Name: SVM1
                    NetBIOS Domain/Workgroup Name: CORP
                      Fully Qualified Domain Name: CORP.NON-97.NET
                              Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
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: -

# CIFSのローカルユーザーを作成 
FsxId0edb8330826eb8118::> cifs users-and-groups local-user create -vserver svm1 -user-name cifs-user -is-account-disabled false

Enter the password:
Confirm the password:

# CIFSのローカルユーザーが作成されたことを確認
FsxId0edb8330826eb8118::> cifs users-and-groups local-user show -vserver svm1 -instance

                                   Vserver: svm1
                                 User Name: SVM1\Administrator
                                 Full Name:
                               Description: Built-in administrator account
                       Is Account Disabled: true

                                   Vserver: svm1
                                 User Name: SVM1\cifs-user
                                 Full Name: -
                               Description: -
                       Is Account Disabled: false
2 entries were displayed.

CIFSファイル共有の作成

次に、CIFSファイル共有を作成します。

今回は/vol1をパスとするcifs-shareというCIFSファイル共有を作成します。

# ボリュームのジャンクションパスを確認
FsxId0edb8330826eb8118::> volume show -fields junction-path -vserver svm1
vserver volume    junction-path
------- --------- -------------
svm1    svm1_root /
svm1    svm1_vol1 /vol1
svm1    svm1_vol2 /vol2
svm1    svm1_vol3 /vol1/vol3
4 entries were displayed.

# CIFSファイル共有の作成
FsxId0edb8330826eb8118::> cifs share create -vserver svm1 -share-name cifs-share -path /vol1

# CIFSファイル共有が作成されたことを確認
FsxId0edb8330826eb8118::> cifs share show -vserver svm1
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           cifs-share    /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
3 entries were displayed.

CIFSのローカルユーザーの認証情報でCIFSファイル共有にアクセス

それでは、CIFSのローカルユーザーの認証情報でCIFSファイル共有にアクセスします。

アクセス元のクライアントはもちろんドメイン不参加です。また、CIFSファイル共有の権限はEveryoneでフルコントロールになっています。

FsxId0edb8330826eb8118::> cifs share access-control show -vserver svm1
               Share       User/Group                  User/Group  Access
Vserver        Name        Name                        Type        Permission
-------------- ----------- --------------------------- ----------- -----------
svm1           c$          BUILTIN\Administrators      windows     Full_Control
svm1           cifs-share  Everyone                    windows     Full_Control
2 entries were displayed.

CIFSファイル共有cifs-shareをZドライブにマウントします。

# ワークグループであることを確認
> Get-WMIObject Win32_ComputerSystem


Domain              : WORKGROUP
Manufacturer        : Amazon EC2
Model               : t3.micro
Name                : EC2AMAZ-32078P3
PrimaryOwnerName    : EC2
TotalPhysicalMemory : 1043886080

# 現在のユーザーを確認
> whoami
ec2amaz-32078p3\ssm-user

# ZドライブにCIFSファイル共有をマウント
> net use Z: \\svm-031f39baab78abb88.fs-0edb8330826eb8118.fsx.us-east-1.amazonaws.com\cifs-share

The password is invalid for \\svm-031f39baab78abb88.fs-0edb8330826eb8118.fsx.us-east-1.amazonaws.com\cifs-share.

Enter the user name for 'svm-031f39baab78abb88.fs-0edb8330826eb8118.fsx.us-east-1.amazonaws.com': cifs-user
Enter the password for svm-031f39baab78abb88.fs-0edb8330826eb8118.fsx.us-east-1.amazonaws.com:
The command completed successfully.

# ZドライブにCIFSファイル共有をマウントできたことを確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                             CurrentLocation
----           ---------     --------- --------      ----                                             ---------------
Alias                                  Alias
C                  13.68         16.32 FileSystem    C:\                                             Windows\system32
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Z                   0.00          0.95 FileSystem    \\svm-031f39baab78abb88.fs-0edb8...

CIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できました。

NTFS ACLでCIFSのローカルユーザーに対してアクセス制御できるか

Domain Adminsのみフルコントロールを与えた場合

おまけで、NTFS ACLでCIFSのローカルユーザーに対してアクセス制御できるか確認してみます。

まず、許可するグループをDomain Adminsのみにした場合の挙動を確認します。

AD DCでドメインのAdministratorでログインして、CIFSファイル共有をZドライブにマウントします。

# ドメインのAdministratorであることを確認
> whoami
corp\administrator

# ドメインに参加していることを確認
> Get-WMIObject Win32_ComputerSystem


Domain              : corp.non-97.net
Manufacturer        : Amazon EC2
Model               : t3.micro
Name                : EC2AMAZ-75JBQCK
PrimaryOwnerName    : EC2
TotalPhysicalMemory : 1043886080

# ZドライブにCIFSファイル共有をマウント
> net use Z: \\SVM1.corp.non-97.net\cifs-share
The command completed successfully.

次にCIFSファイル共有にDomain Adminsへのフルコントロールを与えます。

# 現在のNTFS ACLの確認
> Get-Acl Z:\ | Format-Table -AutoSize -Wrap


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators Everyone Allow  FullControl
                            Everyone Allow  268435456

# CIFSファイル共有の現在のNTFS ACLを取得
> $folder_path = "Z:\"
> $acl = Get-acl $folder_path 

# 許可したいグループもしくはユーザーの名前
> $group_or_user_name = "CORP\Domain Admins"

# フルコントロールを許可
> $permission = ($group_or_user_name, "FullControl", "ContainerInherit" ,"None" ,"Allow") 

# ACEの作成
> $access_rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

# ACEをNTFS ACLに設定
> $acl.SetAccessRule($access_rule) 

# NTFS ACLの適用
> $acl | Set-Acl $folder_path

# 現在のNTFS ACLを確認
> Get-acl $folder_path | Format-Table -AutoSize -Wrap


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators Everyone Allow  FullControl
                            Everyone Allow  268435456
                            CORP\Domain Admins Allow  FullControl

確かにDomain Adminsのフルコントロールの許可が追加されました。

次に、Everyoneに対しての許可を削除します。

# 現在のNTFS ACLを取得
> $acl = Get-acl $folder_path 

# 削除するACEを取得
> $remove_rule = $acl.Access | Where-Object { $_.IdentityReference -eq 'Everyone' }

# ACEの削除
> $remove_rule | 
  ForEach-Object {
    $acl.RemoveAccessRule($_)
  }

# NTFS ACLの適用
> $acl | Set-Acl $folder_path 

# 現在のNTFS ACLを確認
> Get-acl $folder_path | Format-Table -AutoSize -Wrap


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators CORP\Domain Admins Allow  FullControl

Domain Adminsへのフルコントロールの許可のみになりました。

この状態で、CIFSのローカルユーザーでCIFSファイル共有をマウントしているZドライブ配下を表示してみます。

> ls Z:\
ls : Access to the path 'Z:\' is denied.
At line:1 char:1
+ ls Z:\
+ ~~~~~~
    + CategoryInfo          : PermissionDenied: (Z:\:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

PermissionDeniedとしっかり怒られましたね。NTFS ACLが正しく動作していることが分かります。

CIFSのローカルユーザーへの読み取りと実行権限をNTFS ACLに設定

次にCIFSのローカルユーザーへの読み取りと実行権限をNTFS ACLに設定した時の動作を確認します。

エクスプローラーからCIFSファイル共有をマウントしているZドライブ上でプロパティを開き、NTFS ACLの設定をします。

ロケーションをCIFSサーバーにしてCIFSのローカルユーザー名を入力しCheck Namesをクリックすると、作成したCIFSのローカルユーザーが選択できました。

ロケーションの選択

読み取りと実行権限を設定します。

cifs-userの追加

設定後、PowerShellからもNTFS ACLを確認してみます。

> Get-acl $folder_path | Format-Table -AutoSize -Wrap


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators S-1-5-21-2765139605-3334426874-4031651164-1000 Allow  ReadAndExecute, Synchronize
                            CORP\Domain Admins Allow  FullControl

CIFSのローカルユーザーであろうSIDに対して、読み取りと実行権限が許可されていますね。

この状態で、CIFSのローカルユーザーでCIFSファイル共有をマウントしているZドライブ配下で読み書きしてみます。

# Zドライブ配下の読み込み
> ls Z:\


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----l        11/17/2022   3:09 AM                vol3

# Zドライブ配下の書き込み
> echo test > Z:\test.text
out-file : Access to the path 'Z:\test.text' is denied.
At line:1 char:1
+ echo test > Z:\test.text
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (:) [Out-File], UnauthorizedAccessException
    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

NTFS ACLで定義した通り、読み込みはできて書き込みは拒否されました。

CIFSのローカルユーザーへのフルコントロールをNTFS ACLに設定

最後に、CIFSのローカルユーザーへのフルコントロールをNTFS ACLに設定した際の挙動を確認します。

先ほどと同様にエクスプローラーからCIFSのローカルユーザーへのフルコントロールをNTFS ACLに設定します。

設定後、PowerShellからNTFS ACLを確認します。

> Get-acl $folder_path | Format-Table -AutoSize -Wrap


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators S-1-5-21-2765139605-3334426874-4031651164-1000 Allow  FullControl
                            CORP\Domain Admins Allow  FullControl

CIFSのローカルユーザーへのフルコントロールが許可されたことが分かります。

この状態で、CIFSのローカルユーザーでCIFSファイル共有をマウントしているZドライブ配下で読み書きしてみます。

# Zドライブ配下の書き込み
> echo test > Z:\test.text

# 書き込みできたか確認
> ls Z:\


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----l        11/17/2022   3:09 AM                vol3
-a----        11/17/2022   8:51 AM             14 test.text

書き込みできましたね。

ローカルユーザーに対して権限を割り当てさえすればアクセスできる

FSx for ONTAPのCIFSサーバーがドメイン参加している状態でもローカルユーザーで認証できることを確認しました。

逆に言えば、NTFS ACLやCIFSファイル共有の権限でしっかりと絞ってあげなければ、思わぬ抜け穴になりそうです。(Everyoneで運用することはないと思いますが)

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!