Bagaimana memungkinkan ssh untuk melakukan root hanya pada pengguna dari jaringan lokal?

38

Saya telah menginstal Google-Authenticator pada mesin CentOS 6.5 dan mengonfigurasi pengguna tertentu untuk menyediakan OTP.

Saat mengedit /etc/ssh/sshd_configsaya melihat arahan " PermitRootLogin" yang dikomentari secara default.

Saya ingin mengatur "PermitRootLogin no " tetapi masih bisa ssh ke mesin sebagai root hanya dari jaringan lokal.

Apakah itu mungkin?

Itai Ganot
sumber
5
Jangan pernah melakukan ini. SSH sebagai pengguna Anda, lalu gunakan sudo untuk meningkatkan izin. Lakukan ini sehingga meninggalkan jejak kertas, dan Anda akan tahu akun mana yang disusupi.
SnakeDoc
3
@SnakeDoc: Itu satu aliran pemikiran, tapi tidak jelas dan saya berpendapat sebaliknya. sudo adalah permukaan serangan kompleks yang besar dan bukan sesuatu yang ingin saya instal. SSH pubkey auth adalah permukaan serangan yang jauh lebih kecil. Entah bisa login, tetapi logging tidak sangat berguna ketika pengguna (root) dapat mengedit atau menghapus log, yang selalu terjadi kecuali Anda login ke penyimpanan eksternal tambahan saja.
R ..
1
@ R .. Jika Anda mengatur sudoers dengan benar, menggunakan prinsip privilege paling tidak, masalah-masalah yang Anda uraikan ini sebagian besar bukan masalah. Tidak ada pengguna yang dapat ssh masuk dan sudo - sumasuk root, atau melakukan apa pun yang tidak diperlukan oleh pengguna mereka (di sudoers, Anda menggunakan daftar putih untuk perintah). Jika Anda membutuhkan root, Anda harus secara fisik berada di konsol - yaitu. Root over SSH seharusnya tidak pernah diizinkan ... kunci atau tidak.
SnakeDoc
1
@SnakeDoc: Anda salah. Sudo memiliki kedua permukaan serangan kompleksnya sendiri, dan permukaan serangan kompleks mendasar yang inheren untuk menjadi biner suid, dalam bentuk semua keadaan yang diwarisi lintas eksekutif. Dalam beberapa kasus bug dalam program suid itu sendiri (suid) bahkan tidak diperlukan; bug dalam infrastruktur dasar seperti penghubung dinamis (mis. CVE-2010-3856) mungkin cukup.
R ..
1
@R .. Anda menganggap Anda akan selalu tahu jika kunci bocor. Itu salah satu asumsi. Selanjutnya, begitu masuk, penyerang Anda memiliki hak akses root. Masih lebih baik untuk mengirim mereka melalui akun yang tidak terjangkau, dan membuat mereka harus naik ke root. Dengan cara ini Anda memiliki kunci yang harus dibocorkan, frasa sandi kunci untuk dipecahkan, dan kemudian kata sandi akun pengguna biasa untuk dipecah. Dan jika penyerang melewati semua itu ... mereka tidak dapat melakukan apa-apa karena pengguna ini diatur di bawah sudoers dengan kemampuan yang sangat terbatas ... Lihat manfaatnya sekarang? Jangan izinkan login root langsung melalui ssh ... periode. Ini kebersihan yang baik
SnakeDoc

Jawaban:

54

Gunakan Matchparameter konfigurasi di /etc/ssh/sshd_config:

# general config
PermitRootLogin no 

# the following overrides the general config when conditions are met. 
Match Address  192.168.0.*
    PermitRootLogin yes

Lihat man sshd_config

Sven
sumber
Kenapa aku tidak memikirkan itu? Terima kasih sobat
Itai Ganot
8
Anda juga dapat membatasi sumber untuk kunci otentikasi di ~root/.ssh/authorized_keys. Awali kunci dengan from="192.168.0.0/24 ".
BillThor
9
Saya akan mengubahnya untuk juga mengizinkan alamat IPv6 link-local. Cara tautan-alamat lokal bekerja di IPv6 membuatnya sangat kuat untuk jaringan yang tidak terkonfigurasi. Yang berarti jika Anda perlu ssh in untuk memperbaiki kesalahan konfigurasi jaringan, ada kemungkinan bahwa menggunakan alamat IP-link-lokal adalah satu-satunya pilihan yang tersisa.
kasperd
FYI Jika Anda juga menggunakan AllowUser direktif , Anda juga harus (dan kontra-intuitif) jugaAllowUser root
Robert Riedl
14

The Match addressMetode yang telah disebutkan, tetapi Anda juga dapat membatasi pengguna (atau kelompok) yang diperbolehkan untuk login ke sistem. Misalnya, untuk membatasi login ke pengguna itai(dari mana saja) dan root(dari jaringan tertentu), gunakan:

AllowUsers itai [email protected].*

Ini mencegah semua pengguna lain (seperti apache) masuk melalui SSH.

Lihat juga AllowUserskata kunci dalam manual sshd_config (5) .

Lekensteyn
sumber
4
Saya lebih suka AllowGroupsdan menambahkan semua pengguna yang harus bisa masuk menggunakan SSH ke grup tertentu. Kira itu masalah selera, tapi itu sepertinya kurang mengedit sshd_config (yang berarti lebih sedikit risiko mengacaukan dan mengunci semua orang).
CVn
1
@ MichaelKjörling Juga, AllowGroups berarti Anda tidak perlu mengedit izin untuk sshd_config jika tim Anda mengembang atau menyusut. Ini bahkan memungkinkan lebih banyak jenis manajerial atau pekerja magang untuk melakukannya.
Nzall
Poin yang bagus, perhatikan bahwa Anda dapat menggabungkan opsi, memiliki AllowUsers itai [email protected].*dan AllowGroups ssh-usersdan Anda tidak akan secara tidak sengaja melakukan penguncian jika magang secara tidak sengaja menghapus grup :)
Lekensteyn