| Privilege separation, or privsep, is method in OpenSSH by which |
| operations that require root privilege are performed by a separate |
| privileged monitor process. Its purpose is to prevent privilege |
| escalation by containing corruption to an unprivileged process. |
| More information is available at: |
| http://www.citi.umich.edu/u/provos/ssh/privsep.html |
| |
| Privilege separation is now enabled by default; see the |
| UsePrivilegeSeparation option in sshd_config(5). |
| |
| On systems which lack mmap or anonymous (MAP_ANON) memory mapping, |
| compression must be disabled in order for privilege separation to |
| function. |
| |
| When privsep is enabled, during the pre-authentication phase sshd will |
| chroot(2) to "/var/empty" and change its privileges to the "sshd" user |
| and its primary group. You should do something like the following to |
| prepare the privsep preauth environment: |
| |
| # mkdir /var/empty |
| # chown root:sys /var/empty |
| # chmod 755 /var/empty |
| # groupadd sshd |
| # useradd -g sshd -c 'sshd privsep' -d /var/empty sshd |
| |
| If you are on UnixWare 7 or OpenUNIX 8 do this additional step. |
| # ln /usr/lib/.ns.so /usr/lib/ns.so.1 |
| |
| /var/empty should not contain any files. |
| |
| configure supports the following options to change the default |
| privsep user and chroot directory: |
| |
| --with-privsep-path=xxx Path for privilege separation chroot |
| --with-privsep-user=user Specify non-privileged user for privilege separation |
| |
| Privsep requires operating system support for file descriptor passing |
| and mmap(MAP_ANON). |
| |
| PAM-enabled OpenSSH is known to function with privsep on Linux. |
| It does not function on HP-UX with a trusted system |
| configuration. PAMAuthenticationViaKbdInt does not function with |
| privsep. |
| |
| Note that for a normal interactive login with a shell, enabling privsep |
| will require 1 additional process per login session. |
| |
| Given the following process listing (from HP-UX): |
| |
| UID PID PPID C STIME TTY TIME COMMAND |
| root 1005 1 0 10:45:17 ? 0:08 /opt/openssh/sbin/sshd -u0 |
| root 6917 1005 0 15:19:16 ? 0:00 sshd: stevesk [priv] |
| stevesk 6919 6917 0 15:19:17 ? 0:03 sshd: stevesk@2 |
| stevesk 6921 6919 0 15:19:17 pts/2 0:00 -bash |
| |
| process 1005 is the sshd process listening for new connections. |
| process 6917 is the privileged monitor process, 6919 is the user owned |
| sshd process and 6921 is the shell process. |
| |
| $Id: README.privsep,v 1.8 2002/06/24 16:49:22 stevesk Exp $ |