Script htdigest -c / path / ke / file / $ user $ user $ kata sandi di Bash

8

Saya ingin dapat skrip dengan kata sandi dalam variabel $ kata sandi.

htdigest -c /etc/apache2/pw/$user $user $password

Saat ini ia meminta saya untuk memasukkan kata sandi secara manual; ini tidak akan mungkin karena ini akan menjadi pengaturan otomatis oleh skrip PHP. Bisakah seseorang tolong tunjukkan saya cara membuat skrip ini? Atau fungsi skrip yang setara?

Tuan King
sumber

Jawaban:

9

Lihat /programming/645659/how-do-you-htdigest-400-user-accounts

Metode termudah, berdasarkan pada salah satu saran dalam jawaban yang dipilih, mungkin ini:

digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" | 
           md5sum | awk '{print $1}' )"

printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/apache2/pw/$user"

Saya telah menggunakan md5sumGNU coreutils dan awkbukan hanya md5karena itu yang telah saya instal pada sistem saya dan saya tidak dapat menemukan paket mana yang berisi /usr/bin/md5- Anda juga dapat menggunakan sha512sumatau program hashing lainnya.

mis. jika pengguna = foo , realm = bar , dan kata sandi = baz maka perintah di atas akan menghasilkan:

foo:bar:5bf2a4095f681d1c674655a55af66c5a

htdigest tidak melakukan sesuatu yang ajaib atau bahkan tidak biasa - itu hanya menampilkan pengguna, ranah, dan kata sandi dalam format yang tepat ... seperti yang dilakukan perintah di atas.

Menghapus intisari untuk pengguna yang diberikan: ranah alih-alih hanya menambahkan satu, dapat dengan mudah dilakukan dengan sed.

sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"

Dan memperbarui / mengubah intisari untuk pengguna: ranah juga dapat dilakukan dengan kombinasi dengan metode di atas untuk menghasilkan garis intisari. misalnya

digest="$( printf "%s:%s:%s" "$user" "$realm" "$new_password" | 
           md5sum | awk '{print $1}' )"

sed -i -e "/^$user:$realm:/ c$user:$realm:$digest" "/etc/apache2/pw/$user"
cas
sumber
luar biasa: P memiliki beberapa masalah ketika file belum ada, jadi saya membuat file sebelum menjalankan ini: o
Mr. King
0

Periksa fungsi 'proc_open' di PHP http://fr.php.net/manual/en/function.proc-open.php

Anda dapat menjalankan htdigest dengan opsi Anda, lalu mengirimkan kata sandi baru ke pipa.

Anda mungkin dapat menemukan / membuat fungsi PHP yang melakukan pekerjaan paling tinggi. Seharusnya lebih mudah daripada menggunakan proc_open ...

Dom
sumber
ini jauh lebih kompleks daripada hanya membuat pengguna apache baru: p menggunakan php bukan pilihan
Tn. King