Mengizinkan hanya pengguna tertentu untuk masuk melalui ssh di satu port dan yang lain masuk melalui port lain

13

Saya memiliki kasus penggunaan berikut:

  • Harus memungkinkan pengguna untuk masuk dari jaringan yang aman dan tepercaya
  • dan kemudian memungkinkan beberapa (hanya dua) pengguna ponsel untuk login dari jarak jauh pada mesin Linux Centos.

Saya dapat membuat sshd berjalan pada port yang berbeda misalnya:

  • dari dalam tidak apa-apa untuk membuatnya berjalan pada 22 karena saya tidak ingin membuat mereka terhubung pada port lain (mengacaukan skrip).
  • Untuk pengguna seluler luar, saya akan menjalankan sshd pada port yang berbeda, misalkan port X (keamanan yang ditingkatkan - ini adalah jenis pengaturan kantor kecil).

Untuk keamanan tambahan, saya berharap untuk mengkonfigurasi sshd untuk memungkinkan akses ke hanya pengguna tertentu pada port X (dan kemudian mengkonfigurasi beberapa peringatan sehingga kita bisa tahu kapan pengguna masuk melalui port X).

Namun, saya tidak dapat menemukan konfigurasi seperti ini di dokumentasi sshd. Jika tidak ada solusi seperti ini, apakah setidaknya mungkin untuk memicu skrip shell untuk dijalankan setiap kali seseorang menyelesaikan login sshd di port X? Saya melihat dokumentasi iptables untuk melihat apakah itu dapat memicu peringatan ketika sshd login ada tetapi tidak dapat menemukan apa pun.

Masukan dihargai

doon
sumber

Jawaban:

12

Berjalan SSHdi port alternatif tidak lagi dianggap sebagai keamanan. Ini hanya menambah sedikit ketidakjelasan, dan menambah kerumitan bagi pengguna Anda. Ini menambahkan nol hambatan bagi orang yang ingin merusak jaringan Anda, yang menggunakan pemindai port otomatis dan tidak peduli port apa yang sedang berjalan.

Jika Anda ingin meningkatkan keamanan pada sistem yang memungkinkan SSH inbound berbasis internet jarak jauh, kendalikan pengguna Anda sshd_configseperti yang ditunjukkan @Anthon, dan kemudian terapkan keamanan langsung di PAM.

Buat dua grup, lusersdan rusers. Tambahkan pengguna seluler jarak jauh ke rusersgrup. Gunakan modul PAM pam_succeed_if.so untuk mengizinkan akses ke pengguna tersebut. Tambahkan baris ke konfigurasi pam Anda untuk ssh:

account     sufficient  pam_succeed_if.so user ingroup lusers
account     sufficient  pam_succeed_if.so user ingroup rusers

Beberapa modul pam_succeed_if.so mungkin mengharuskan Anda menggunakan sintaks yang sedikit berbeda, seperti group = lusers.

Kemudian, tidak hanya sshdmembatasi pengguna yang dapat terhubung, tetapi jika ada bug sshd, Anda masih memiliki perlindungan yang ditawarkan pembatasan berbasis PAM.

Satu langkah tambahan untuk pengguna jarak jauh adalah untuk memaksa penggunaan ssh_keys dengan frasa sandi. Jadi, pengguna lokal dapat masuk dengan kunci atau kata sandi, tetapi pengguna jarak jauh harus memiliki kunci, dan jika Anda membuat kunci untuk mereka, Anda dapat memastikan kunci tersebut memiliki kata sandi yang terkait. Sehingga membatasi akses ke lokasi yang benar-benar memiliki kunci SSH dan frasa sandi. Dan membatasi vektor serangan potensial jika kata sandi pengguna dikompromikan.

Dalam sshd_config:

ubah 2 pengaturan:

ChallengeResponseAuthentication yes

dan

PasswordAuthentication yes

untuk:

ChallengeResponseAuthentication no

dan

PasswordAuthentication no

Jadi, standarnya adalah sekarang hanya mengizinkan otentikasi kunci. Kemudian untuk pengguna lokal, Anda dapat menggunakan matchpengaturan konfigurasi untuk mengubah default untuk pengguna lokal. Dengan asumsi jaringan pribadi lokal Anda adalah 192.168.1.0/24, tambahkan ke sshd_config:

Match Address 192.168.1.0/24
PasswordAuthentication yes

Sekarang, pengguna lokal dapat terhubung dengan kata sandi atau kunci, dan pengguna jarak jauh akan dipaksa untuk menggunakan kunci. Terserah Anda untuk membuat kunci dengan frasa sandi.

Sebagai manfaat tambahan, Anda hanya perlu mengelola satu sshd_config, dan Anda hanya perlu menjalankan ssh pada satu port, yang memudahkan manajemen Anda sendiri.


sunting 2017-01-21 - Membatasi penggunaan authorized_keysfile.

Jika Anda ingin memastikan bahwa pengguna tidak dapat secara mandiri membuat kunci ssh, dan menggunakannya dengan authorized_keysfile untuk masuk, Anda dapat mengontrolnya dengan mengatur lokasi tertentu agar sshd akan mencari kunci yang diotorisasi.

Di /etc/ssh/sshd_config, ubah:

AuthorizedKeysFile  %h/ssh/authorized_keys

untuk sesuatu seperti:

AuthorizedKeysFile  /etc/.ssh/authorized_keys/%u

Menunjuk ke direktori terkontrol yang pengguna tidak memiliki izin untuk menulis berarti mereka tidak dapat membuat kunci mereka sendiri dan menggunakannya untuk bekerja di sekitar aturan yang Anda buat.

Tim Kennedy
sumber
2
Saya tidak melihat bagaimana jawaban Anda membedakan pengguna jarak jauh dari pengguna lokal. Jika seseorang dalam lusersgrup tetapi tidak dalam rusersgrup menghasilkan keypair dan memperbarui mereka ~/.ssh/authorized_keys, mereka akan dapat login dari jarak jauh.
Richard Hansen
8

Anda dapat menambahkan sesuatu seperti ini ke /etc/ssh/sshd_config:

AllowUsers mobileuser1 mobileuser2 *@10.0.0.0/8

Di atas mengasumsikan bahwa pengguna jarak jauh yang diizinkan diberi nama mobileuser1dan mobileuser2, dan bahwa jaringan tepercaya Anda adalah 10.0.0.0 dengan subnet mask 255.0.0.0.

Ini memungkinkan dua pengguna seluler untuk masuk dari mana saja dan semua orang untuk masuk dari jaringan tepercaya. Setiap pengguna yang tidak cocok dengan salah satu pola tersebut (seperti pengguna yang foomasuk dari jarak jauh) akan ditolak aksesnya.

Richard Hansen
sumber
Itu adalah bagian yang saya lewatkan dalam jawaban saya. Saya pikir jika kami menggabungkan jawaban Anda dengan jawaban saya, itu adalah solusi yang cukup kuat.
Tim Kennedy
2

Anda dapat melakukan ini dengan memulai dua ssh daemon dan dua sshd_configfile. Salin yang sudah ada (mis. Dari /etc/ssh/sshd_config /etc/ssh/sshd_alt_configdan dalam pengaturan konfigurasi alternatif (dari manhalaman untuk sshd_config:

Pelabuhan

Specifies the port number that sshd(8) listens on.  The default
is 22.  Multiple options of this type are permitted.  See also
ListenAddress

AllowUsers

This keyword can be followed by a list of user name patterns,
separated by spaces.  If specified, login is allowed only for
user names that match one of the patterns.  Only user names are
valid; a numerical user ID is not recognized.  By default, login
is allowed for all users.  If the pattern takes the form
USER@HOST then USER and HOST are separately checked, restricting
logins to particular users from particular hosts.  The
allow/deny directives are processed in the following order:
DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.

Anda mungkin ingin memiliki ssh log alternatif ke file yang berbeda, dan mis. Ikuti apa yang ditulis ke file itu untuk melihat upaya login yang menyimpang.

Anthon
sumber