Est-il possible d'exécuter sshd en tant qu'utilisateur normal?

39

Je souhaite démarrer une deuxième sshdinstance sur un port non privilégié (par exemple, 2222) avec mon propre fichier de configuration.

De toute évidence, le sshdprocessus ne peut pas se setuidconnecter en tant qu'utilisateur autre que celui qui exécute le sshddémon est clairement impossible.

Cependant, est-il possible d'avoir un sshddémon qui fonctionne pour l'utilisateur en cours d'exécution? Pour mon cas d'utilisation, ce serait bien.

J'ai essayé de démarrer une sshdinstance avec mon propre fichier de configuration et une clé d'hôte et le sshdprocessus démarre (aucune plainte pour ne pas être root, comme certaines commandes), mais lorsque j'essaie de me connecter à ce port, le sshdprocessus s'interrompt.

$ /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

La debug1: setgroups() failed: Operation not permittedligne dépasse de toute évidence, mais elle ne meurt pas avant d’essayer d’accepter une connexion.

Bo Jeanes
la source

Réponses:

35

Après un peu de fouilles, j'ai compris.

Commencez le processus avec sshd -f ~/.ssh/sshd_config/.ssh/sshd_configest un nouveau fichier que vous avez créé. Parmi les autres options (telles qu'une clé d'hôte différente, un port différent, etc.), vous devez ajouter la ligne UsePrivilegeSeparation no. Cela empêchera le sshdprocessus d’essayer de faire setuidou desetgid appels et lui permettra de continuer à s'exécuter en tant qu'utilisateur et d'accepter les connexions en tant qu'utilisateur.

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

Bo Jeanes
la source
1
Vous devez également désactiver PAM en définissant UsePamsur no.
haridsv
@bjeanes ça marche pour vous? pouvez-vous partager votre fichier sshd_config? il se plaint "Set" n'est pas une commande valide pour moi lorsque j'essaie sur Ubuntu.
Jojo
@jojo Je n'exécute pas cette configuration, je n'ai donc aucun fichier à partager. Vous allez devoir commencer avec un fichier de travail connu et vous adapter à vos besoins.
Bo Jeanes
1
La désactivation de PAM ne concerne que des cas spécifiques. Fonctionne pour moi sur Fedora sans se mêler du paramètre pam. Voir le message électronique lié dans la réponse pour quelques idées supplémentaires sur ce qui doit encore être changé pour que tout soit beau. Je mettrai bientôt à jour mes notes sur le fonctionnement du docker: hub.docker.com/r/aosqe/ssh-git-server (s'il vous plaît, attendez quelques jours avant de le lire)
akostadinov
6

En tant que mise à jour de ce fil, OpenSSH dans la version 7.5 a déconseillé d'utiliser l'option UsePrivilegeSeparation, rendant impossible la désactivation de la séparation des privilèges. Il semble qu'exécuter SSHD en tant qu'utilisateur est maintenant impossible.

Voir https://www.openssh.com/releasenotes.html

lanterne magique
la source
Selon la configuration du serveur, cela peut ne pas être le cas. Je n'ai aucun problème à exécuter sshd en tant qu'utilisateur normal tout en indiquant "UsePrivilegeSeparation yes" ou "UsePrivilegeSeparation sandbox" dans mon fichier de configuration sshd.
a3nm
Eh bien, je ne l'ai pas encore essayé, mais je pense que cela est "corrigé" maintenant: "sshd (8): lorsqu'il est démarré sans privilèges root, il n'est pas nécessaire que l'utilisateur ou le chemin d'accès à la séparation des privilèges existe. Facilite l'exécution des tests de régression. sans toucher le système de fichiers ".
Daniel Santos Le
2

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:

sshd version OpenSSH_7.4, OpenSSL 1.0.2k

Enfin, après avoir résolu de nombreuses erreurs, j’ai atteint un point tel que SSHD a été abandonné avec l’erreur suivante:

Tentative d'écrire des 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 changer le code source. Voir le code ici . Une partie du code provoquant 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 le privilège d'utilisateur par (geteuid() != 0)et provoque ici le problème.

Mehrdad Nazmdar
la source
1

En supposant ce que @magiclantern a noté ci - dessus et en supposant que vous ne souhaitiez pas appliquer de correctifs sshd, quelque chose comme Dropbear fonctionnera-t-il pour vous? Il est utilisé dans de nombreux périphériques intégrés qui souhaitent un serveur ssh avec une empreinte réduite (et moins de fonctionnalités / configurations).

nhed
la source
1
dropbear -E -F -R -w -g -a -p-2222 -P ./dbearPID # fait l'affaire
dotbit
1

Voici un script bash basé sur la réponse de Jeans Bo Jean:

  • Créer un répertoire de travail à domicile
  • 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
echo "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" > ${HOME}/custom_ssh/sshd_config
/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 novembre 2018
  • pam auth (testé avec le même utilisateur local et distant)
inattendu
la source
Je vois encore: "debug1: setgroups () a échoué: opération non autorisée"
dotbit
Bonne solution, mais vous devriez améliorer l'apparence des commandes. Laid.
MAChitgarha le