如何在Ubuntu14.04上使用Apache配置WebDAV访问

来自菜鸟教程
跳转至:导航、​搜索

介绍

WebDAV 是 HTTP 协议的扩展,允许用户管理服务器上的文件。 有很多方法可以使用 WebDAV 服务器。 例如,您可以通过将 Word 或 Excel 文档上传到您的 WebDAV 服务器来与您的同事共享它们。 您甚至可以与家人和朋友分享您的音乐收藏,只需给他们一个 URL。 所有这一切都可以在没有他们安装任何东西的情况下实现。

有很多方法可以管理远程服务器上的文件。 与 FTPSamba 等其他解决方案相比,WebDAV 有几个优点。 在本文中,我们将介绍如何配置您的 Apache 服务器以允许通过身份验证从 Windows、Mac 和 Linux 访问本机 WebDAV。

为什么选择 WebDAV?

WebDAV 提供了几个优点:

  • 所有主要操作系统(Windows、Mac、Linux)的原生集成; 无需安装第三方软件即可使用 WebDAV。
  • 支持部分传输。
  • 更多的身份验证选择。 在 HTTP 上意味着 NTLMKerberosLDAP 等。 都是可能的。

根据您的情况,WebDAV 可能是满足您需求的最佳解决方案。

为什么是阿帕奇?

周围有许多 Web 服务器支持 Linux 上的 WebDAV。 然而,Apache 拥有最兼容的 WebDAV 协议实现。 在撰写本文时,NginxLighttpd 上的 WebDAV 可以工作,但只是部分工作。

先决条件

你需要一个 Ubuntu 14.04 服务器。

在开始之前,让我们首先创建一个具有 sudo 访问权限的用户。 您可以以 root 身份运行命令,但出于安全考虑,不鼓励这样做。 如果您想了解更多信息,有一篇关于 在 Ubuntu 14.04 上添加用户的优秀文章。

创建用户

当您第一次创建 Digital Ocean 实例时,您将获得允许您以 root 身份登录的凭据。 作为 root,让我们首先添加一个名为 alex 的用户。

adduser alex

系统将提示您为用户 alex 创建密码,如下所示。 将进一步提示有关用户 alex 的信息。 如果您愿意,可以输入它们。

Adding user `alex' ...
Adding new group `alex' (1000) ...
Adding new user `alex' (1000) with group `alex' ...
Creating home directory `/home/alex' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for alex
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

授予用户 sudo 权限

创建新用户后,下一步是授予用户 alex sudo 权限。 假设您仍然以 root 身份登录,通过键入以下命令将用户 alex 添加到 sudo 组。

usermod -aG sudo alex

sudo 组中的用户被授予 sudo 权限。 现在您可以注销并以用户 alex 的身份登录。

第一步——安装 Apache

让我们安装 Apache

sudo apt-get update
sudo apt-get install apache2

Apache Web 服务器应该已安装并正在运行。

第二步——设置 WebDAV

设置 WebDAV 分为三个步骤。 我们指定一个位置,启用必要的模块并对其进行配置。

准备目录

我们需要指定一个文件夹来服务 WebDAV。 我们将为此创建新目录 /var/www/webdav。 您还需要将所有者更改为 www-data(您的 Apache 用户),以允许 Apache 对其进行写入。

sudo mkdir /var/www/webdav
sudo chown -R www-data:www-data /var/www/

启用模块

接下来我们使用 a2enmod 启用 WebDAV 模块

sudo a2enmod dav
sudo a2enmod dav_fs

Apache 模块位于 /etc/apache2/mods-available 下。 这将创建一个从 /etc/apache2/mods-available/etc/apache2/mods-enabled 的符号链接。

配置

使用您喜欢的文本编辑器在 /etc/apache2/sites-available/000-default.conf 打开或创建配置文件。

nano /etc/apache2/sites-available/000-default.conf

在第一行,添加 DavLockDB 指令配置:

DavLockDB /var/www/DavLock

VirtualHost 部分中的 AliasDirectory 指令:

Alias /webdav /var/www/webdav

<Directory /var/www/webdav>
    DAV On
</Directory>

编辑后文件应如下所示。

DavLockDB /var/www/DavLock
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        Alias /webdav /var/www/webdav

        <Directory /var/www/webdav>
            DAV On
        </Directory>
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

DavLockDB 指令指定 DAV 锁定数据库的名称。 它应该是文件的路径。 该文件不需要创建。 该目录应该可由 Apache 服务器写入。

Alias 指令将请求映射到 http://your.server/webdav/var/www/webdav 文件夹。

Directory 指令告诉 Apache 为 /var/www/webdav 文件夹启用 WebDAV。 您可以从 Apache 文档中找到有关 mod_dav 的更多信息。

如果您重新启动 Apache 服务器,您将拥有一个无需身份验证的工作 WebDAV 服务器。

像这样重新启动 Apache 服务器:

sudo service apache2 restart

测试

没有身份验证的 WebDAV 只允许用户进行读取访问。 为了测试,让我们创建一个示例文件。

echo "this is a sample text file" | sudo tee -a /var/www/webdav/sample.txt

应该在 /var/www/webdav 中创建一个名为 sample.txt 的文本文件。 它应该包含文本 这是一个示例文本文件

现在我们可以尝试从外部计算机登录。 WebDAV 服务器应位于 http:// /webdav . 为简洁起见,我们仅展示如何在 Mac 上无凭据登录。

在 Mac 上,打开 Finder。 在菜单栏上,找到 Go 并选择选项 Connect to Server

选择 以访客身份连接 选项。 然后,单击连接

您应该已登录。 如果您连接到该共享文件系统并进入 webdav 文件夹,您应该能够看到之前创建的文件 sample.txt。 该文件应该是可下载的。

第三步 - 添加身份验证

没有身份验证的 WebDAV 服务器是不安全的。 在本节中,我们将使用 Digest 身份验证方案向您的 WebDAV 服务器添加身份验证。

基本身份验证还是摘要身份验证?

有许多可用的身份验证方案。 此表说明了不同操作系统上各种身份验证方案的兼容性。 请注意,如果您使用 HTTPS,我们假设您的 SSL 证书是有效的(不是自签名的)。

如果您使用 HTTP,请使用 Digest authentication,因为它适用于所有操作系统。 如果您使用 HTTPS,则可以选择使用 基本身份验证

我们将介绍 Digest 身份验证方案,因为它适用于所有操作系统,无需 SSL 证书。

摘要式身份验证

让我们生成存储用户密码的文件(称为 users.password)。 在摘要式身份验证中,有 realm 字段充当用户的命名空间。 我们将使用 webdav 作为我们的 realm。 我们的第一个用户将被称为 alex

要生成摘要文件,我们必须安装依赖项。

sudo apt-get install apache2-utils

接下来我们将添加用户。 让我们使用以下命令生成用户密码文件。

sudo htdigest -c /etc/apache2/users.password webdav alex

这会将用户 alex 添加到密码文件中。 应该有一个密码提示来为 alex 创建密码。

对于后续添加用户,您应该删除 c 标志。 这是另一个添加名为 chris 的用户的示例。 出现提示时创建密码。

sudo htdigest /etc/apache2/users.password webdav chris

我们还需要允许 Apache 读取密码文件,所以我们更改了所有者。

sudo chown www-data:www-data /etc/apache2/users.password

创建密码文件后,我们应该对/etc/apache2/sites-available/000-default.conf的配置进行更改。

将以下行添加到 Directory 指令

AuthType Digest
AuthName "webdav"
AuthUserFile /etc/apache2/users.password
Require valid-user

最终版本应如下所示(已删除评论)。

DavLockDB /var/www/DavLock

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /webdav /var/www/webdav

    <Directory /var/www/webdav>
        DAV On
        AuthType Digest
        AuthName "webdav"
        AuthUserFile /etc/apache2/users.password
        Require valid-user
    </Directory>
</VirtualHost>

mod_authn 模块包含身份验证指令的定义。

AuthType 指令指示 Apache 对于 /var/www/webdav 目录,应该使用 Digest 方案进行身份验证。

Digest 身份验证需要 realm 的值,我们将其设置为 webdavRealm 就像一个命名空间。 当您有同名的用户时,您可以使用 realm 的不同值将它们分开。 我们使用 AuthName 指令来设置 realm 的值。

AuthUserFile 指令用于指示密码文件的位置。

Require 指令声明只有经过身份验证的有效用户才能访问该目录。

最后,启用摘要模块并重新启动服务器以使设置生效。

sudo a2enmod auth_digest
sudo service apache2 restart

第四步 - 访问文件

我们将演示如何从 Mac、Windows 和 Linux (Ubuntu) 的本机文件浏览器访问您的 WebDAV 服务器。 为简洁起见,我们将仅在 Mac 上演示文件和文件夹操作,尽管您可以从所有操作系统添加、编辑和删除服务器上的文件。

您还可以使用 Web 浏览器通过 Internet 访问文件。

如果您在我们添加身份验证之前进行了测试,您可能需要弹出驱动器并重新连接到它。

苹果电脑

在 Mac 上,打开 Finder。 在菜单栏上,找到 Go 并选择选项 Connect to Server

输入服务器地址。 它应该是 http:// /webdav . 按 连接

系统将提示您输入用户名和密码。 输入我们在服务器上创建的用户之一,然后按 Connect

连接后,该目录应出现在 Finder 中。

您可以将文件复制并保存到webdav目录,并创建子目录。 这是服务器上目录的初始状态:

您可以使用 Finder 像往常一样添加或重命名文件并创建新目录。 下面是最终结果。

视窗

在 Windows 上,打开 文件资源管理器 。 在左侧边栏上,您应该找到 Network 图标。

右键单击 网络 图标。 它应该显示带有选项映射网络驱动器的上下文菜单。 点击那个。

在文件夹字段中输入服务器地址。 它应该是 http:// /webdav . 如果您的登录名不同,请选择 Connect using different credentials。 按 完成

系统将提示您输入用户名和密码。 输入它们并按 OK

连接后,它应显示为 文件资源管理器 左侧栏中的网络驱动器。

Linux (Ubuntu)

我们使用 Ubuntu 14.04 作为我们的 Linux 桌面操作系统。 在 Ubuntu 上,打开 文件 。 左侧边栏有一个 连接到服务器 选项。 点击那个。

输入服务器地址。 它应该是达夫:// /webdav . 按 连接

系统将提示您输入用户名和密码。 输入它们并按 连接

连接后,该目录应出现在 Network 列表下。

结论

在本文中,我们介绍了如何在 Ubuntu 14.04 上使用 Apache 设置 WebDAV 服务器。 我们还讨论了如何配置摘要式身份验证以保护服务器。 最后,我们向您展示了如何使用它们的本地文件浏览器从所有三个主要操作系统连接到 WebDAV 服务器。