gpt4 book ai didi

Apache htpasswd 安全密码更改

转载 作者:行者123 更新时间:2023-11-29 08:54:15 25 4
gpt4 key购买 nike

我的问题很简单。

如何允许用户更改存储在 linux 中某些 htpasswd 文件中的密码而不泄露文件内容或允许用户修改其他密码?

我试图编写一个脚本来使用 ssh 和专门设计的用户来完成这项工作,但它现在没有成功。

请帮忙。我正在使用 Debian 服务器“Lenny”。

最佳答案

Apache htpasswd 文件不支持任何影子功能。因此,您必须阻止用户访问您的 Web 服务器,以使他们远离密码文件。因此,唯一的解决方案是基于 SSH 的方法或任何其他远程解决方案。下面的描述将解释如何编写一个 SSH 命令脚本来仅在用户知道他的旧密码的情况下更改密码。主要问题是 Apache 不提供命令行工具来验证 htpasswd 文件中的密码。但这可以手动完成。

以下描述假定网络服务器用户是www-data,用户的主目录是/var/www

首先您必须创建一个 htpasswd 文件,该文件可由 Web 服务器用户写入:

# ls -la .htpasswd
-rw-r--r-- 1 www-data root 18 10. Mai 16:30 .htpasswd

然后您必须将所有用户的 key 添加到网络服务器用户的authorized_keys 文件中。您必须在每一行前加上 command 选项。

# cat .ssh/authorized_keys 
command="/var/www/.htpasswd.sh" ssh-rsa AAAA... user@host

每当用户使用他的 key 连接时,只会执行 .htpasswd.sh。用户对 Web 服务器没有任何 shell 访问权限。

这是修改密码的脚本:

#! /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 www-data@localhost
Enter user name: szi
Old password:
New password:
Re-type new password:
Updating password for user szi.
Connection to localhost closed.

每个人只能更改自己的密码,没有人可以访问其他用户的加密密码。此解决方案在 shell 脚本中使用原始 htpasswd 程序还有一个额外的好处,因为密码永远不会用作命令行参数。这对于 htpasswd 是不可能的,因为它不能像 mkpasswd 那样从 stdin 读取密码。

关于Apache htpasswd 安全密码更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com