अपाचे htpasswd
फ़ाइल किसी भी छाया कार्यक्षमता का समर्थन नहीं करती है। इसके लिए आपको उपयोगकर्ताओं को पासवर्ड फ़ाइल से दूर रखने के लिए अपने वेब सर्वर तक पहुंचने से रोकना होगा। तो आपका एसएसएच आधारित दृष्टिकोण या कोई अन्य दूरस्थ समाधान ही एकमात्र समाधान है। निम्न वर्णन पासवर्ड को बदलने के लिए एसएसएच कमांड स्क्रिप्ट को लिखने के तरीके को समझाएगा, यदि उपयोगकर्ता अपना पुराना पासवर्ड जानता है। बड़ी समस्या यह है कि अपाचे htpasswd
फ़ाइल में पासवर्ड सत्यापित करने के लिए कमांड लाइन उपकरण प्रदान नहीं करता है। लेकिन यह हाथ से किया जा सकता है।
निम्नलिखित वर्णन मानते हैं कि वेब सर्वर उपयोगकर्ता www-data
है और यह कि उपयोगकर्ता की होम निर्देशिका /var/www
है।
सबसे पहले आप एक htpasswd फ़ाइल बनाने के लिए है, कि वेब सर्वर उपयोगकर्ता द्वारा लिखने योग्य है:
# ls -la .htpasswd
-rw-r--r-- 1 www-data root 18 10. Mai 16:30 .htpasswd
तो फिर तुम वेब सर्वर उपयोगकर्ता की authorized_keys
फाइल करने के लिए अपने सभी उपयोगकर्ताओं की चाबी जोड़ने के लिए। आपको command
विकल्प के साथ प्रत्येक पंक्ति को उपसर्ग करना होगा।
# cat .ssh/authorized_keys
command="/var/www/.htpasswd.sh" ssh-rsa AAAA... [email protected]
एक उपयोगकर्ता अपने प्रमुख केवल .htpasswd.sh
निष्पादित हो जाता है के साथ जोड़ता है जब भी। उपयोगकर्ताओं के पास वेब सर्वर पर कोई खोल पहुंच नहीं है।
#! /bin/bash
HTPASSWD=/var/www/.htpasswd
die() { echo "$*" >&2 ; exit 1 ; }
read -p 'Enter user name: ' USER
read -s -p 'Old password: ' OLDPW ; echo
read -s -p 'New password: ' NEWPW0 ; echo
read -s -p 'Re-type new password: ' NEWPW1 ; echo
if LINE=$(grep ^"$USER": "$HTPASSWD")
then
echo "$LINE" | sed 's/.*:\(..\)\(.\+\)/\1 \2/' | {
read SALT CRYPT
if [[ "$SALT$CRYPT" = $(echo "$OLDPW" | mkpasswd -sS "$SALT") ]] ; then
if [ "$NEWPW0" != "$NEWPW1" ] ; then
die "Password verification error!"
fi
PWS=$(grep -v ^"$USER:" "$HTPASSWD")
{
echo "$PWS"
echo -n "$USER:"
echo "$NEWPW0" | mkpasswd -s
} > "$HTPASSWD"
echo "Updating password for user $USER."
else
die "Password verification error!"
fi
}
else
die "Password verification error!"
fi
मुश्किल हिस्सा पासवर्ड सत्यापन है:
यह स्क्रिप्ट पासवर्ड बदलने के लिए है। यह पुराने नमक को पढ़ने और पुराने नमक के साथ पुराने पासवर्ड को एन्क्रिप्ट करके किया जाता है। परिणाम htpasswd
फ़ाइल में पुराने एन्क्रिप्टेड पासवर्ड से तुलना की जाती है।
अब उपयोगकर्ता क्रम में वेब सर्वर से कनेक्ट पासवर्ड बदलने के लिए कर सकते हैं:
$ ssh [email protected]
Enter user name: szi
Old password:
New password:
Re-type new password:
Updating password for user szi.
Connection to localhost closed.
सब लोग केवल अपने पासवर्ड और कोई भी बदल सकते हैं अन्य उपयोगकर्ताओं की एन्क्रिप्टेड पासवर्ड की पहुंच है। इस समाधान के पास शेल स्क्रिप्ट में मूल htpasswd
प्रोग्राम का उपयोग करने के बारे में एक अतिरिक्त लाभ है, क्योंकि पासवर्ड को कमांड लाइन तर्क के रूप में कभी भी उपयोग नहीं किया जाता है। htpasswd
के साथ यह संभव नहीं होगा, क्योंकि यह mkpasswd
जैसे stdin से पासवर्ड नहीं पढ़ सकता है।
क्या आप वाकई htpasswd से चिपकना चाहते हैं? अपाचे में mod_auth अन्य बैकएंड, एलडीएपी डेटाबेस (mod_authnz_ldap), SQL डेटाबेस (mod_authn_dbd) इत्यादि का उपयोग कर सकते हैं। – regilero