Bisakah pengguna linux mengubah kata sandi mereka tanpa mengetahui kata sandi saat ini?

25

Saya menyiapkan beberapa ubuntukotak, dan menggunakan opscode chefsebagai alat konfigurasi. Akan cukup mudah untuk menginstal kunci publik untuk setiap pengguna di masing-masing server ini, dan menonaktifkan otentikasi kata sandi.

Namun, para pengguna juga harus memiliki sudohak istimewa, yang secara default memerlukan kata sandi.

Jika saya ingin menggunakan kunci publik pengguna sebagai metode manajemen akses dan memungkinkan pengguna sudohak istimewa, apakah itu berarti saya juga harus menyiapkan pengguna dengan NOPASSWD: ALLdi visduo, atau apakah ada cara yang pengguna dapat mengubah password mereka sendiri jika mereka hanya memiliki otentikasi kunci publik?

cwd
sumber
@ sr - sepertinya ini bukan cara utama untuk melakukannya ...
cwd
Mengapa Anda ingin pengguna Anda memiliki sudo priveleges? Saya harap Anda sadar bahwa Anda memberikan akses root dengan ini. Mungkin ada peluang di sini untuk menginvestasikan waktu dan hanya mengizinkan sebagian perintah yang digunakan sehubungan dengan sudo (yang mungkin kurang aman). Go man sudoersakan menghasilkan info tentang memiliki perintah tertentu yang dapat dijalankan dengan sudo tanpa perlu kata sandi pengguna sama sekali. Anda bahkan dapat menambahkan shellscript ke / etc / sudoers yang memungkinkan pengaturan "kata sandi" per pengguna tanpa perlu kata sandi sebelumnya.
humanityANDpeace
@ humanityANDpeace - Saya menyadari ini. Anggota tim kami semua membutuhkan akses root ke server cloud yang kami pelihara. Kami sekarang menggunakan chef untuk mengelola kunci publik pengguna dan kami memiliki grup sysadmin NOPASSWD: ALLyang menjadi bagian dari anggota tim. Jika Anda dapat menyarankan solusi yang lebih baik, silakan posting sebagai jawaban.
cwd

Jawaban:

21

Sudo, dalam konfigurasi yang paling umum, mengharuskan pengguna untuk mengetikkan kata sandi. Biasanya, pengguna sudah menggunakan kata sandi untuk mengautentikasi ke dalam akun, dan mengetik kata sandi lagi adalah cara untuk mengonfirmasi bahwa pengguna yang sah tidak meninggalkan konsolnya dan dibajak.

Dalam pengaturan Anda, kata sandi pengguna hanya akan digunakan untuk otentikasi ke sudo. Secara khusus, jika kunci SSH pengguna dikompromikan, penyerang tidak akan dapat meningkatkan hak root di server. Penyerang dapat menanam logger kunci ke dalam akun, tetapi logger kunci ini dapat dideteksi oleh pengguna lain, dan bahkan dapat ditonton secara otomatis.

Seorang pengguna biasanya perlu mengetahui kata sandi saat ini untuk mengubahnya menjadi kata sandi yang berbeda. The passwdProgram memverifikasi ini (dapat dikonfigurasi untuk tidak, tapi ini tidak berguna atau sama sekali diinginkan dalam skenario Anda). Namun, root dapat mengubah kata sandi pengguna mana pun tanpa mengetahui yang lama; karenanya pengguna dengan kekuatan sudo dapat mengubah kata sandi sendiri tanpa memasukkannya saat passwddiminta dengan menjalankan sudo passwd $USER. Jika sudodikonfigurasi untuk memerlukan kata sandi pengguna, maka pengguna harus tetap mengetikkan kata sandi sudo.

Anda dapat menonaktifkan otentikasi kata sandi secara selektif. Dalam situasi Anda, Anda akan menonaktifkan otentikasi kata sandi di ssh, dan mungkin di layanan lain. Sebagian besar layanan di sebagian besar kesatuan modern (termasuk Ubuntu) menggunakan PAM untuk mengonfigurasi metode otentikasi. Di Ubuntu, file konfigurasi PAM hidup /etc/pam.d. Untuk menonaktifkan otentikasi kata sandi, komentari auth … pam_unix.sobaris masuk /etc/pam.d/common-auth. Selain itu, pastikan Anda memiliki PasswordAuthentication nodalam /etc/ssh/sshd_configuntuk built-in otentikasi password menonaktifkan sshd ini.

Anda mungkin ingin mengizinkan beberapa pengguna administratif untuk masuk dengan kata sandi, atau untuk mengizinkan otentikasi kata sandi di konsol. Ini dimungkinkan dengan PAM (ini cukup fleksibel), tetapi saya tidak bisa memberi tahu Anda seberapa jauh dari kepala saya; ajukan pertanyaan terpisah jika Anda memerlukan bantuan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
satu cara mudah untuk menggunakan PAM dalam kombinasi dengan otentikasi kunci SSH adalah melalui pam_ssh_agent_auth , yang memiliki keuntungan mengganti prompt kata sandi dengan otentikasi kunci (secara teoritis bahkan lebih aman) yang dapat digunakan SSH
Tobias Kienzler
jadi yang Anda katakan sudo passwdakan mengubah kata sandi untuk pengguna saat ini, bukan untuk pengguna sudo?
still_dreaming_1
1
@ still_dreaming_1 Tidak, saya mengatakan bahwa pengguna yang dapat menjalankan perintah sudodapat mengubah kata sandi mereka sendiri. Perintah yang tepat tidak terlalu penting, tetapi untuk lebih detail, itu adalah di sudo passwd bobmana bobnama pengguna, atau sesuatu yang setara. Tanpa argumen, sudo passwdmemang akan mengubah kata sandi untuk root.
Gilles 'SANGAT berhenti menjadi jahat'
7

Anda dapat menggunakan modul pam_ssh_agent_auth . Cukup mudah untuk dikompilasi, dan kemudian tambahkan saja entri

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

sebelum entri lain auth(atau include) di/etc/pam.d/sudo

dan

Defaults    env_keep += "SSH_AUTH_SOCK"

ke /etc/sudoers(melalui visudo).

Sekarang setiap pengguna dapat mengotentikasi sudomelalui agen SSH (diteruskan atau lokal) atau kata sandi mereka. Mungkin bijaksana untuk meminta pengguna Anda untuk menggunakan ssh-add -csehingga setiap sudopanggilan setidaknya akan memerlukan konfirmasi.

Tobias Kienzler
sumber
Pada masalah terkait, ada pam_ssh , yang memungkinkan untuk menggunakan frasa sandi SSH Anda alih-alih yang unix untuk login, secara otomatis memulai agen dan menambahkan kunci - sehingga memberi Anda kemungkinan masuk tunggal.
Tobias Kienzler
1

Ya, ini sangat tidak aman dan juga memungkinkan pengguna untuk mengakses kata sandi pengguna lain, tetapi karena mereka memiliki sudo, tidak banyak yang dapat Anda lakukan.

Pada dasarnya, Anda melakukan hal berikut:

$ sudo -i

Sekarang, kita root. Kami memiliki akses ke semuanya.

# passwd $username

$ username bisa menjadi nama pengguna siapa pun.

Masukkan kata sandi UNIX baru:

Ketik ulang kata sandi UNIX baru: passwd: kata sandi berhasil diperbarui

Boom, kata sandi berubah. Sekali lagi, sangat tidak aman karena Anda dapat mengubah siapa pun, tetapi berhasil, tetapi berhasil. Saya tidak merekomendasikannya, tetapi menawarkan jawaban ini sebagai contoh apa yang tidak boleh dilakukan.

jrg
sumber
terlihat bagus tetapi dapatkah Anda menguraikan apa yang terjadi di sini?
cwd
4
Tidak mungkin dilakukan sudo -itanpa kata sandi pengguna saat ini.
kravemir
@Miro. Seperti yang Anda katakan. Masih sudo bashbisa tanpa password mengingat pengaturan itu dalam /etc/sudoersfile. Saya pikir @jrg seperti yang dikatakan lebih fokus pada masalah ketidakamanan dengan sudo di sini
humanityANDpeace
1
jujur, Anda tidak harus melakukannya sudo -i, Anda dapat langsung beralih ke sudo passwd $username@Miro, Anda tidak perlu tahu kata sandi pengguna saat ini. Anda hanya perlu tahu kata sandi root untuk menggunakan sudo
Antony
0

Maksud kata sandi adalah untuk memastikan bahwa peretas yang mendapatkan kunci pengguna, atau menemukan terminal tanpa pengawasan tidak dapat memperoleh akses root. Untuk alasan ini saya tidak akan merekomendasikan solusi apa pun yang melibatkan sudo tanpa kata sandi.

Saya sarankan Anda tetap sederhana: mungkin email pengguna password default dengan instruksi ketat untuk mengubah ASAP, atau masukkan script di mereka .profileatau .loginatau sesuatu seperti itu menuntut password baru pada login pertama mereka. Itu bisa menonaktifkan dirinya sendiri ketika selesai, dan Anda bisa menggunakan expectuntuk memasukkan kata sandi yang sudah ada sehingga mereka tidak perlu mengetahuinya.

am
sumber
0
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

> Ini seharusnya memungkinkan Anda memiliki pengguna yang hanya bisa masuk menggunakan kunci publik dan tidak bisa menggunakan kata sandi untuk masuk. Namun dia akan dipaksa untuk mengubah kata sandi saat pertama kali dia masuk ... tetapi tanpa harus memberitahunya suatu hari nanti kata sandi di depan ... Pengguna hanya akan diminta untuk mengatur ulang kata sandi dan selanjutnya mereka dapat menggunakannya hanya untuk sudo tetapi tidak akan bisa masuk (ssh) menggunakan kata sandi itu. Perhatikan bahwa triknya di sini adalah untuk tidak memberi tahu pengguna beberapa kata sandi boneka yang kemudian mereka harus masukkan pada saat masuk begitu mereka diminta untuk mengubah kata sandi mereka ... Pada dasarnya tidak ada komunikasi dari admin (root) untuk pengguna yang sebenarnya diperlukan.

hardeep
sumber