58 votes

Est-il possible de faire fonctionner sshd en tant qu'utilisateur normal ?

J'ai l'intention de créer une deuxième sshd sur un port non privilégié (par exemple 2222) avec mon propre fichier de configuration.

Il est évident que le sshd Le processus ne peut pas setuid Ainsi, en se connectant en tant qu'utilisateur autre que celui qui exécute l'application sshd est manifestement impossible.

Cependant, est-il possible d'avoir une sshd qui fonctionnera pour l'utilisateur en cours d'exécution ? Pour mon cas d'utilisation, ce serait parfait.

J'ai essayé de démarrer un sshd avec mon propre fichier de configuration et ma propre clé d'hôte et l'instance sshd démarre (je ne me plains pas de ne pas être root, comme certaines commandes), mais lorsque j'essaie de me connecter à ce port, la commande sshd Le processus s'arrête.

$ /usr/sbin/sshd -dD -h .ssh/id_rsa -p 2222 
debug1: sshd version OpenSSH_5.6p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-dD'
debug1: rexec_argv[2]='-h'
debug1: rexec_argv[3]='.ssh/id_rsa'
debug1: rexec_argv[4]='-p'
debug1: rexec_argv[5]='2222'
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
debug1: Bind to port 2222 on ::.
Server listening on :: port 2222.
debug1: fd 6 clearing O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 6 out 6 newsock 6 pipe -1 sock 9
debug1: inetd sockets after dupping: 5, 5
Connection from ::1 port 57670
debug1: Client protocol version 2.0; client software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: list_hostkey_types: 
No supported key exchange algorithms
debug1: do_cleanup
debug1: do_cleanup
debug1: audit_event: unhandled event 12

En debug1: setgroups() failed: Operation not permitted se détache manifestement, mais elle ne meurt pas tant qu'elle n'essaie pas d'accepter une connexion.

52voto

Chris Points 336

Après quelques recherches, j'ai trouvé la solution.

Commencez le processus avec sshd -f ~/.ssh/sshd_config donde /.ssh/sshd_config est un nouveau fichier que vous avez créé. Parmi d'autres options (telles qu'une clé d'hôte différente, un port différent, etc.), vous devez ajouter la ligne suivante UsePrivilegeSeparation no . Cela permet d'éviter que le sshd d'essayer d'effectuer une quelconque setuid o setgid et lui permettre de continuer à fonctionner en tant qu'utilisateur et d'accepter des connexions en tant qu'utilisateur.

EDIT : Quelques instants après avoir trouvé la solution, quelqu'un d'autre m'a tweeté ce lien qui confirme que c'est la bonne façon de procéder : http://cygwin.com/ml/cygwin/2008-04/msg00363.html

16voto

Voici un script bash userland basé sur la réponse de Bo Jeanes que :

  • Créer un lieu de travail à la maison

  • générer des clés de serveur dans le répertoire de travail

  • générer un fichier de configuration de base avec un fichier pid situé dans le répertoire de travail

  • lancer le démon SSH

    mkdir ${HOME}/custom_ssh ssh-keygen -f ${HOME}/custom_ssh/ssh_host_rsa_key -N '' -t rsa ssh-keygen -f ${HOME}/custom_ssh/ssh_host_dsa_key -N '' -t dsa

    cat << EOF > ${HOME}/custom_ssh/sshd_config Port 2222 HostKey ${HOME}/custom_ssh/ssh_host_rsa_key HostKey ${HOME}/custom_ssh/ssh_host_dsa_key AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication no UsePAM yes Subsystem sftp /usr/lib/ssh/sftp-server PidFile ${HOME}/custom_ssh/sshd.pid" EOF

    /usr/bin/sshd -f ${HOME}/custom_ssh/sshd_config echo "----- Process ID : ${HOME}/custom_ssh/sshd.pid -------"

  • OpenSSH_7.9p1, OpenSSL 1.1.1a 20 Nov 2018

  • pam auth (testé avec le même utilisateur local et distant)

15voto

magiclantern Points 131

Comme mise à jour de ce fil de discussion, OpenSSH dans la version 7.5 a déprécié l'option UsePrivilegeSeparation, ce qui rend impossible la désactivation de la séparation des privilèges. Il semble que l'exécution de SSHD en tant qu'utilisateur soit désormais impossible.

Véase https://www.openssh.com/releasenotes.html

4voto

nhed Points 465

En supposant ce que @magiclantern a noté ci-dessus et en supposant que vous ne souhaitiez pas patcher sshd sera de l'ordre de Ourson vous convient-il ? Il est utilisé dans de nombreux appareils embarqués qui veulent un serveur ssh avec un encombrement réduit (et moins de fonctionnalités/configurations).

3voto

Mehrdad Nazmdar Points 31

J'ai vérifié en détail la possibilité d'exécuter le service sshd en tant qu'utilisateur normal. Détail de la version du programme :

version sshd OpenSSH_7.4, OpenSSL 1.0.2k

Finalement, après avoir résolu de nombreuses erreurs, j'ai atteint un point où le SSHD s'est interrompu avec l'erreur suivante :

Tentative d'écriture d'enregistrements de connexion par un utilisateur non root (abandon)

J'ai vérifié le code source pour voir s'il était possible de résoudre le problème sans modifier le code source. Voir le code aquí . Une partie du code provoque l'avortement du programme :

#ifndef HAVE_CYGWIN
    if (geteuid() != 0) {
        logit("Attempt to write login records by non-root user (aborting)");
        return (1);
    }
#endif

Il vérifie les privilèges de l'utilisateur en (geteuid() != 0) et c'est là que se situe le problème.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X