Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 19 Next »

A Windows user account can be renamed. You almost certainly never want to do it, and changing your Yale Netids is almost impossible because of all the systems that use it, but Windows does allow it. What doesn’t change is a unique binary identifier created when the account was defined: the Security ID or SID. When you login, Windows identifies you through your SID. Access to files and directories are through the SID. Each group you are a member of also has its own SID.

There are three sources for SIDs:

  1. Microsoft generates some built in “factory installed” SIDs for standard Windows components, and many of these built in accounts also have a dummy User name.

  2. As an administrator, you create Local User accounts on your own machine. The SID for a Local User is unique and exists only on the one computer, even if you create an account with the same User name on another computer.

  3. Microsoft’s Active Directory creates SIDs that can be shared across machines. All computers that are members of the same AD, including all the Managed Workstations at Yale, share the SIDs in the yu.yale.edu domain also known by the nickname YALE. This is where your Netid and its password are saved.

Factory Installed SIDs

The Microsoft TrustedInstaller identity is built into Windows and has permission to update the most sensitive files in the operating system. It installs the monthly maintenance and optional components of Windows. You do not have and do not want to have direct access to it.

SYSTEM is an anonymous identity for most of the programs that run as background Services. There are some special versions of SYSTEM for SQL Server and Hyper-V. SYSTEM identities can access any file on a local hard disk but this SID is meaningless to other computers, so programs that run under this SID have no access to anything on another computer. There are two practical consequences of this:

  • SQL Server can only backup and restore databases to files on a local disk.

  • Hyper-V can only start a VM if all its VM VHDX disk files and ISO DVD image files are on a local disk, and it can only export/import a VM to local directories.

In some cases, the utility that you are running under your userid may have access to a file through your logon that the background service cannot access. You may be able to build a SQL Server backup request or configure a VM through the Hyper-V manager, but when you try to run the backup or start the VM, that will fail. Typically, an administrator learns to copy files to local disk before an operation and then move or copy files to a network disk when they are no longer needed.

Local User SIDs created by You

Yale Security Policy expects users to login with their Yale Netid to Yale Managed Workstations and other computers that are Yale owned and on the Yale network. This section describes the security procedures for Hyper-V VMs that run inside your laptop or personally owned computers on a home network.

A Local User is an account you create when you are acting as an administrator of your Windows 11 or Windows Server VM. You assign a name and a password to the account and then add it to local groups. A local user can login to the machine, own files, and can be given various permissions.

The SID for a Local User account is unique to the one machine where it was created and is meaningless on other machines. You can see this by logging in as a non-admin Local User, creating a file on an NTFS formatted thumb drive, and then move the drive to another computer. The other computer has no idea who owns or created the file because the Local SID generated by that computer is meaningless to other machines.

When you login to a computer, it runs everything in your session under your SID.

Workgroup Authentication

Personally owned machines or VMs are not members of an AD Domain, but they can be on the same home or small business network. To allow simple administration and file sharing between Windows 11 computers on such networks, Microsoft has a form of Network Authentication for a “workgroup” with Local Users.

If you create two Local Users on two personally owned computers and give each the same username and password, then the two accounts have different SIDs on each machine. If you put a file on a USB disk and move it to the other machine, the SID will not be recognized on the machine that did not create it.

However, if one machine shares a directory and the other machine maps that shared disk to an unused disk letter, now “workgroup” authentication applies over the network.

For thirty years, Workgroup authentication has used a protocol called NTLM (or NTLMv2 in its latest version). Starting with some future version of Windows 11 after 24H2 Microsoft will be adding a new protocol based on Kerberos called LocalKDC, but the switch will be transparent to users.

Using either NTLM or LocalKDC, the two workgroup computers will, without transmitting the password, verify that each has the same password for this userid. The Server end of the connection assigns its local user SID to the session, and the client computer has access, through the network, to the same files, SQL Server logins, and admin services that the Server permits to its local user.

The technical details of how and why it works are unimportant to most users. Typically, someone will simply define all the same userids and passwords on all computers and VMs and they will simply be able to talk to each other. A developer may do something a bit more complicated and is then better off to understand what is going on inside the box.

Fully Qualified Usernames

While two userids with the same password match each other and allow access over the network, they still have different SIDs, and this may be important when you move disks from one computer to another. There is a Windows notation to explicitly prefix a username with the machine or AD domain where it was defined.

Assume there are two computers named SNARK and BOOJUM and each has an account named “bellman” with the same password on both machines. The notation “SNARK\bellman” means the account (and SID) for bellman on SNARK and “BOOJUM\bellman” means the account on BOOJUM.

If bellman logged into SNARK contacts BOOJUM through the network, then BOOJUM verifies that it has a local user also named “bellman” and that the password for “bellman” is the same on both BOOJUM and SNARK. It then assigns the SID of BOOJUM\bellman to the network session.

This works for access to files and directories owned by or permitted to BOOJUM\bellman. It also works for SQL Server sessions using Windows authentication, which are then associated with the SQL Server login identified as BOOJUM\bellman (even though the remote client is really SNARK\bellman). It also works for Windows admin command that can be directed over the network to another computer.

There is, however, no way to generate a permission on a network session for a specific user on a remote computer. The user SNARK\baker could not connect to BOOJUM at all unless there is a BOOJUM\baker with the same password, and SQL Server can only generate Logins for Local Users (and Domain Users if the machine is also a member of a Domain).

Active Directory Domain User SIDs

Even before Microsoft created Active Directory, a Domain was a set of userids with SID values that could be shared on multiple machines over a network. When a user is defined in a Domain, then a SID is created. Other machines that are members of the same Domain can create accounts on the machine for that Domain user, and when they do so they copy the SID from the Domain controller to their local account database.

If we now repeat the previous experiment and transfer a file from one computer to another computer using a USB drive formatted with the NTFS file system, then a file created by a Domain user account on one machine will be recognized by another machine in the same Domain because all the Domain SID values are known and shared by all the computers in the Domain.

Yale Security Policy requires you to use your Yale AD account to login to Managed Workstations and other Yale owned computers performing Yale business. This allows the University to enforce basic security standards.

So, if “bellman” is a Yale Netid, and SNARK and BOOJUM are Yale machines, then there would be only one userid named YALE\bellman, it would be the same on both machines, it would have the same SID on both machines, and disks could be freely moved from one machine to the other.

While it is not allowed by YALE policy, there can be both a Doman account with a given user name and a Local account with the same username. It is possible for SNARK to have both a SNARK\bellman local user and a YALE\bellman Domain account. These are two entirely different people, with different files and permissions and separate home directories.

If someone is logged into a computer with a Domain account, then Kerberos protocol is used to authenticate to the login machine and to all other computers anywhere in the world that are members of the same Domain. If someone is logged on to a computer with a local user, then workgroup authentication is used to other computers, but typically those computers will be on the same LAN.

Your Own Domain Controller

You can only create an AD on a Windows Server machine. It can be a real computer or a VM. Yale’s site license allows anyone at Yale to run Windows Server, but it is not a very good choice for a personal computer. It lacks end user features like Windows Store, drivers for devices that servers don’t use (like WebCams for meetings), and other things you use every day. However, Windows Server is easy to install as a VM.

There is a Server Manager with a menu interface to add the Active Directory Role to the server and then configure your own single-machine AD. Alternately, you can do this with two PowerShell commands.

However, before you create the AD, you should create Local Users who are going to be in the Administrators group of the Server. That is because when you create the AD, they become Domain Admins.

Start by creating a Windows Server VM. At this point it is just a Windows machine and needs a hostname, so we will call it FIT. Create a local user “bellman” and put him in the Administrator’s group. Create other admins as desired. At this point the Server is temporarily just a Workgroup machine and it can interact with other computers and VMs using workgroup rules.

Now two PowerShell commands documented elsewhere can transform the FIT machine into the Domain Controller of a new AD. Every AD must have its own DNS server, and it needs a new DNS name that will be known to that server plus a nickname. We give it the DNS name of hunting.yale.sandbox and nickname of HUNTING.

When the AD is created, the local administrators of the FIT Server now become administrators of the HUNTING AD Domain. Because an unknown amount of time has passed since the Server was installed, and because many files and directories may be owned or permitted to the SID of the local user FIT\bellman, it is not possible to change that SID when FIT\bellman also becomes HUNTING\bellman. So, the old Local User SID is copied to the AD and becomes the AD SID of HUNTING\bellman.

This connection aliasing Local and Domain accounts occurs only during the creation of the AD, so before you create the AD you should create all the Local User accounts that you need to behave this way.

In a corporate or campus AD, the Domain servers provide a widely used public service, but nobody is allowed to login to these machines except for a small number of specially trusted users. This is a Sandbox AD. You are the only one who will ever use it, and your VMs and test users are the only ones who will use it. So, it is convenient for you to be easily able to access it from all your computers.

So in this case, if you are “bellman” or if you added your real userid to the Administrators group before creating the AD Domain, you can now access the Windows Server and all the AD services and interfaces using either a Domain Admin account login (like HUNTING\bellman) to a computer in the domain (like FIT), or else you can still use workgroup authentication and send AD requests and commands from other computers in the network using NTLM/localKDC protocol from a login as SNARK\bellman or BOOJUM\bellman. Because the local userid FIT\bellman is the same SID as the Domain user HUNTING\bellman, once a network request is received by the machine, it gets the same SID and is handled the same way whether the request authenticated using workgroup or Kerberos protocol.

Impersonate

All programs run under a SID. Some programs run in the background under Microsoft built in SIDs like SYSTEM. Other programs inherit from the session the SID of the User that authenticated to the computer.

Ordinary users can run a new program under a different userid by triggering a new Login for that program where they enter the new userid and its password. This is typically called “doing a RunAs”.

However, components that are part of Windows or run as part of the System can call a service that lets them temporarily change the SID a program is running under. This is called “impersonation”.

A program that is normally running as System may change its SID to user “bellman”, but it does not then know the password of user “bellman”, nor does it have any credentials from the AD Domain. As a result, it cannot make network requests to other computers using either “workgroup” or AD Kerberos. It can access local files and local services as “bellman”.

SSH Server

When you install OpenSSH Server (sshd.exe) on Windows, it runs as a service under a System ID.

If an SSH client logs in through SSH with a userid and password, then sshd.exe can use them to do a secondary Login. This generates a user session that has a full credential that can be used for “workgroup” or AD domain authentication to remote network services including shared disks and SQL Server databases.

However, if you use public key authentication to SSH, then no password is provided. Then sshd.exe can only do an “impersonation” and create a process to run the command passed by the remote user under the local SID of the userid specified in the SSH client connection. The SSH session can access local files permitted to that user, and SQL Server databases on that one machine, but there is no access to network services and files on other machines.

The SSH client can connect using public key authentication to either a local user account or a domain user account. The client private key simply has to match an entry in the authorized_keys file of the .ssh subdirectory of the home/profile directory of the local or domain user. The sshd.exe program can impersonate the local SID or the domain SID. However, creating a session with the domain SID does not generate Kerberos login credentials (a TGT object) just as impersonating a local SID does not provide a password for workgroup resource access. An impersonated domain SID can access local files permitted to that domain user, and can connect to a Login in a SQL Server instance on the local machine, but no access outside the machine is provided. Of course, the client could force a userid/password authentication instead of using the public keys, and then there would be a TGT granting access from the domain account to other computers on the network.

Sandbox Administration

A Developer Sandbox is a set of VMs, some Linux and some Windows, that are used to test applications. An IAM developer may have a Windows Server VM in the Sandbox with an Active Directory. Typically, a Sandbox AD is called yu.yale.sandbox (alias SANDBOX)

No computer or VM can be a member of two Domains, and a Sandbox AD cannot be configured to know about and “trust” the production yu.yale.edu (alias YALE) AD domain. This means that the developers laptop managed workstation is a member of the YALE domain, while other VMs in the sandbox may be unaffiliated “workgroup” computer or members of the SANDBOX domain.

The Windows tools that allow administration across the network are designed to work easily when both machines are members of the same Domain. They work a bit less simply if both machines are in a “workgroup” connected to the same LAN and the same Administrator userid and password are defined on all machines.

However, Windows admin tools do not work when one machine is in a Domain and the other machine is in a Workgroup, or when the two machines are members of different Domains such as YALE and SANDBOX. However, the PowerShell remote commands and sessions (Invoke-Command, New-PSSession) now support SSH between computers and can use public key authentication that works even when the client is the laptop on the YALE Domain and the remote target is either a standalone workgroup VM or a member of the SANDBOX Domain. Generally there is a PowerShell command for any administrative action you want to perform, so you can build PowerShell admin scripts that use
Invoke-Command -UserName bellman -HostName SNARK {…}
in cases where the normal
Invoke-Command -Computer SNARK {…}
doesn’t work because of mismatch between the current logged in user and the affiliation of the target machine.

  • No labels