如何在Ubuntu14.04服务器上使用Nginx提供KeePass2密码文件
介绍
KeePass2 是一款应用程序,可让您安全、轻松地为您的网站和应用程序存储、管理和生成强密码。
在之前的指南中,我们讨论了 如何使用 kpcli 与远程服务器上的 KeePass 数据库文件进行交互 。 在本指南中,我们将设置服务器以使用 nginx 提供对我们的数据库文件的安全访问。
然后,我们将向您展示如何通过本地安装的 KeePass2 连接和使用此远程数据库文件。 这将使您可以将密码保存在安全的位置,同时仍然允许您从任何设备访问数据库。
安装 Nginx
作为本教程的先决条件,我们假设您已完成前面的指南并在远程服务器上拥有 KeePass2 数据库文件。
现在,我们需要配置一个 Web 服务器来提供对我们文件的安全访问。 我们将在本指南中使用 nginx。
通过键入以下内容安装 Web 服务器:
sudo apt-get update sudo apt-get install nginx
这将下载并安装 Web 服务器。
创建 SSL 证书
我们将使用 SSL 保护我们与服务器的通信。 这将在传输过程中加密我们的数据,使外部各方无法读取我们的密码信息。
首先,在 nginx 配置层次结构下创建一个目录,用于存储我们的 SSL 文件:
sudo mkdir /etc/nginx/ssl
现在,我们可以通过键入以下内容生成自签名 SSL 证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
这将询问您有关您网站的一系列问题。 尽可能地回答他们。 最重要的问题是 Common Name (e.g. server FQDN or YOUR name)
。 这是要求您的服务器的域名或 IP 地址。
完成后,您的 /etc/nginx/ssl
目录中将有两个名为 nginx.key
和 nginx.crt
的文件。
创建密码文件
我们现在有 SSL 证书来加密我们与服务器的通信。
但是,我们还需要实现一种机制来向服务器验证我们自己。 我们不想让任何人访问我们的密码数据库。
最简单的方法实际上是安装一组名为 apache2-utils
的工具。 我们可以从存储库中获取包:
sudo apt-get install apache2-utils
这将安装 htpasswd
工具,该工具可用于创建我们的 Web 服务器可以读取和理解的安全密码文件。
我们可以通过指定文件位置和要创建的用户帐户来生成密码文件:
sudo htpasswd -c /etc/nginx/htpasswd demo_user
新密码:重新输入新密码:为demo_user添加密码
这将在 /etc/nginx
目录中创建一个名为 htpasswd
的文件,其中包含一个名为 demo_user
的用户条目。 用户帐户可以是您想要的任何东西。 它不必是作为系统帐户存在的用户。
创建 Web 目录
我们将提供一个名为 password_database.kdbx
的文件。 我们将假设此文件位于您的主目录中。
为了让我们的 Web 服务器正确访问文件并能够读取和写入内容,我们需要创建一个适当的 Web 目录来存储文件。 在我们的主目录中(作为普通用户),为您的密码数据库创建一个新目录:
mkdir ~/secure_html
现在,将数据库文件移动到该目录中:
mv ~/password_database.kdbx ~/secure_html
现在,我们需要给 nginx 在目录所有权下操作的用户和组:
sudo chown www-data:www-data ~/secure_html
我们还想让 Web 用户可以访问将在此目录下创建的所有其他文件。 我们可以通过在我们的目录上设置 setgiud
位来做到这一点:
sudo chmod 2770 ~/secure_html
现在,我们需要将我们的系统用户添加到我们的 www-data
组,以便我们可以访问我们刚刚保护的目录:
sudo usermod -aG www-data demo_user
注意:此时,您应该退出并重新登录,以便系统识别您的新组成员。
我们还应该为我们的 Web 服务器授予该目录中已有的所有内容的组所有权:
sudo chown :www-data ~/secure_html/*
我们的目录和文件现在应该已正确配置。
- Web 服务器是目录的用户和组所有者。
- Web 服务器是所有文件的组所有者。
- Web 服务器将获得在目录中创建的新文件的组所有权。
我们现在可以设置我们的 nginx 配置来服务这个目录。
配置 Nginx 服务器块
现在,我们已准备好创建 Nginx 配置。
我们将修改默认的服务器块文件。 使用 root 权限在文本编辑器中打开它:
sudo nano /etc/nginx/sites-available/default
在里面,我们将创建两个服务器块。 您可以删除其他内容或将其注释掉。
我们绝对希望我们的数据传输需要 SSL,所以第一个块将告诉 nginx 将常规 HTTP 流量重定向到 HTTPS。 它看起来像这样:
服务器 { 听 80 default_server; 听 [::]:80 default_server ipv6only=on; access_log off; return 302 https://$http_host$request_uri;
}
这告诉服务器,对于从端口 80 传入的任何常规请求,我们希望将请求完整地直接发送到端口 443 以将其包装在 SSL 中。
在此块下,我们将指定 SSL 流量的规则。 对于我们的 SSL 部分,我们将添加一个如下所示的服务器块:
服务器 { 听 443; 听 [::]:443 ipv6only=on ssl; server_name your_domain.com ; access_log /var/log/nginx/access.log; root /home/<span class="highlight">demo_user</span>/secure_html; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; location / { auth_basic "Restricted"; auth_basic_user_file "/etc/nginx/htpasswd"; dav_methods PUT DELETE MOVE COPY; dav_access group:rw all:r; }
}
第一部分将块设置为 SSL 服务器。 它执行标准操作,例如设置日志位置、设置服务器名称、将文档根目录设置为我们创建的目录,以及指定我们创建的 SSL 证书和密钥。
在此之下,位置块使用我们创建的密码文件来限制对我们目录的访问。 最后,我们设置了一些 WebDAV 方法,允许我们的 KeePass2 应用程序读取、修改数据并将数据保存回服务器。
完成后,保存并关闭文件。
我们现在可以重启 nginx 来实现我们的新配置:
sudo service nginx restart
我们现在准备好配置我们的客户端应用程序。
在本地计算机上下载并安装 KeePass2
如果您还没有这样做,您需要下载 KeePass2 程序并将其安装到您的本地计算机上。 这将允许您与我们的远程数据库文件进行交互。
如果您在本地计算机上运行 Linux,则很有可能在您的发行版存储库中存在 KeePass2 包。 例如,在 Ubuntu 上,您可以键入:
sudo apt-get update sudo apt-get install keepass2
这将在您的本地 Ubuntu 机器上安装 KeePass2 应用程序。
如果您在本地计算机上使用 Windows 或 OS X,您可以通过访问 Keepass 网站 获取最新版本的 KeePass2 应用程序。 单击左侧导航栏中的“下载”链接。
如果您在本地机器上使用 Windows,右上角标有“专业版”和“安装程序”的下载链接就是您要查找的内容:
如果你使用的是 OS X,你可以向下滚动到“Contributed/Unofficial KeePass Packages”部分。 您可以获取一个适用于 OS X 的软件包:
您可能需要执行一些额外的步骤才能启动并运行应用程序。 按照适用于您的操作系统的说明进行操作。
连接到您的远程密码数据库文件
现在您已经安装了 KeePass2 应用程序,启动该应用程序。
告诉 KeePass2 允许自签名 SSL 证书
我们需要做的第一件事是告诉我们的应用程序接受无法验证的 SSL 证书。 由于我们的 SSL 证书是自签名的,它没有由我们系统的受信任证书颁发机构列表中的任何证书颁发机构签名。
我们可以通过修改设置告诉 KeePass 我们可以接受。
单击Tools
,然后选择Options
。 单击高级选项卡。 在“文件输入/输出连接”设置下,选中“接受无效 SSL 证书(自签名、过期……)”选项:
单击“确定”以实施您的更改。
连接到您的远程文件
现在,我们已准备好连接到我们的文件。
从菜单中单击 File > Open > Open URL
:
您将看到一个对话框,要求您填写 URL 和身份验证信息。
按照以下格式填写网址:
https://your_domain.com /password_database.kdbx
如果您将数据库文件命名为不同的名称,请根据需要进行调整。 对于用户名和密码,输入您为 htpasswd
命令选择的帐户详细信息以保护 nginx 目录位置。
连接时,系统会要求您输入数据库文件的主密码。 这是您选择用来保护数据库文件的密码。
完成后,您的密码数据库应该在您的 KeePass2 实例中打开:
您现在可以修改和使用本地计算机上数据库中的密码和凭据。 您可以将更改写回文件中,它们将存储在您的远程服务器上。
结论
您现在应该有一个相当好的方法来访问您的数据库文件。 使用远程数据库文件将帮助您保持密码数据库跨设备同步。
将文件备份到多个安全位置以避免在服务器出现问题或文件损坏时丢失登录凭据是绝对必要的。 我建议您使用 lsync 或 BitTorrent Sync 之类的自动同步系统来处理自动镜像。
您还应该考虑实现一个单独的备份机制来存储文件的先前版本,以防您的数据库文件损坏并且更改同步到您的其他位置。