- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题很简单。
如何允许用户更改存储在 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/
我有一个通过 htpassword 调用运行用户名和密码的脚本: /usr/local/apache2/bin/htpasswd -b $file $user $pass 并将它们添加到文件中。 b
我有一个通过 htpassword 调用运行用户名和密码的脚本: /usr/local/apache2/bin/htpasswd -b $file $user $pass 并将它们添加到文件中。 b
我正在记录在我的开发服务器上完全重新部署的过程。小型员工,使用基本身份验证(当然是通过 SSL)和 htpasswd 文件后端。 按原样传输 .htpasswd 文件是否安全? 操作系统可能会有所不同
我有一个 protected 目录,只有.htpasswd上的用户可以访问,但是有时它要求用户更改密码或用户名,将特定的用户名密码编辑为其自己的用户名 sample users kevien : kk
我有一个特定于语言的子域,它指向与我的站点的根目录相同的目录。我使用 PHP 来检测它并显示语言。 我只想在这个子域上设置一个 htpasswd。请记住,没有特定于该子域的物理目录。因此,该语句将与我
假设站点较小(页面数少于5个),.htaccess和.htpassword的正确用法是什么?我最近观看了a tutorial from Nettuts+给出此示例代码的地方: .htaccess Au
我想知道为什么即使对于相同的用户名和密码,htpasswd每次也会输出一个新的哈希值?我试图找到该问题的答案,但没有。 最佳答案 “ htpasswd”生成的密码使用随机盐,以使其更难猜测。这也意味着
我将我的网站推送到多个服务器,其中我有不同的用户名。我想要一个 .htaccess 文件,无论我在哪个服务器上,它都可以通过密码保护文件。 问题是 AuthUserFile只采用绝对路径,所以如果我有
我的问题很简单。 如何允许用户更改存储在 linux 中某些 htpasswd 文件中的密码而不泄露文件内容或允许用户修改其他密码? 我试图编写一个脚本来使用 ssh 和专门设计的用户来完成这项工作,
我正在尝试从命令行自动创建密码。我已经尝试了以下方法,但它仍然不断要求输入密码。 echo "test101" | htpasswd -c ~/temp/password admin 如何在不输入密码
是否有一种编程方式来构建 htpasswd 文件,而不依赖于操作系统特定的函数(即 exec()、passthru()) ? 最佳答案 .httpasswd 文件只是具有特定格式的文本文件,具体格式取
我想通过 .htpasswd 保护网络文件夹。 但是,由于 .htaccess 文件受版本控制,我不想弄乱它。 相反,我希望配置在 /etc/apache2/sites-enabled/mysite
是否可以密码保护虚拟目录(例如 wordpress 类别): /c/sofas/ 它看起来像 可以在 httpd_config 中工作,但不能在 .htaccess 中使用 是否可以?可能在某处使用
我有一个带有 htaccess 和 htpasswd 的密码保护目录。 我的 .htpasswd文件看起来像这样 user1:passwordstring user2:passwordstring u
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我通过 htaccess 和 htpasswd 保护了几个页面。到目前为止网站运行良好,但最近几天,我们遇到了一些问题,我不排除这部分代码。 我的 htaccess: AuthName "Name
是否可以向 .hpasswd 文件中的密码添加盐?我假设不是,因为服务器需要为每个用户提供盐来验证密码,我想不出它是如何获取它们的,但否则如果要获取列表,它就会很容易受到攻击。有解决办法吗? 非常感谢
我需要使用用户名/密码对网站进行密码保护,但需要保持“/assets”文件夹可访问,因为图像/css 等文件被嵌入到其他网站上。 我有这个保护: Order Allow,Deny AuthType B
我有一个带有 htaccess 和 htpasswd 的受密码保护的目录。 htaccess 看起来像这样 AuthUserFile /usr/local/you/safedir/.htpasswd
我正在使用 .htpasswd 来密码保护我的服务器上的某些目录。但是,我注意到每次执行此操作 sudo htpasswd -c/etc/apache2/.htpasswd newuser 时,我当前
我是一名优秀的程序员,十分优秀!