Apakah mungkin menjalankan sshd sebagai pengguna normal?

39

Saya bertujuan untuk memulai sshdinstance kedua pada port non-privilege (mis. 2222) dengan file konfigurasi saya sendiri.

Jelas, sshdprosesnya tidak bisa setuidmasuk sebagai pengguna selain dari orang yang menjalankan sshddaemon jelas tidak mungkin.

Namun, apakah mungkin untuk memiliki sshddaemon yang berfungsi yang akan berfungsi untuk pengguna yang sedang berjalan? Untuk kasus penggunaan saya, ini akan baik-baik saja.

Saya mencoba mem-boot sebuah sshdinstance dengan file config dan kunci host saya sendiri dan sshdproses dimulai (tidak ada keluhan tentang tidak menjadi root, seperti beberapa perintah), namun ketika saya mencoba untuk terhubung ke port itu, sshdproses mati.

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

The debug1: setgroups() failed: Operation not permittedgaris jelas menonjol, tetapi tidak mati sampai ia mencoba untuk menerima koneksi.

Bo Jeanes
sumber

Jawaban:

35

Setelah sedikit menggali, saya menemukan jawabannya.

Mulai proses dengan di sshd -f ~/.ssh/sshd_configmana /.ssh/sshd_configfile baru yang Anda buat. Di antara opsi lain (seperti kunci host berbeda, port berbeda, dll) Anda perlu menambahkan baris UsePrivilegeSeparation no. Ini akan mencegah sshdproses mencoba melakukan apa pun setuidatau setgidpanggilan dan memungkinkannya untuk terus berjalan sebagai pengguna Anda dan menerima koneksi sebagai pengguna Anda.

EDIT: Beberapa saat setelah mencari tahu ada orang lain yang men-tweet tautan ini kepada saya yang menegaskan ini adalah cara yang benar untuk melakukan ini: http://cygwin.com/ml/cygwin/2008-04/msg00363.html

Bo Jeanes
sumber
1
Anda juga perlu menonaktifkan PAM dengan mengatur UsePamke no.
haridsv
@ jeanes apakah itu bekerja untuk Anda? dapatkah Anda membagikan file sshd_config Anda? itu mengeluh "Set" bukan perintah yang valid untuk saya ketika saya coba di ubuntu.
jojo
@ jojo Saya tidak menjalankan konfigurasi ini jadi saya tidak punya file untuk dibagikan. Anda harus mulai dengan file kerja yang dikenal dan menyesuaikan dengan kebutuhan Anda.
Bo Jeanes
1
Masalah PAM yang dinonaktifkan hanya untuk kasus tertentu. Bekerja untuk saya di Fedora tanpa mengacaukan pengaturan pam. Lihat pesan email yang ditautkan dalam jawaban untuk beberapa ide lagi apa lagi yang perlu diubah untuk mendapatkan semua hal yang baik. Saya akan segera memperbarui catatan saya bagaimana saya membuatnya bekerja untuk buruh pelabuhan: hub.docker.com/r/aosqe/ssh-git-server (perkenankan beberapa hari sebelum membacanya)
akostadinov
6

Sebagai pembaruan untuk utas ini, OpenSSH dalam versi 7.5 tidak lagi menggunakan opsi UsePrivilegeSeparation, sehingga tidak memungkinkan untuk menonaktifkan pemisahan hak istimewa. Tampaknya menjalankan SSHD sebagai pengguna sekarang tidak mungkin.

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

sihirlantern
sumber
Tergantung pada konfigurasi server, ini mungkin bukan masalahnya. Saya tidak punya masalah menjalankan sshd sebagai pengguna normal sambil menunjukkan "UsePrivilegeSeparation ya" atau "UsePrivilegeSeparation sandbox" di file konfigurasi sshd saya.
a3nm
Yah saya belum mencobanya, tapi saya pikir ini "diperbaiki" sekarang: "sshd (8): ketika dimulai tanpa hak akses root, tidak memerlukan pemisahan pengguna hak atau jalan ada. Membuat menjalankan tes regresi lebih mudah tanpa menyentuh sistem file. "
Daniel Santos
2

Saya telah memeriksa secara terperinci kemungkinan menjalankan layanan sshd sebagai pengguna normal. Detail versi program:

sshd versi OpenSSH_7.4, OpenSSL 1.0.2k

Akhirnya setelah menyelesaikan banyak kesalahan, saya mencapai titik dimana SSHD dibatalkan dengan kesalahan berikut:

Mencoba untuk menulis catatan masuk oleh pengguna non-root (batal)

Saya memeriksa kode sumber untuk melihat apakah mungkin untuk menyelesaikan masalah tanpa mengubah kode sumber. Lihat kodenya di sini . Beberapa bagian dari kode menyebabkan aborsi program:

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

Itu memeriksa hak pengguna dengan (geteuid() != 0)dan di sini menyebabkan masalah.

Mehrdad Nazmdar
sumber
1

Dengan asumsi apa yang @magiclantern sebutkan di atas dan dengan asumsi Anda tidak ingin menambal sshdapakah Dropbear akan bekerja untuk Anda? Ini digunakan di banyak perangkat tertanam yang menginginkan server ssh dengan jejak yang lebih kecil (dan lebih sedikit fitur / konfigurasi).

nhed
sumber
1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # melakukan trik
dotbit
1

Berikut ini adalah bash userland sript berdasarkan jawaban Bo Jeanes bahwa:

  • Buat dir yang berfungsi di rumah
  • buat kunci server di direktori kerja
  • menghasilkan file konfigurasi dasar dengan file pid yang terletak di direktori kerja
  • luncurkan daemon 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 (diuji dengan pengguna lokal & jarak jauh yang sama)
inattendu
sumber
Saya masih melihat: "debug1: setgroups () gagal: Operasi tidak diizinkan"
dotbit
Solusi yang bagus, tetapi Anda harus membuat perintah terlihat lebih baik. Jelek.
MAChitgarha