ドメイン参加していないコンピューターがドメインユーザーの認証情報でファイル共有にアクセスできるか確認してみた

ドメイン参加しなくてもドメインユーザーの認証情報さえ知っていればアクセスできる
2022.11.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

普段はドメイン参加していないけどCIFSファイル共有にはアクセスしたい

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

皆さんは「普段はドメイン参加していないけど、たまにCIFSファイル共有にアクセスしたい」と思ったことはありますか? 私はあります。

一般的にファイルサーバー上の共有にアクセスする際は、ドメイン参加しているコンピューターから行うことが多いと思います。ふと、ドメイン参加していないコンピューターからファイルサーバーにアクセスする場合は正常に処理されるのか気になりました。

ADの認証で使われるKerberos認証はクライアントがドメインコントローラーにチケットを発行してもらい、そのチケットに基づいてアクセス先で許可をします。ドメイン参加していない場合、もっと言うとドメインコントローラーに対して問い合わせる経路がない状態では、ドメイン参加していないコンピューターからもファイルサーバーにアクセスすることができるのでしょうか。

そういえば、試したことなかったので確認してみました。

いきなりまとめ

  • ドメイン参加していないコンピューターがドメインユーザーの認証情報でCIFSファイル共有にアクセスすることは可能
  • ドメインユーザーの認証情報さえ知っていればアクセスできる
  • NTFS ACLは認証する際に使用したドメインユーザーに基づいて動作する

検証環境

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

ドメイン参加していないコンピューターがドメインユーザーの認証情報で共有にアクセスできるか確認したみたの検証環境構成図

ドメイン参加しておらず、AD DCへの通信が許可されていないEC2インスタンスを用意し、FSx for ONTAP上に作成したCIFSファイル共有にアクセスできるか確認します。また、ドメイン参加していないEC2インスタンスからAD DCへの通信は許可していません。

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

やってみる

CIFSファイル共有の用意

それではやってみます。まずはCIFSファイル共有を作成します。作成するCIFSファイル共有はcifs-shareです。

# SSHでFSx for ONTAPファイルシステムに接続
> ssh fsxadmin@management.fs-05116a70e90917f04.fsx.us-east-1.amazonaws.com
Password:

This is your first recorded login.
Unsuccessful login attempts since last login: 1

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

                                          Vserver: SVM
                         CIFS Server NetBIOS Name: SVM
                    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ファイル共有を作成
FsxId05116a70e90917f04::> cifs share create -vserver SVM -share-name cifs-share -path /vol1

# 作成したCIFSファイル共有の確認
FsxId05116a70e90917f04::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
SVM            c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
SVM            cifs-share    /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
SVM            ipc$          /                 browsable  -        -
3 entries were displayed.

ドメインユーザーの作成

次にドメインユーザーの作成をします。こちらはAD DC上で作業します。作成するドメインユーザーはuser01user02です。

# user01の作成
> $userName = 'user01'
> New-ADUser `
  -Name "$userName" `
  -UserPrincipalName "$userName@corp.non-97.net" `
  -Accountpassword (Read-Host -AsSecureString "AccountPassword") `
  -Path "CN=Users,DC=corp,DC=non-97,DC=net" `
  -PasswordNeverExpires $True `
  -Enabled $True
AccountPassword: ********************************

# user02の作成
> $userName = 'user02'
> New-ADUser `
  -Name "$userName" `
  -UserPrincipalName "$userName@corp.non-97.net" `
  -Accountpassword (Read-Host -AsSecureString "AccountPassword") `
  -Path "CN=Users,DC=corp,DC=non-97,DC=net" `
  -PasswordNeverExpires $True `
  -Enabled $True
AccountPassword: ********************************

# 作成されたユーザーの確認
> Get-ADUser -Filter 'Name -like "user*"' -SearchBase "CN=Users,DC=corp,DC=non-97,DC=net"

DistinguishedName : CN=user01,CN=Users,DC=corp,DC=non-97,DC=net
Enabled           : True
GivenName         :
Name              : user01
ObjectClass       : user
ObjectGUID        : 6cc6754e-516b-4bdb-a4e6-1af227609bd8
SamAccountName    : user01
SID               : S-1-5-21-38571244-2121234638-1230449559-1134
Surname           :
UserPrincipalName : user01@corp.non-97.net

DistinguishedName : CN=user02,CN=Users,DC=corp,DC=non-97,DC=net
Enabled           : True
GivenName         :
Name              : user02
ObjectClass       : user
ObjectGUID        : 97a3e5f6-3000-42b8-ad58-f2a4b66f7222
SamAccountName    : user02
SID               : S-1-5-21-38571244-2121234638-1230449559-1135
Surname           :
UserPrincipalName : user02@corp.non-97.net

ドメインに参加していないEC2インスタンスからドメインユーザーでCIFSファイル共有にアクセス

それでは、本題のドメインに参加していないEC2インスタンスからドメインユーザーでCIFSファイル共有にアクセスしてみます。

まず、ドメインに参加していないEC2インスタンスが参照しているDNSサーバーがAD DC(10.0.1.10)ではない & AD DCをDNSサーバーに指定して名前解決できないことを確認します。

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

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


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


# 参照しているDNSサーバーの確認
> nslookup
Default Server:  ip-10-0-1-2.ec2.internal
Address:  10.0.1.2

> exit

# AD DCをDNSサーバーに指定して名前解決できないことを確認
> nslookup dev.classmethod.jp 10.0.1.10
DNS request timed out.
    timeout was 2 seconds.
Server:  UnKnown
Address:  10.0.1.10

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** Request to UnKnown timed-out

それでは、CIFSファイル共有をドメインユーザー(user01)の認証情報を使ってZドライブにマウントします。

# CIFSファイル共有をドメインユーザーの認証情報を使ってZドライブにマウント
> net use Z: \\10.0.1.100\cifs-share
The password is invalid for \\10.0.1.100\cifs-share.

Enter the user name for '10.0.1.100': user01@corp.non-97.net
Enter the password for 10.0.1.100:
The command completed successfully.

# Zドライブにマウントできていることを確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                 CurrentLocation
----           ---------     --------- --------      ----                                                 ---------------
Alias                                  Alias
C                  13.67         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    \\10.0.1.100\cifs-share

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


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

ドメインに参加していない かつ AD DCへ通信できないコンピューターでもCIFSファイル共有にアクセスできました。

書き込みできるかも確認してみましょう。

> echo "test user01" > Z:\test-user01.txt
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/22/2022   6:32 AM             28 test-user01.txt

書き込みも問題なくできますね。

一旦、Zドライブをアンマウントし、別のドメインユーザー(user02)の認証情報で再度マウントしようとしてみます。

# Zドライブをアンマウント
> net use Z: /delete
Z: was deleted successfully.

# Zドライブに再マウント
> net use Z: \\10.0.1.100\cifs-share
The command completed successfully.

# Zドライブ配下を確認
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/22/2022   6:32 AM             28 test-user01.txt

認証情報を聞かれずにマウントできてしまいました。SSMセッションマネージャーで作業しているので、一度セッションを閉じて再度接続します。

# Zドライブにマウントされていないことを確認
> 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


# CIFSファイル共有をドメインユーザーの認証情報を使ってZドライブにマウント
> net use Z: \\10.0.1.100\cifs-share
The password is invalid for \\10.0.1.100\cifs-share.

Enter the user name for '10.0.1.100': user02@corp.non-97.net
Enter the password for 10.0.1.100:
The command completed successfully.

# Zドライブ配下を確認
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/22/2022   6:32 AM             28 test-user01.txt


# 書き込みできることを確認
> echo "test user02" > Z:\test-user02.txt
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/22/2022   6:32 AM             28 test-user01.txt
-a----        11/22/2022   6:37 AM             28 test-user02.txt

別のセッションであれば別のドメインユーザーの認証情報でマウントできました。

NTFS ACLが動作することを確認する

次にNTFS ACLに従ってアクセスをコントロールできることを確認します。

今回はuser01をフルコントロールで拒否するようなNTFS ACLにします。こちらの作業はAD DCで行います。

まず、現在のCIFSファイル共有のNTFS ACLを確認します。

# ドメインの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: \\SVM.CORP.NON-97.NET\cifs-share
The command completed successfully.

# Zドライブ配下を確認
> ls Z:\


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/21/2022   8:32 PM             28 test-user01.txt
-a----        11/21/2022   8:37 PM             28 test-user02.txt

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


    Directory:


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

現在は、Everyoneに対してフルコントロールで許可されているようです。

こちらにuser01をフルコントロールで拒否するようなACEを追加します。

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

# 拒否したいグループもしくはユーザーの名前
> $group_or_user_name = "user01@corp.non-97.net"

# フルコントロールで拒否
> $permission = ($group_or_user_name, "FullControl", "ContainerInherit" ,"None" ,"Deny") 

# 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 CORP\user01 Deny  FullControl
                            Everyone Allow  FullControl

user01をフルコントロールで拒否するようなACEを追加されました。

それではドメイン参加していないEC2インスタンスからアクセスできるか確認してみます。

user02で接続した時のセッションが残っていたので、NTFS ACLとZドライブ配下を確認してみます。

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


    Directory:


Path Owner                  Access
---- -----                  ------
Z:\  BUILTIN\Administrators S-1-5-21-38571244-2121234638-1230449559-1134 Deny  FullControl
                            Everyone Allow  FullControl

# Zドライブ配下の確認
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/22/2022   6:32 AM             28 test-user01.txt
-a----        11/22/2022   6:37 AM             28 test-user02.txt

user02なのでZドライブ配下のファイルを確認できました。また、ドメインに参加していないのでNTFS ACLにはuser01のSIDS-1-5-21-38571244-2121234638-1230449559-1134に対してフルコントロールで拒否するようなACEがありますね。

それではSSMセッションマネージャーの別のセッションでuser01でマウントします。

# Zドライブにマウントされていないことを確認
> 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


# CIFSファイル共有をドメインユーザーの認証情報を使ってZドライブにマウント
> net use Z: \\10.0.1.100\cifs-share
The password is invalid for \\10.0.1.100\cifs-share.

Enter the user name for '10.0.1.100': user01@corp.non-97.net
Enter the password for 10.0.1.100:
The command completed successfully.

# マウントできていることを確認
> 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    \\10.0.1.100\cifs-share


# 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

はい、拒否されました。ドメイン参加していなくてもCIFSファイル共有をマウントした時のドメインユーザーでNTFS ACLが動作するようです。

ドメイン参加しなくてもドメインユーザーの認証情報さえ知っていればアクセスできる

ドメイン参加していないコンピューターがドメインユーザーの認証情報でファイル共有にアクセスできるか確認したみました。

ドメイン参加しなくても、ドメインユーザーの認証情報さえ知っていればアクセスできるようです。ファイルサーバーが認証情報を受け付けて、それをAD DCに対して正しいか問い合わせているのでしょう。

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

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