ドメイン参加していないコンピューターがドメインユーザーの認証情報でファイル共有にアクセスできるか確認してみた
普段はドメイン参加していないけど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上で作業します。作成するドメインユーザーはuser01
とuser02
です。
# 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)でした!