Machine SIDs and Domain SIDs
Microsoft Technical Fellow Mark Russinovich’s recent post “The Machine SID Duplication Myth” confused many readers who didn’t understand the distinction between the two independent SIDs that belong to a domain-joined computer. I’ll take a crack at trying to clarify that.
Machine and domain SIDs consist of a base SID and a Relative ID (RID) that is appended to the base SID. Think of the base SID by itself as identifying an authority within which accounts and groups can be defined. A computer is an authority within which local accounts and groups are defined. The computer has a machine SID, and the local accounts and groups have SIDs consisting of that machine SID plus a RID. For example:
Machine SID for computer DEMOSYSTEM | S-1-5-21-3419697060-3810377854-678604692 |
DEMOSYSTEM\Administrator | S-1-5-21-3419697060-3810377854-678604692-500 |
DEMOSYSTEM\Guest | S-1-5-21-3419697060-3810377854-678604692-501 |
DEMOSYSTEM\CustomAccount1 | S-1-5-21-3419697060-3810377854-678604692-1000 |
DEMOSYSTEM\CustomAccount2 | S-1-5-21-3419697060-3810377854-678604692-1001 |
SIDs (not names) are what are stored in access tokens associated with running code and in security descriptors associated with securable objects, and are what are compared by the security subsystem when performing access checks.
On a workgroup system, local accounts and groups are all there are. Mark’s assertion is that authentication to a remote system using a local account requires a user name and password known to the remote system, and that SIDs are not used. The only way anything resembling single sign on happens with local accounts is that if the remote system has the same user name and password that the caller is using. SIDs are not transmitted and are not used for remote authentication.
If the computer is joined to a domain, then another SID comes into play. The computer still has its own machine SID and its own local accounts and groups. But it is also a member of a domain, and so it has a SID representing its computer account within that domain. The domain is an authority within which accounts and groups (and other entities) can be defined – including computer accounts:
SID for domain BIGDOMAIN | S-1-5-21-124525095-708259637-1543119021 |
BIGDOMAIN\DEMOSYSTEM$ (computer account) | S-1-5-21-124525095-708259637-1543119021-937822 |
BIGDOMAIN\JOHNSMITH (user account) | S-1-5-21-124525095-708259637-1543119021-20937 |
DEMOSYSTEM now has two separate SIDs:
- the machine SID which identifies it (locally) as an authority within which accounts and groups are defined (first row in the first table above); and
- the computer account SID within the BIGDOMAIN domain (second row in the second table).
You can see the machine SID on your computer by running Sysinternals PsGetSid with no parameters. You can see the second SID on a domain-joined system by passing PsGetSid the computer name followed by a $: psgetsid %COMPUTERNAME%$
Mark’s point is that SIDs must be unique within the authority in which they are used. So while DEMOSYSTEM must have only one local account with the SID S-1-5-21-3419697060-3810377854-678604692-1000, it doesn’t matter if another computer uses the same SID to refer to a local account of its own. However, within the BIGDOMAIN domain, there must be only one computer account with the SID S-1-5-21-124525095-708259637-1543119021-937822. If multiple computers in the domain try to share that computer SID within the domain, problems will occur. So while it’s OK to clone a system before it joins a domain, doing so after it joins a domain (and is assigned a domain computer account and a corresponding domain SID) will cause problems.
Aug 6 2012: Late edit, but here's another related post on this subject, authored by Michael Murgolo: Sysprep, Machine SIDs and Other Myths.
Hope this helps!
Comments
Anonymous
November 04, 2009
Nice job. I think I was already understanding the distinction, but your post confirms that understanding.Anonymous
November 05, 2009
"SIDs must be unique within the authority in which they are used" Explains it beautifully :-)Anonymous
November 05, 2009
"So while it’s OK to clone a system before it joins a domain, doing so after it joins a domain (and is assigned a domain computer account and a corresponding domain SID) will cause problems." so...its almost like the resource kit recommendation for using sysprep when deploying an OS is to make sure the possible problems wont occur? I just read chapter 3 of the windows 7 resource kit... I hv been using sysprep, ghostwalker and newsid for years now...because i didnt really question why it was needed. The explanation about the SID is excellent tho...Anonymous
November 05, 2009
Great explanation, Aaron. I think where most people struggle is in understanding that the OS and domain infrastructure itself do not require that the machine SID be unique across the infrastructure in order to maintain security and base functionality. It has been reported that many non-OS applications expect the SID to be unique like Terminal Server Licensing, MS SCCM, Symantec Antivirus, etc. This issue also becomes muddier by cloning and the duplication of other 'unique ids' like the SUSClientId and GUID used by network hardware, etc. It is very important that people understand the full (and quite specific) scope of what Mark is trying to point out. It is still best practice to use Sysprep when imaging machines as it solves the problems mentioned above: SUSClientID, Plug and Play hardware GUIDs, machine SID, domain SID, etc. Thanks again for putting this out there.Anonymous
November 27, 2009
The comment has been removedAnonymous
January 07, 2010
"OK to clone a system before it joins a domain, doing so after it joins a domain (and is assigned a domain computer account and a corresponding domain SID) will cause problems." I disagree. You can clone domain computer by this step:
- Clone domain joined computer
- Start cloned computer without network
- Remove it from domain (make more clones if needed)
- Restart, rename
- Join domain
Anonymous
April 15, 2010
Great explanation, but I would hope that any IT Pro knows that you don't take an image of a domain joined PC :-)Anonymous
December 06, 2010
Something to watch out for.... blog.schertz.name/.../dont-give-up-on-sysprep-yetAnonymous
November 06, 2014
With Meitzi's method, the sid will still be the same once deployed.Anonymous
March 24, 2015
The machine's local SID is still important, when you promoting a computer as a DC. So unless it's unique, you may end up having several DCs with the same SIDAnonymous
April 07, 2017
Just read this article after reading Mark's page on this. Can I ask a favour of you? Can I send you my SysInternals books by Mark, and have you make comments after every page so that I can understand what he's talking about? :)[Aaron Margosis] LOL!