SID (Security Identifier。セキュリティ識別子)
Windowsのアクセス権管理に用いられるID
Windowsのアクセス権管理に用いられるID
- @IT / Windows Serve Inside / Tech TIPS / 2013-03-15: オブジェクトを識別するSIDとは?
- 回答済みWindows 2003 Server のアカウント情報のバックアップ・リストアはできますか?
クリーンインストールするとSIDが変わってしまうため保存してあるファイルへのアクセス権が切れてしまう。
クリーンインストールを期にHDDを入れ替え、
古いOSの入ったHDDをスナップショット的に保存しておくような場合、
アクセス権を書き換えないと古いHDDの個人用のファイルにアクセスができなくなってしまう。
古いHDDに差し戻して古いシステムを動作させる場合に、アクセス権が書き換えられた状態になってしまうため
動体保存として考えるなら、クリーンインストール毎にアクセス権情報を追記していかないといけないためかなり厄介である。
SIDレベルでWindowsのアカウントをimport/exportできればよいのだがどうもそういう機能はないらしい。
ADやDomain使っていると抜け道があらしいが、そもそも個人用途向けではないし、個人用にはかなり敷居も高い。
マジどうにかして欲しい。
# とは言え、SIDにはマシンの固有IDも含まれてるみたいなので
# ADやDomaiじゃない環境でローカルマシン以外のID入ったSID混ざると
# それはそれで気持ち悪いのかも?
クリーンインストールを期にHDDを入れ替え、
古いOSの入ったHDDをスナップショット的に保存しておくような場合、
アクセス権を書き換えないと古いHDDの個人用のファイルにアクセスができなくなってしまう。
古いHDDに差し戻して古いシステムを動作させる場合に、アクセス権が書き換えられた状態になってしまうため
動体保存として考えるなら、クリーンインストール毎にアクセス権情報を追記していかないといけないためかなり厄介である。
SIDレベルでWindowsのアカウントをimport/exportできればよいのだがどうもそういう機能はないらしい。
ADやDomain使っていると抜け道があらしいが、そもそも個人用途向けではないし、個人用にはかなり敷居も高い。
マジどうにかして欲しい。
# とは言え、SIDにはマシンの固有IDも含まれてるみたいなので
# ADやDomaiじゃない環境でローカルマシン以外のID入ったSID混ざると
# それはそれで気持ち悪いのかも?
以下のキーに SID のバイナリが格納されているようだ。
構造についての説明が見つからなかったが、
パッと見た感じだと
SID String "S-R-I-S..." に対して
SID のバイナリのバイト並びはリトルエンディアンで
R, N, ?, ?, ?, ?, ?, I, S[0] * 4, ..., S[N-1] *4
のようになってるっぽい。
? の部分はサンプルが少な過ぎて特定出来なかったが、
とりあえず、
のようにして
以下のように実行すると HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-* と同じ値が得られた。
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-*\Sid
構造についての説明が見つからなかったが、
パッと見た感じだと
SID String "S-R-I-S..." に対して
SID のバイナリのバイト並びはリトルエンディアンで
R, N, ?, ?, ?, ?, ?, I, S[0] * 4, ..., S[N-1] *4
のようになってるっぽい。
? の部分はサンプルが少な過ぎて特定出来なかったが、
とりあえず、
#!/usr/bin/env ruby ARGV.each do |fn| c = (s = IO.read(fn,32)).unpack("C8") sid = (["S", c[0], c[7]] + s[8..8+4*c[1]].unpack("V*")).join("-") print "#{sid}\n" end
以下のように実行すると HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-* と同じ値が得られた。
$ ./sid_test.rb /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows\ NT/CurrentVersion/ProfileList/S-1-5-*/Sid S-1-5-18 S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-1001 S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-1003
WMIC コマンドの group 及び useraccount サブコマンド、PowerShell の Get-LocalGroup, Get-LocalUser コマンドを使うと得られる模様。
Cygwin の permission と言うか、ACL と言うか、「%USERDOMAIN%\なし」の SID、wautils で探すと
これはどうすれば良いのだろう?
参考:
wmic group get name,sid wmic useraccount get name,sid powershell -c "Get-LocalGroup | % {\"{0,-32} : {1}\" -f $_.name,$_.sid.value}" powershell -c "Get-LocalUser | % {\"{0,-32} : {1}\" -f $_.name,$_.sid.value}"
Cygwin の permission と言うか、ACL と言うか、「%USERDOMAIN%\なし」の SID、wautils で探すと
$ ./LookupAccountSid $USERDOMAIN S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-513 |& iconv -f CP932 SystemName : $USERDOMAIN SID : S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-513 ReferencedDomainName : $USERDOMAIN AccountName : なしみたいに出て来るけど、上記の wmic や powershell のコマンドだと見つからない。
これはどうすれば良いのだろう?
参考:
- wikiHow / How to Find a Users SID on Windows
- WINDOWS COMMAND LINE / Get SID of user
- ↑Get-ADGroup があるって事は Local もある?あった!↓
- Microsoft / PowerShell 5.1
- Qiita / jca02266 /2018-08-24: powershell チートシート
タグ
コメントをかく