Saya harus mengakui bahwa saya suka server tanpa kata sandi dalam beberapa kasus. Server tipikal rentan terhadap siapa pun yang memiliki akses fisik ke sana. Jadi dalam beberapa kasus praktis untuk menguncinya secara fisik dan sejak itu memercayai akses fisik apa pun .
Konsep dasar
Secara teori, ketika saya secara fisik mencapai server seperti itu, saya harus dapat melakukan tugas-tugas administrasi tanpa kata sandi hanya dengan mengetik root
sebagai login dan saya tidak boleh diminta kata sandi. Hal yang sama mungkin berlaku untuk akun pengguna tetapi orang tidak akan mengaksesnya secara fisik. Karenanya tidak diperlukan kata sandi sistem untuk akses lokal (sesekali).
Saat mengakses server dari jarak jauh, baik untuk administrasi, atau untuk akun pengguna, saya berharap untuk selalu menggunakan kunci pribadi SSH. Sangat mudah untuk membuat kunci SSH untuk akun yang baru saja dibuat dan karenanya tidak diperlukan kata sandi sistem untuk akses jarak jauh (reguler).
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Kesimpulannya adalah, secara teori, kami tidak akan membutuhkan kata sandi sistem apa pun untuk kasus penggunaan seperti itu. Jadi pertanyaannya adalah, bagaimana kita mengkonfigurasi sistem dan akun pengguna untuk mewujudkannya secara konsisten dan aman.
Detail akses lokal
Bagaimana kami memastikan akun root dapat diakses secara lokal tanpa kata sandi? Saya tidak berpikir kita dapat menggunakan passwd -d
karena itu akan membuat akses root terlalu permisif dan pengguna yang tidak berhak dapat beralih ke root secara gratis, yang salah. Kami tidak dapat menggunakan passwd -l
karena mencegah kami dari masuk.
Perhatikan bahwa akses lokal secara eksklusif tentang akses menggunakan keyboard lokal. Oleh karena itu solusi yang valid tidak boleh mengizinkan pengguna beralih (baik menggunakan su
atau sudo
).
Detail akses jarak jauh
Sampai baru-baru ini solusi di atas akan berfungsi tetapi sekarang SSH mulai memeriksa akun pengguna yang terkunci. Kami mungkin tidak dapat menggunakan passwd -d
untuk alasan yang sama. Kita tidak dapat menggunakan passwd -u
karena hanya mengeluh bahwa itu akan mengarah pada apa yang passwd -d
terjadi.
Ada solusi untuk kata sandi boneka untuk bagian ini.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Mungkin juga untuk mematikan akun terkunci yang diperiksa di SSH sepenuhnya tetapi akan lebih baik untuk mempertahankan dukungan akun yang terkunci dan hanya dapat membuka kunci mereka.
Catatan akhir
Yang saya minati adalah solusi yang memungkinkan Anda untuk masuk ke akun root secara lokal dan semua akun termasuk root dari jarak jauh, tanpa kata sandi. Di sisi lain, solusi tidak boleh berdampak pada keamanan kecuali dengan cara yang dijelaskan secara eksplisit, terutama tidak dengan memungkinkan pengguna jarak jauh untuk mendapatkan akses ke akun root atau akun pengguna lain. Solusinya harus cukup kuat sehingga tidak menyebabkan masalah keamanan secara tidak langsung.
Jawaban yang diterima dan diberikan mungkin atau tidak menggambarkan konfigurasi terperinci dari masing-masing alat tetapi harus mengandung poin-poin kunci untuk mencapai tujuan yang dinyatakan. Perhatikan bahwa ini mungkin tidak dapat diselesaikan melalui penggunaan konvensional alat-alat seperti passwd
, ssh
, su
, sudo
dan sejenisnya.
Lebih banyak ide setelah membaca jawaban pertama
Hanya sebuah ide - akses root lokal dapat dicapai dengan memulai shell root alih-alih proses login. Tetapi masih ada kebutuhan untuk mengunci hanya otentikasi kata sandi, bukan otentikasi kunci publik.