OpenSSH for Windows 2003 Server
Installing OpenSSH for Windows 2003 Server - How to get it working
In order to get host based authentication with OpenSSH to work
under Windows 2003 server it is necessary
to run the server with privilege separation instead of as the
system account.
- Either download
and install OpenSSH for Windows, which quite an old version now, or
follow my instructions to compile your own.
I'm assuming you installed the package in
C:\Program Files\OpenSSH
- Change the OpenSSH\etc\sshd_config file:
- UsePrivilegeSeparation yes
- Create an empty folder in
C:\Program Files\OpenSSH\var\empty
which will be the OpenSSH server user's home directory.
- Create the server users account:
net user sshd password /add /fullname:"sshd daemon"
/homedir:"C:\Program Files\OpenSSH\var\empty"
Check that the account's password will not expire in your usual user
management GUI.
- Add the server users account (sshd) to the Administrators group.
net localgroup Administrators sshd /add
- Assign the server users account (sshd) the appropriate rights:
ntrights +r SeAssignPrimaryTokenPrivilege -u sshd
ntrights +r SeCreateTokenPrivilege -u sshd
ntrights +r SeDenyInteractiveLogonRight -u sshd
ntrights +r SeDenyNetworkLogonRight -u sshd
ntrights +r SeDenyRemoteInteractiveLogonRight -u sshd
ntrights +r SeIncreaseQuotaPrivilege -u sshd
ntrights +r SeServiceLogonRight -u sshd
- Give the server users account (sshd) Read, Read & Execute and
List Folder Contents permissions to the OpenSSH folder and
subtree.
- Give the server users account (sshd) ownership and full control of the OpenSSH/var
folder and subtree.
- Now set up the group and passwed files. I've only used local accounts
but domain accounts and groups can be used using the -d flag and appending
these onto the local files.
cd C:\Program Files\OpenSSH\bin
mkgroup -l > ..\etc\group
mkpasswd -l > ..\etc\passwd
- If you're not using the full Cygwin install you probably won't have
bash so you will need to change the shells in the
passwd file to use
/cygdrive/c/Windows/system32/cmd.exe, alternatively if you
are going to need scp you will probably want to
compile switch.exe
and use that.
- Open the Services control panel and change the Log On tab on the
OpenSSH service to use the server account.
- Start/Restart the OpenSSH service.
- What to do if service doesn't start
Additionally, you'd probably want to change OpenSSH\etc\banner.txt
to reflect your own sites policies.
To enable host based authentication:
- Change the OpenSSH\etc\sshd_config file:
- HostBasedAuthentication yes
- IgnoreRhosts no
- Copy public keys from any hosts you want to allow access:
ssh-keyscan -t dsa host.domain >
..\etc\ssh_known_hosts
- Create OpenSSH\etc\shosts.equiv with entries for any hosts
you want to allow access:
host.domain user
To enable public key authentication for Administrator:
- Change the OpenSSH\etc\sshd_config file:
- RSAAuthentication yes
- PubkeyAuthentication yes
- PasswordAuthentication no
- Create a directory OpenSSH in
C:\Documents and Settings\Administrator
- Move
C:\Documents and Settings\Administrator\.ssh to the above
OpenSSH directory
- If the
.ssh directory does not already exist, create one using the mkdir from a command prompt
- Create an authorized_keys2 file in the .ssh directory containing the public key of the user you are logging in from.
- Change ownership of the OpenSSH tree including .ssh and
authorized_keys2 file to Administrator.
- Remove all permissions from the above OpenSSH tree, except Administrator.
- Add read and execute permissions to the above OpenSSH tree for the
sshd user.
- Change Administrator entry in OpenSSH\etc\passwd to be
/home/Administrator/OpenSSH
- Restart the OpenSSH service.
To enable public key authentication for users other than Administrator:
The basic principle is the same as for the Administrator account, here are some
things to remember:
- Make sure the user is in OpenSSH\etc\passwd. If not add them
using
mkpasswd -l >> ..\etc\passwd (replace the -l with
a -d if the user is a domain users). You will probably need to remove any
duplicate entries that mkpasswd will have put in.
- You will also need to check the group entry in the passwd file for the user.
The fields are separated by colons and the group entry is the fourth field.
It should be set to something sensible from the OpenSSH\etc\groups
file, probably Domain Users which, on my installation, is 513.
- Make sure you've created an OpenSSH directory in the users
profile directory. This should contain the .ssh directory and
the authorized_keys2 file. The OpenSSH tree should be
owned by the user and the
sshd must have read and execute
permissions - you probably want to give Administrator permission too just
so you can change things!
- Make sure the directory entry for the user in the
OpenSSH\etc\passwd points at the
OpenSSH directory
instead of /home/user.
- Make sure that the user has read/execute permissions to the
OpenSSH\bin folder and the file OpenSSH\bin\switch.exe.
You can do this with the Authenticated Users group or some other
suitable group.