この記事は公開されてから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上で作業します。作成するドメインユーザーは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)でした!