Frage Ist es möglich, sshd als normaler Benutzer auszuführen?


Ich ziele darauf ab, eine Sekunde anzufangen sshd Instanz auf einem nichtprivilegierten Port (z. B. 2222) mit einer eigenen Konfigurationsdatei.

Offensichtlich sshd Prozess kann nicht setuid Melden Sie sich also als Benutzer an, die nicht der Benutzer sind, der das Programm ausführt sshd Daemon ist eindeutig unmöglich.

Ist es jedoch möglich, eine Arbeit zu haben? sshd Daemon, der für den gerade laufenden Benutzer funktioniert? Für meinen Anwendungsfall wäre das in Ordnung.

Ich habe versucht, einen zu booten sshd Instanz mit meiner eigenen Konfigurationsdatei und Host - Schlüssel und der sshd Prozess startet (keine Beschwerden über nicht root, wie einige Befehle), aber wenn ich versuche, eine Verbindung zu diesem Port, die sshd Prozess stirbt.

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

Das debug1: setgroups() failed: Operation not permitted Linie ragt offensichtlich heraus, aber sie stirbt nicht, bis sie versucht, eine Verbindung zu akzeptieren.


33
2017-12-27 03:26


Ursprung




Antworten:


Nachdem ich ein bisschen herumgegrubbelt habe, habe ich es herausgefunden.

Starten Sie den Vorgang mit sshd -f ~/.ssh/sshd_config woher /.ssh/sshd_config ist eine neue Datei, die Sie erstellt haben. Neben anderen Optionen (wie einem anderen Hostschlüssel, anderem Port usw.) müssen Sie die Zeile hinzufügen UsePrivilegeSeparation no. Dies verhindert die sshd Prozess von versuchen, irgendwelche zu tun setuid oder setgid ruft auf und lässt es als Benutzer weiterlaufen und akzeptiert Verbindungen als Benutzer.

EDIT: Ein paar Augenblicke nachdem ich es herausgefunden hatte, twitterte jemand anderes diesen Link zu mir, der bestätigt, dass dies der richtige Weg ist: http://cygwin.com/ml/cygwin/2008-04/msg00363.html


31
2017-12-27 04:03



Sie müssen PAM auch deaktivieren, indem Sie festlegen UsePam zu no. - haridsv
@bjeanes funktioniert es für dich? Können Sie Ihre sshd_config-Datei freigeben? es beschweren "Set" ist kein gültiger Befehl für mich, wenn ich auf Ubuntu versuche. - jojo
@jojo Ich führe diese Konfiguration nicht aus, damit ich keine Datei teilen muss. Sie müssen mit einer bekannten Arbeitsdatei beginnen und sich an Ihre Bedürfnisse anpassen. - Bo Jeanes
Die Deaktivierung von PAM ist nur für bestimmte Fälle möglich. Funktioniert für mich auf Fedora, ohne die Pam-Einstellung zu stören. Sehen Sie die verknüpfte E-Mail-Nachricht in der Antwort für einige weitere Ideen, was noch geändert werden muss, um alles gut zu bekommen. Ich werde bald meine Notizen aktualisieren, wie ich es für Docker gemacht habe: hub.docker.com/r/aosqe/ssh-git-server (bitte erlauben Sie ein paar Tage, bevor Sie es lesen) - akostadinov


Als Aktualisierung dieses Threads lehnte OpenSSH in Version 7.5 die Option UsePrivilegeSeparation ab, was eine Deaktivierung der Privilegientrennung unmöglich machte. Es scheint, dass das Ausführen von SSHD als Benutzer jetzt unmöglich ist.

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


3
2017-07-12 20:17



Abhängig von der Serverkonfiguration ist dies möglicherweise nicht der Fall. Ich habe kein Problem damit, sshd als normalen Benutzer auszuführen, während ich "UsePrivilegeSeparation yes" oder "UsePrivilegeSeparation sandbox" in meiner sshd-Konfigurationsdatei anzeige. - a3nm


Ich habe die Möglichkeit, den sshd-Dienst als normalen Benutzer auszuführen, ausführlich geprüft. Detail der Version des Programms:

sshd Version OpenSSH_7.4, OpenSSL 1.0.2k

Schließlich habe ich nach dem Lösen vieler Fehler einen Punkt erreicht, an dem SSHD mit dem folgenden Fehler abgebrochen wurde:

Versuch, Anmeldedatensätze von Nicht-Root-Benutzern zu schreiben (Abbruch)

Ich habe den Quellcode überprüft, um zu sehen, ob es möglich ist, das Problem zu lösen, ohne den Quellcode zu ändern. Siehe den Code Hier. Ein Teil des Codes verursacht einen Abbruch des Programms:

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

Es prüft die Benutzerberechtigung nach (geteuid() != 0) und hier verursacht das Problem.


1
2018-02-22 18:42





Angenommen, was @magiclantern festgestellt hat über und angenommen, du willst nicht patchen sshd wird etwas wie Tropfenbär Arbeite für dich? Es wird in vielen eingebetteten Geräten verwendet, die einen ssh-Server mit kleinerer Grundfläche (und weniger Features / Konfigurationen) benötigen.


0
2018-05-10 22:55