È possibile eseguire sshd come un normale utente?


39

Sto cercando di avviare una seconda sshdistanza su una porta non privilegiata (ad es. 2222) con il mio file di configurazione.

Ovviamente, il sshdprocesso non è in grado di setuidaccedere come utenti diversi da quello che esegue il sshddemone è chiaramente impossibile.

Tuttavia, è possibile avere un sshddemone funzionante che funzionerà per l'utente attualmente in esecuzione? Per il mio caso d'uso, questo andrebbe bene.

Ho provato ad avviare sshdun'istanza con il mio file di configurazione e la mia chiave host e il sshdprocesso si avvia (nessuna lamentela sul non essere root, come alcuni comandi), tuttavia quando provo a connettermi a quella porta, il sshdprocesso si interrompe.

$ /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 permittedlinea ovviamente sporge, ma non muore finché non tenta di accettare una connessione.

Risposte:


35

Dopo aver scavato un po 'ho capito.

Inizia il processo con sshd -f ~/.ssh/sshd_configdove /.ssh/sshd_configè stato creato un nuovo file. Tra le altre opzioni (come una chiave host diversa, una porta diversa, ecc.) È necessario aggiungere la linea UsePrivilegeSeparation no. Ciò impedirà al sshdprocesso di tentare di effettuare una setuido più setgidchiamate e consentirà di continuare l'esecuzione come utente e di accettare connessioni come utente.

EDIT: Qualche istante dopo averlo scoperto, qualcun altro ha twittato questo link per me, il che conferma che questo è il modo corretto per farlo: http://cygwin.com/ml/cygwin/2008-04/msg00363.html


1
È inoltre necessario disabilitare PAM impostando UsePamsu no.
Haridsv,

@bjeanes funziona per te? puoi condividere il tuo file sshd_config? si lamenta che "Set" non è un comando valido per me quando provo su Ubuntu.
jojo

@jojo Non eseguo questa configurazione quindi non ho file da condividere. Dovrai iniziare con un file di lavoro noto e adattarti alle tue esigenze.
Bo Jeanes,

1
La cosa disabilitante di PAM è solo per casi specifici. Funziona per me su Fedora senza fare confusione con l'impostazione PAM. Vedi il messaggio di posta elettronica collegato nella risposta per qualche altra idea cos'altro deve essere cambiato per rendere tutto bello. Presto aggiornerò le mie note su come l'ho fatto funzionare per docker : hub.docker.com/r/aosqe/ssh-git-server (attendere un paio di giorni prima di leggerlo)
akostadinov

6

Come aggiornamento a questo thread, OpenSSH nella versione 7.5 ha deprecato l'opzione UsePrivilegeSeparation, rendendo impossibile disabilitare la separazione dei privilegi. Sembra che ora eseguire SSHD come utente sia impossibile.

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


A seconda della configurazione del server, questo potrebbe non essere il caso. Non ho problemi a eseguire sshd come utente normale mentre indica "UsePrivilegeSeparation yes" o "UsePrivilegeSeparation sandbox" nel mio file di configurazione sshd.
a3nm,

Beh, non l'ho ancora provato, ma penso che ora sia "risolto": "sshd (8): se avviato senza i privilegi di root, non è necessario che l'utente della separazione dei privilegi o il percorso esistano. Semplifica l'esecuzione dei test di regressione senza toccare il filesystem ".
Daniel Santos,

2

Ho controllato in dettaglio la possibilità di eseguire il servizio sshd come utente normale. Dettaglio della versione del programma:

versione sshd OpenSSH_7.4, OpenSSL 1.0.2k

Alla fine, dopo aver risolto molti errori, ho raggiunto un punto che SSHD ha interrotto con il seguente errore:

Tentativo di scrivere record di accesso da parte di utenti non root (interruzione)

Ho controllato il codice sorgente per vedere se è possibile risolvere il problema senza modificare il codice sorgente. Vedi il codice qui . Alcune parti del codice che causano l'aborto del programma:

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

Controlla il privilegio dell'utente (geteuid() != 0)e qui causa il problema.


1

Supponendo che cosa abbia notato @magiclantern sopra e supponendo che tu non voglia patchare sshdqualcosa come Dropbear funzionerà per te? È usato in molti dispositivi embedded che desiderano un server ssh con footprint ridotto (e meno funzioni / configurazioni).


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # fa il trucco
dotbit

1

Ecco uno script bash userland basato sulla risposta Bo Jeanes che:

  • Crea dir di lavoro a casa
  • generare le chiavi del server nella directory di lavoro
  • genera un file di configurazione di base con un file pid situato nella directory di lavoro
  • avviare il demone 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 nov 2018
  • pam auth (testato con lo stesso utente locale e remoto)

Vedo ancora: "debug1: setgroups () non riuscito: operazione non consentita"
dotbit

Buona soluzione, ma dovresti rendere i comandi più belli. Brutto.
MAChitgarha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.