Sebagai pengguna istimewa saya mencoba untuk mengatur sudo
kata sandi yang lain maka yang digunakan saat login.
Saya sudah melakukan riset tetapi belum menemukan jawaban. Apakah sudo
mendukung konfigurasi seperti itu?
Jika Anda kehilangan kata sandi, Anda kehilangan segalanya. Seseorang dapat masuk dan mempromosikan dirinya root
dengan kata sandi yang sama.
sudo
memiliki opsi untuk meminta root
kata sandi alih-alih menggunakan kata sandi pengguna, ( rootpw
), tetapi berbagi root
kata sandi jelas bukan opsi, itulah sebabnya kami mengaturnya sudo
.
Saya lakukan config 2FA
di masa lalu, itu bekerja dengan baik, tetapi juga mengalahkan tujuan otomatisasi. Misalnya jika Anda ingin menjalankan perintah istimewa di selusin server dengan expect
skrip, menambahkan 2FA
tidak memungkinkan Anda untuk melakukan itu.
Solusi terdekat yang saya temukan adalah dengan hanya mengizinkan kunci pribadi SSH dan mengatur frasa sandi dengan kunci yang berbeda dari sudo
kata sandi (login). Tetap saja, ini tidak nyaman, karena dalam situasi darurat Anda tidak dapat masuk dengan PC yang tidak memiliki kunci itu.
Jawaban:
Jika Anda ingin meminta kata sandi root, dan bukan kata sandi pengguna, ada beberapa opsi yang bisa Anda masukkan
/etc/sudoers
.rootpw
khususnya akan membuatnya meminta kata sandi root. Adarunaspw
dantargetpw
juga; lihat manual sudoers (5) untuk detailnya.Selain itu, sudo melakukan otentikasi (seperti yang lainnya) melalui PAM. PAM mendukung konfigurasi per aplikasi. Konfigurasi Sudo ada di (setidaknya di sistem Debian saya)
/etc/pam.d/sudo
, dan terlihat seperti ini:Dengan kata lain, secara default, ini mengotentikasi seperti yang lainnya pada sistem. Anda dapat mengubah
@include common-auth
baris itu, dan meminta PAM (dan dengan demikian sudo) menggunakan sumber kata sandi alternatif. Baris yang tidak dikomentari pada common-auth terlihat seperti (secara default, ini akan berbeda jika Anda menggunakan misalnya, LDAP):Anda dapat menggunakan misalnya,
pam_userdb.so
alih-alihpam_unix.so
, dan menyimpan kata sandi alternatif di basis data Berkeley DB.contoh
Saya membuat direktori
/var/local/sudopass
, pemilik / gruproot:shadow
, mode2750
. Di dalamnya, saya melanjutkan dan membuat file basis data kata sandi menggunakandb5.1_load
(yang merupakan versi Berkeley DB yang digunakan di Debian Wheezy):Hash yang dihasilkan dengan
mkpasswd -m des
menggunakan kata sandi "kata sandi" Sangat sangat aman! (Sayangnya, pam_userdb tampaknya tidak mendukung sesuatu yang lebih baik daripadacrypt(3)
hashing kuno ).Sekarang, edit
/etc/pam.d/sudo
dan hapus@include common-auth
baris, dan alih-alih letakkan ini di tempatnya:Perhatikan bahwa pam_userdb menambahkan
.db
ekstensi ke database yang diteruskan, jadi Anda harus.db
mematikannya.Menurut dannysauer dalam komentar , Anda mungkin perlu melakukan pengeditan yang sama
/etc/pam.d/sudo-i
juga.Sekarang, untuk sudo, saya harus menggunakan
password
kata sandi login asli saya:sumber
crypt(3)
hashing kuno " pada versi modern glibc memiliki dukungan untuk sha-512, misalnya.mkpasswd -m sha-512
. pam_userdb.so dapat menangani ini dengan baik.Untuk Redhat / Centos, persyaratan dapat dicapai dengan langkah-langkah berikut:
Buat pengguna khusus dan berikan:
Edit file sudo pam.d sehingga terlihat seperti:
Saya masih mencari cara untuk mengkonfigurasi, sehingga hanya pengguna / grup tertentu yang harus authen dengan metode kustom ini, yang lain masih dapat authen dengan metode sistem-auth normal. Adakah yang bisa memberi saya beberapa saran?
sumber
[user_unknown=ignore,success=ok,default=bad]
... tetapi Anda harus bermain dengan itu (dan membaca dokumen PAM) untuk memperbaikinyapam_succeed_if
untuk melewati satu modul jika pengguna berada di salah satu daftar grup, atau untuk melewatkan dua modul jika tidak.Saya tidak berpikir sudo mendukung pengaturan seperti itu. Tujuan dari prompt kata sandi sudo adalah untuk memastikan bahwa orang yang mengeluarkan perintah sudo adalah orang yang sama dengan yang masuk, dan cara termudah untuk melakukannya adalah dengan meminta pengguna yang saat ini masuk untuk mengautentikasi ulang diri mereka sendiri.
Dengan kata lain, tujuan dari sudo password prompt bukanlah untuk membangun otoritas , tetapi untuk membangun identitas . Berdasarkan identitas yang ditetapkan dan konfigurasi sudo, keputusan dapat dibuat apakah pengguna tersebut memiliki wewenang atau hak akses yang diperlukan.
sumber
Kekhawatiran Anda adalah bahwa kata sandi akun Anda dapat diungkapkan. Solusinya adalah tidak menggunakan kata sandi masuk dengan cara yang bisa diungkapkan. Dengan ssh, kata sandi dienkripsi di kabel, jadi tidak masalah. Orang mematikan kata sandi auth dengan ssh untuk mencegah serangan tebak kata sandi, bukan untuk melindungi kerahasiaan kata sandi. Jika Anda menggunakan kata sandi akun yang sama untuk hal lain, pastikan Anda menggunakan saluran yang aman dan terenkripsi untuk memberikan kata sandi. Jika Anda khawatir tentang keylogger atau apa pun, berhentilah menggunakan mesin yang tidak tepercaya untuk masuk.
Jika seseorang bisa mendapatkan kata sandi ssh Anda, mereka mungkin juga bisa mendapatkan kata sandi sudo alternatif, jadi Anda lebih baik menginvestasikan waktu untuk membuat koneksi Anda lebih aman daripada menghabiskan waktu hanya membuat segalanya lebih rumit hanya untuk ilusi keamanan yang lebih.
sumber
Saya tidak memiliki akses langsung ke sistem di mana saya dapat menguji ini dan mengetahui detailnya, tetapi saya punya ide:
shau
.)shau2
. (Saya tidak yakin apakah Anda ingin memiliki UID yang sama denganshau
.)shau2
untuk memiliki hak sudo dengan NOPASSWD.su shau2 -c sudo "$@"
. Ini harus memintashau2
kata sandi. Jika itu dimasukkan dengan benar, itu akan berjalansudo
sebagaishau2
(yang seharusnya tidak meminta kata sandi).shau
hak sudo.Sayangnya, Anda harus mengulang ini untuk setiap pengguna yang memiliki hak sudo.
sumber
Terima kasih @ Shâu Shắc atas jawabannya ! Solusi itu juga berfungsi untuk LinuxMint 17.1 Cinnamon 32bit (Saya hanya menginstal
db-util
paket untuk menjalankannyadb_load
).Tapi saya sangat bingung dengan
passwd.db
file yang dihasilkan . Saya telah melakukan hal yang sama seperti pada jawaban Anda (tetapi menggunakan david dan jones , mereka terlihat lebih menarik):Tetapi kredensial yang dimasukkan disimpan di dalam file hash sebagai teks biasa:
Anda juga dapat melihat david dan jones melalui mcedit :
Ya, dimungkinkan untuk membatasi izin
/usr/local/etc/passwd.db
. Tapi bagaimanapun, nama pengguna dan kata sandi yang disimpan sebagai teks biasa buruk.Bahkan dengan kata sandi sudo yang terpisah ada beberapa lubang keamanan potensial (dengan pengaturan distro default). Dengan demikian, kata sandi terpisah tidak berlaku untuk su (sehingga dimungkinkan untuk memulai sesi root menggunakan
su
dan kata sandi masuk). Selain itu, kata sandi terpisah tidak dihormati oleh Kit Kebijakan (dimungkinkan untuk memulai Synaptic menggunakansynaptic-pkexec
dan login kata sandi. Kemudian hapus paket ...). Masalah-masalah ini dapat dihilangkan dengan penyetelan file konfigurasi tambahan.Secara umum tampaknya amankan kata sandi sudo yang terpisah hanya dapat dicapai dengan bantuan modul PAM khusus (mungkin, modul tersebut akan membandingkan kata sandi dan SHA-512 hash read from file) atau fungsi SELinux.
PS: maaf itu harus komentar. Tapi itu berjalan sebagai jawaban karena format teks. Terima kasih atas pengertian.
sumber