Bagaimana cara membuka kunci akun untuk otorisasi ssh kunci publik, tetapi tidak untuk otorisasi kata sandi?


32

Ssh tidak akan membiarkan saya masuk, karena akun terkunci. Saya ingin membuka kunci pengguna di server saya untuk otorisasi kunci publik melalui ssh, tetapi tidak mengaktifkan login yang di-password.

Saya sudah mencoba:

# passwd -u username
passwd: unlocking the password would result in a passwordless account.
You should set a password with usermod -p to unlock the password of this account.

Entri log auth:

Mar 28 00:00:00 vm11111 sshd[11111]: User username not allowed because account is locked
Mar 28 00:00:00 vm11111 sshd[11111]: input_userauth_request: invalid user username [preauth]

Anda harus (IMHO) melakukan ini untuk semua pengguna ... konfigurasi sederhana ketika melakukannya untuk seluruh sshd
Skaperen

passwd -uadalah ide yang buruk. Lihat jawabannya oleh Giles di bawah.
Peter Jenkins

Jawaban:


15

Buka kunci akun dan berikan kata sandi yang rumit kepada pengguna seperti yang disarankan @Skaperen.

Edit /etc/ssh/sshd_configdan pastikan Anda memiliki:

PasswordAuthentication no

Pastikan baris tidak dikomentari ( #di awal) dan simpan file. Akhirnya, restart sshdlayanan.

Sebelum Anda melakukan ini, pastikan otentikasi kunci publik Anda berfungsi lebih dulu.

Jika Anda perlu melakukan ini hanya untuk satu (atau sejumlah kecil) pengguna, biarkan tetap PasswordAuthenticationdiaktifkan dan gunakan Match User:

Match User miro, alice, bob
    PasswordAuthentication no

Tempatkan di bagian bawah file karena valid hingga Matchperintah berikutnya atau EOF.

Anda juga bisa menggunakan Match Group <group name>atau negasiMatch User !bloggs

Seperti yang Anda sebutkan di komentar, Anda juga dapat membalikkannya sehingga Otentikasi Kata Sandi dinonaktifkan di bagian utama konfigurasi dan menggunakan Matchpernyataan untuk mengaktifkannya untuk beberapa pengguna:

PasswordAuthentication no
.
.
.
Match <lame user>
    PasswordAuthentication yes

saya mendapat kesan Miro ingin menonaktifkan kata sandi hanya untuk satu kali penggunaan. tapi lihat komentar saya sebelumnya
Skaperen

@ Skaperen - Anda mungkin benar. Saya sedikit mengubah jawaban saya.
garethTheRed

Itu Matchsintaks terlihat bagus, tapi aku akan mencobanya terbalik. Aktifkan login dengan kata sandi untuk pengguna (sedikit lumpuh).
kravemir

@Miro - Itu ide yang bagus, saya telah menambahkannya ke jawaban saya untuk referensi di masa mendatang.
garethTheRed

37

Apa pun yang Anda lakukan, jangan tinggalkan akun dalam keadaan ditinggalkan passwd -u, dengan bidang kata sandi kosong: yang memungkinkan login tanpa memasukkan kata sandi (kecuali melalui SSH, karena SSH menolak itu).

Ubah akun untuk tidak memiliki kata sandi, tetapi dibuka kuncinya. Akun tidak memiliki kata sandi jika hash kata sandi dalam basis data kata sandi bukan hash dari string apa pun. Secara tradisional, string satu karakter seperti *atau !digunakan untuk itu.

Akun yang dikunci juga menggunakan penanda khusus di bidang kata sandi yang menyebabkan string tidak menjadi hash string apa pun. Marker tergantung pada sistem. Di Linux, passwdperintah menandai kata sandi yang dikunci dengan meletakkan a !di awal, dan OpenSSH memperlakukan akun sebagai terkunci jika bidang dimulai dengan !. Varian Unix lain cenderung menggunakan mekanisme yang serupa tetapi tidak identik, jadi berhati-hatilah jika basis data kata sandi Anda dibagikan di antara jaringan yang heterogen.

Di Linux, Anda dapat menonaktifkan akses berbasis kata sandi ke akun sembari mengizinkan akses SSH (dengan beberapa metode otentikasi lainnya, biasanya pasangan kunci) dengan

usermod -p '*' username

Pengguna tidak akan dapat mengubah kembali akun untuk memiliki kata sandi, karena itu mengharuskan mereka untuk memasukkan kata sandi yang valid.

Jika mau, Anda dapat mengonfigurasi SSH untuk menolak otentikasi kata sandi, terlepas dari apakah akun tersebut memiliki kata sandi. Anda masih harus mengatur agar SSH tidak menganggap akun terkunci, jadi misalnya di Linux Anda harus menghapus !dari bidang kata sandi (tetapi jangan kosongkan bidang tersebut - setel *seperti dijelaskan di atas) ). Untuk menonaktifkan otentikasi kata sandi untuk SSH, tambahkan PasswordAuthenticationarahan ke /etc/sshd_configatau /etc/ssh/sshd_config(mana saja itu di sistem Anda). Gunakan Matchblok untuk membuat arahan itu hanya berlaku untuk pengguna tertentu; Matchblok harus muncul

…
Match User username
    PasswordAuthentication no

6
Terima kasih - usermod -p '*' usernamebekerja dengan sangat baik!
Homme Zwaagstra

1
OpenSSHd memang mengizinkan pengguna yang terkunci (mis. Hash kata sandi dengan !awalan) untuk login dengan beberapa metode otentikasi lain jika UsePAM yesdiatur sshd_config. Ini mungkin default dengan sebagian besar distribusi (misalnya dengan Fedora).
maxschlepzig

1
Saya memiliki sistem tertanam tanpa PAM, jadi perbedaan '*'vs '!'sangat berguna.
jpkotta

8

Anda tidak perlu mengaktifkan atau mengatur kata sandi, dan Anda seharusnya tidak melakukannya, jika Anda sudah menggunakan kunci yang kuat. Cukup kunci kembali akun Anda (sudo passwd -l nama pengguna) dari sesi yang ada dan perbaiki konfigurasi SSH Anda.

Alasan mengapa hal ini terjadi mungkin karena Anda telah mengedit salah satu pengaturan daemon SSH default (di / etc / ssh / sshd_config).

Ubah ini di / etc / ssh / sshd_config dan mulai ulang SSH:

UsePAM yes

Secara umum, kecuali Anda memiliki alasan yang sangat bagus untuk menonaktifkan PAM, saya sarankan Anda tetap mengaktifkannya; mengaktifkan PAM dalam SSH akan memungkinkan Anda untuk tetap masuk, bahkan dengan kata sandi yang dihapus. Apa pun yang Anda lakukan, jangan setel kata sandi kosong atau sejenisnya ... mengunci bidang kata sandi tidak harus berarti mengunci seluruh akun Anda.

Kiat cepat saat bermain-main dengan SSH: biarkan sesi lain tetap terbuka (di jendela lain) setiap kali melakukan perubahan pada konfigurasi SSH Anda, dan kemudian uji bahwa Anda masih dapat masuk; jika Anda secara tidak sengaja merusak akses Anda, gunakan sesi Anda saat ini untuk memperbaikinya.

(Penafian: Saya bekerja di Userify, yang menyediakan perangkat lunak manajemen kunci SSH.)


0

Saya memiliki masalah ini pada CentOS 7. Saya adalah pengguna Linux berbasis Debian yang biasa jadi saya adalah ikan yang keluar dari air. Saya perhatikan bahwa di beberapa server itu bekerja dan hanya dalam satu server tidak. Audit.log mengatakan tidak ada yang berguna dan secure.log tidak memberikan apa-apa juga. Saya menemukan bahwa satu-satunya perbedaan nyata adalah beberapa perbedaan konteks keamanan pada file dan direktori antara yang bekerja dan yang tidak. Dapatkan keamanannya

sudo ls -laZ <user-home>/.ssh

direktori (saya mengasumsikan banyak default di sshd_config).

Anda harus melihat beberapa ssh_home_tdan user_home_tatribut. Jika tidak, gunakan chconperintah untuk menambahkan atribut yang hilang.

Sebagai contoh

home="$(getent passwd <user> | cut -d: -f6)"
sudo chcon -R unconfined_u:object_r:ssh_home_t:s0 "$home".ssh
sudo chcon unconfined_u:object_r:user_home_t:s0 "$home"

Dalam kasus saya, kecurigaan saya adalah bahwa pengguna dibuat dengan cara yang tidak standar. Rumahnya adalah direktori di /var/lib.

Info lebih lanjut di: https://www.linuxquestions.org/questions/linux-security-4/selinux-preventing-ssh-login-with-~-ssh-authorized_keys-4175469538/


-2

buka kunci akun dan ubah kata sandi menjadi string acak

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.