GNU/Linux >> Belajar Linux >  >> Linux

Periksa kata sandi pengguna dengan skrip shell

Tidak ada cara yang sepenuhnya portabel untuk memeriksa kata sandi pengguna. Ini membutuhkan hak istimewa yang dapat dieksekusi, jadi ini bukan sesuatu yang dapat Anda buat dari awal. PAM, yang digunakan pada sebagian besar sistem Linux non-embedded serta banyak sistem embedded dan sebagian besar varian Unix lainnya, hadir dengan biner setuid tetapi tidak memiliki antarmuka shell langsung, Anda harus melalui tumpukan PAM.

Anda dapat menggunakan pengikatan PAM di Perl, Python, atau Ruby.

Anda dapat menginstal salah satu dari beberapa checkpassword implementasi.

Jika pengguna diizinkan menjalankan sudo untuk apa saja, maka sudo -kv akan meminta autentikasi (kecuali ini telah dinonaktifkan di konfigurasi sudo). Tapi itu tidak berhasil jika tidak ada aturan sudoers tentang pengguna.

Anda dapat menjalankan su . Ini berfungsi pada sebagian besar implementasi. Ini mungkin pilihan terbaik untuk Anda.

if su -c true "$USER"; then
  echo "Correct password"
fi

Anda dapat memvalidasi lokal yang diberikan kata sandi benar untuk nama pengguna yang diberikan menggunakan file bayangan.

Pada sebagian besar distribusi modern, kata sandi hash disimpan di file shadow /etc/shadow (yang hanya dapat dibaca oleh root). Sebagai root, tarik garis dari file bayangan untuk pengguna tertentu seperti ini:

cat /etc/shadow | grep username

Anda akan melihat sesuatu seperti ini:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::

Setelah nama pengguna ada $1. Ini menunjukkan bahwa itu adalah hash MD5. Setelah itu ada $ lagi, lalu (dalam hal ini) TroIigLp diikuti $ lainnya. TroIigLp adalah garamnya. Setelah itu adalah kata sandi yang di-hash, yang di-hash menggunakan garam - dalam hal ini PUHL00kS5UY3CMVaiC0/g0.

Sekarang, Anda dapat menggunakan openssl untuk mem-hash kata sandi yang diberikan menggunakan garam yang sama, seperti:

openssl passwd -1 -salt TrOIigLp

Masukkan kata sandi yang diberikan saat diminta, perintah openssl harus menghitung hash MD5 menggunakan garam yang disediakan, dan harus persis sama dengan yang di atas dari file shadow. -1 pada perintah di atas adalah untuk hashing MD5.


Berikut adalah solusi yang relatif kuat yang bekerja dengan pengguna lokal dan jarak jauh dan mencoba mengautentikasi terhadap tumpukan PAM lengkap sebagai pengguna yang bersangkutan, bukan hanya membandingkan hash kata sandi.

#!/usr/bin/env ruby

require 'rpam'

username = ARGV[0]
password = ARGV[1]

if Rpam.auth(username, password, service: 'system-auth')
  puts 'authentication successful'
  exit 0
else
  puts 'authentication failure'
  exit 1
end

Untuk menjalankannya:Simpan sebagai ./authenticate_as.rb , chmod +x ./authenticate_as.rb , dan ./authenticate_as.rb $username $password . Memerlukan Ruby dan permata rpam, jika tidak jelas.


Linux
  1. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  2. Penerjemah Shell mana yang Menjalankan Skrip Tanpa Shebang?

  3. Samba Mount Dengan Password Prompt Sebagai Pengguna Non-root?

  1. Melewati Nama File Dengan Spasi Ke Skrip Shell?

  2. Menyembunyikan Kata Sandi Dalam Skrip Shell?

  3. Script Shell Dengan Fungsi Dan Parameter Sebagai Variabel?

  1. Bagaimana cara menjalankan skrip sebagai pengguna lain tanpa kata sandi?

  2. Direktori perubahan skrip Shell dengan variabel

  3. wadah lxc :kata sandi dan nama pengguna