Apache密码生成工具htpasswd使用详解
Apache提供了一个密码文件进行Http基本认证,htpasswd是一个用于生成、更新此类密码文件的工具。
安装和使用
安装
htpasswd默认是Apache的组件之一(在一些更加轻量的发行版上可能不安装Apache的其它组件,比如“apache-utils”),如果还没有安装过,可以使用以下命令安装:
$ sudo apt-get install apache2-utils
使用
htpasswd的使用非常简单,可以通过以下命令生成密码文件并添加用户:
$ htpasswd -c /etc/apache2/.htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser
该命令将创建.htpasswd文件,并将用户testuser添加到其中。输入“New password”和“Re-type new password”命令时,输入并确认testuser的密码。
在此过程中,您还可以添加几个用户,例如:
$ sudo htpasswd /etc/apache2/.htpasswd shenzhuxiang
New password:
Re-type new password:
Adding password for user shenzhuxiang
$ sudo htpasswd /etc/apache2/.htpasswd marcher
New password:
Re-type new password:
Adding password for user marcher
生成密码文件
如果在上面的例子中就生成了.htpasswd文件,可以看到该文件已经被加密了:
$ cat /etc/apache2/.htpasswd
testuser:$apr1$DyFWTH1/$YA0klfC4asc3CcizAqmzD1
shenzhuxiang:$apr1$LK4h0v22$N10wpn/Y1u6OEYYAVd7ij/
marcher:$apr1$MZyRfN/z$kwLIWcNGKWvKpX2OWwwVL.
在上面的例子中,在每一个用户名和密码之间,还有“$ apr1 $”这个标识,标识了使用的算法。
- “$ apr1 $”:使用Apache MD5加密算法
- “$ 2a $”:使用Blowfish加密算法(生成.$ 2a $ hash)
添加用户
如果需要给.htpasswd文件中的现有用户添加密码,可以指定该文件并使用以下命令:
$ htpasswd /etc/apache2/.htpasswd testuser
New password:
Re-type new password:
Updating password for user testuser
在上述示例中,.htpasswd文件将被查找并找到该testuser,并要求为其提供新密码。
更改密码
与之类似,在.htpasswd文件中更改现有用户的密码的命令如下所示:
$ htpasswd /etc/apache2/.htpasswd testuser
New password:
Re-type new password:
Updating password for user testuser
在已经指定的文件/路径中,htpasswd会寻找testuser,并询问您是否要修改密码,通过输入新密码并确认可以完成密码变更。
示例
以下两个示例演示了htpasswd的更多实际示例。
示例1:在Nginx中使用密码文件
以下是如何在Nginx配置中使用上述.htpasswd生成的密码文件:
- 首先,需要打开和编辑/etc/nginx/sites-available/default文件。
- 找到以下部分,并取消注释(#):
server {
...
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
...
}
在此示例中,auth_basic信息定义了登录框口和文字“Restricted Content”。auth_basic_user_file指定了密码文件的路径,即.htpasswd文件所在位置。
- 将文件/目录权限更改为仅限root:
$ sudo chmod 640 /etc/nginx/.htpasswd
$ sudo chown root:www-data /etc/nginx/.htpasswd
示例2:使用htpasswd使用SSL加密进行文件传输
在此示例中,将演示如何在数据传输过程中使用htpasswd的SSL加密。
以下是如何使用此操作的步骤:
- 创建密码文件:
$ htpasswd -c /etc/apache2/.htpasswd testuser
- 在需要使用SSL加密的目录中和.htpasswd文件一起添加以下条目,并在openssl.conf中进行必要的更改:
SSLEngine on
SSLOptions +StrictRequire
SSLRequireSSL
SSLSessionCacheTimeout 600
SSLSessionTickets off
SSLUserName %{REMOTE_USER}s
SSLVerifyClient optional
SSLVerifyDepth 1
SSLCACertificatePath /usr/local/apache2/conf/ssl.crt
SSLCARevocationPath /usr/local/apache2/conf/ssl.crl
SSLCARevocationCheck chain
SSLCertificateFile /usr/local/apache2/conf/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/server.key
<FilesMatch "^.*\.cgi$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/local/apache2/htdocs/secure>
SSLRequireSSL
SSLVerifyClient require
SSLVerifyDepth 2
SSLOptions +StdEnvVars
</Directory>
上述示例中的顶部信息包括网站的常规SSL加密相关设置。
还可以看到用户的相关设置:
SSLUserName %{REMOTE_USER}s
SSLVerifyClient optional
SSLVerifyDepth 1
其中,SSLUserName定义将在凭据验证后为用户指定变量。SSLOption用于配置必须通过认证的客户端。以这种方式使用htpasswd与SSL比其他选项更安全。例如,您可能会考虑使用基本预共享密钥来传输数据(SSL有一个称为“后向代理认证”的功能,允许需要密码验证的系统通过传输SSL的后向代理服务器来进行身份验证)
-
根据需要编辑SSL证书和证书密钥部分的路径。
-
在需要SSL保护的目录中,您还需要添加AuthType和AuthUserFile:
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /path/to/passwordfile
Require user username
以此方式使用htpasswd和SSL加密,可以确保https传输和用户身份验证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:apache密码生成工具htpasswd使用详解 - Python技术站