Buat akun baru bernama test
:
$ sudo useradd test
test
tidak memiliki kata sandi sekarang. Jadi
$ su test
tidak bekerja. Jika Anda mencoba, Anda akan diminta untuk test
kata sandi. Itu tidak memiliki satu. Itu tidak sama dengan kata sandinya yang kosong jadi jika Anda memasukkan kata sandi kosong dengan menekan enter, Anda mendapatkan pesan “su:Authentication failure”.
Hal yang sama berlaku jika Anda beralih ke tty dan mencoba masuk sebagai test
:Kata sandi kosong tidak diterima.
Sekarang tetapkan test
kata sandi kosong:
$ sudo passwd -d test
Anda sekarang dapat masuk sebagai test
pada tty dengan memberikan string kosong sebagai kata sandi. Namun, jika Anda mencoba
$ su test
lagi, Anda masih mendapatkan pesan “su:Authentication failure” sesi tidak beralih ke pengguna test
.
Mengapa ini?
Jawaban yang Diterima:
Dari keluaran ldd /bin/su
, su
biner dikompilasi dengan pam
perpustakaan (libpam*
), sehingga otentikasi, manajemen akun, inisiasi sesi, dll. akan dikelola oleh pam
.
Berikut ini adalah bagaimana sistem su
khas Ubuntu dikelola oleh pam
, Anda harus menemukan pendekatan serupa jika Anda menggunakan distro lain.
pam
aturan untuk su
didefinisikan dalam file /etc/pam.d/su
. File ini juga menyertakan common-auth
, common-passwd
, common-session
file dari direktori yang sama sebagai template umum untuk mencakup tugas-tugas yang disarankan namanya (dan digunakan di pam
lainnya layanan yang diaktifkan).
Di sistem saya, di bagian bawah /etc/pam.d/su
saya punya:
@include common-auth
@include common-account
@include common-session
Baris sebelumnya tidak berurusan dengan pemeriksaan kata sandi nol, ini terutama tugas pam_unix
modul.
Sekarang /etc/pam.d/common-auth
memiliki:
auth [success=1 default=ignore] pam_unix.so nullok_secure
Dari man pam_unix
:
nullok
Tindakan default modul ini adalah tidak mengizinkan akses pengguna ke layanan jika kata sandi resmi mereka kosong. Argumen nullok mengesampingkan default ini dan mengizinkan setiap pengguna dengan
sandi kosong untuk mengakses layanan.nullok_secure
Tindakan default modul ini adalah tidak mengizinkan akses pengguna ke layanan jika kata sandi resmi mereka kosong. Argumen nullok_secure mengesampingkan default ini dan mengizinkan setiap pengguna
dengan sandi kosong untuk mengakses layanan selama nilai PAM_TTY disetel ke salah satu nilai yang ditemukan di /etc/securetty.
seperti yang Anda lihat jika nullok_secure
opsi disetel, kecuali variabel lingkungan PAM_TTY
diatur dengan cara yang disebutkan, pengguna dengan kata sandi nol tidak akan diizinkan untuk masuk menggunakan su
.
Jadi untuk mengizinkan pengguna dengan kata sandi nol melakukan su
, Anda harus memiliki nullok
argumen ke pam_unix
modul:
auth [success=1 default=ignore] pam_unix.so nullok
ini tidak aman sebagai common-auth
file digunakan oleh banyak layanan lain, bahkan hanya untuk su
ini tidak boleh dilakukan. (Demi pengujian Anda dapat mengaturnya sekali dan kemudian kembali ke aslinya. Meskipun jika Anda ingin melakukan pengujian, lebih baik untuk memasukkan semua logika di /etc/pam.d/su
file, dan ubah perubahan apa pun setelahnya daripada mengacaukan common-*
berkas)