GNU/Linux >> Belajar Linux >  >> Linux

Mengapa `su` Tidak Dapat Digunakan Untuk Beralih Ke Pengguna Dengan Kata Sandi Kosong?

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)

Terkait:Bagaimana cara merangkai perintah 'date -d @xxxxxx' dan 'find ./'?
Linux
  1. Periksa ruang disk yang digunakan di Linux dengan du

  2. Hashing Kata Sandi Dan Mengapa Kami Membutuhkannya

  3. Otomatisasi kata sandi SSH di Linux dengan sshpass

  1. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  2. Mengapa Saya Bisa Masuk Dengan Kata Sandi Sebagian??

  3. Mengapa Ubuntu Memaksa Pengguna Membuat Kata Sandi Saat Instalasi?

  1. Mengapa saya tetap menggunakan xterm

  2. Mengelola pengguna Linux dengan perintah passwd

  3. Cara mengizinkan ssh dengan kata sandi kosong di Linux