如何让debian中的apache访问window的ntfs文件系统上的资源?

如何让debian中的apache访问window的ntfs文件系统上的资源?

磁盘分区sda4是ntfs磁盘。

sudo blkid |grep sda4
/dev/sda4: UUID="0042E54842E54350" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="70f5093c-b320-4325-88bb-97748f522332"

我启动时自动安装它。

cat /etc/fstab
UUID=0042E54842E54350  /media/debian/0042E54842E54350      ntfs-3g   rw,user,exec,umask=000 0 0

mydoc现在在 上创建一个 Web 项目/media/debian/0042E54842E54350,设置所有权和文件模式:

sudo chown -R www-data:www-data  /media/debian/0042E54842E54350/mydoc
sudo chmod  755 -R /media/debian/0042E54842E54350/mydoc

编写所有设置,如下所示:

cat /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
 ServerName localhost
 DocumentRoot  /media/debian/0042E54842E54350/mydoc 
 Alias  /regular  "/media/debian/0042E54842E54350/mydoc/build/html"
 <Directory /media/debian/0042E54842E54350/mydoc>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
 </Directory>
</VirtualHost>

重新启动 apache 服务:

sudo systemctl restart apache2

在浏览器中输入127.0.0.1/regular

遇到错误信息:

Forbidden
You don't have permission to access this resource.

Apache/2.4.25 (Debian) Server at 127.0.0.1 Port 80

检查其日志:

sudo cat /var/log/apache2/error.log
[Thu Aug 06 20:13:41.467015 2020] [core:error] [pid 4248] (13)Permission denied: [client 127.0.0.1:53024] AH00035: access to /favicon.ico denied (filesystem path '/media/debian/0042E54842E54350') because search permissions are missing on a component of the path, referer: http://127.0.0.1/regular/os

如何让apache访问挂载的其他盘上的资源?更多信息:

sudo chown -R www-data:www-data  /media/debian/0042E54842E54350/mydoc

没有错误信息。

对评论和答案的回应

$ ls -ld /media{,/debian{,/0042E54842E54350{,/mydoc}}}
drwxr-xr-x  4 root root  4096 Feb  1  2020 /media
drwxr-x---+ 4 root root  4096 Aug  6 21:50 /media/debian
drwxrwxrwx  1 root root 16384 Aug  6 07:55 /media/debian/0042E54842E54350
drwxrwxrwx  1 root root  4096 Aug  6 06:53 /media/debian/0042E54842E54350/mydoc

为什么不能更改所有者/media/debian/0042E54842E54350/mydoc

getfacl  -p "/media/debian"
# file: /media/debian
# owner: root
# group: root
user::rwx
user:debian:r-x
group::---
mask::r-x
other::---

真正的问题是我的电脑是双操作系统(win10+debian),我想在某个磁盘分区上构建一个web应用程序,它可以被win10和debian使用,这可行吗?
如果我将Web应用程序设置为ntfs,apache可以在win10上工作,当我重新启动切换到debian时,debian上的apache无法读写它。
如果我将Web应用程序设置在ext2/ext3/ext4之一上,apache可以在debian上工作,当我重新启动切换到win10时,win10上的apache无法读写它。
难道就没有办法实现我的目标吗?

答案1

chown 的问题

您无法使用,chown因为 NTFS-3G 驱动程序尚不知道哪些 NTFS 安全 ID(简称 SID)对应于 Linux UID/GID 编号,反之亦然。

在 NTFS 文件系统的元数据中,文件的所有者和任何其他用户/组由安全 ID 指定,安全 ID 是长字符串。 Unix 风格的 UID/GID(用于 Unix 风格文件系统的元数据)是简单的整数。将 Unix 风格的 UID 或 GID 写入 NTFS 元数据中的“文件所有者”字段将被 Windows 和任何其他需要格式正确的 NTFS 元数据的 NTFS 驱动程序解释为“损坏的元数据”。

要解决此问题,您需要生成一个UserMapping文件来定义受支持的 Linux UID/GID 编号及其相应的 NTFS SID。

NTFS-3G 驱动程序提供了一个工具来帮助您创建此类文件。驱动作者简单命名usermap,可能会导致与其他工具冲突;在某些发行版中它似乎被命名为ntfs-3g.usermap,但特别是在 Debian 中,您会通过名称找到它ntfsusermap

您还可以使用Windows 版本的用户映射工具:只需从 .ZIP 包中解压usermap.exe,然后在 Windows 命令提示符中运行它,并让它列出驱动器上使用的所有 SID 以及相应的 Windows 用户/组名称。然后,您可以在文本编辑器中打开它,将 Windows 用户/组名称替换为您想要视为等效的 Linux 用户/组名称,然后将生成的文件另存为/media/debian/0042E54842E54350/.NTFS-3G/UserMapping(从 Linux 中查看)。

对于 Linux 版本的 usermap 工具,过程大致相同;但是,您需要根据文件名自行识别用户和组 SID,因为该工具的 Linux 版本无法访问 Windows 用户数据库。相反,它会向您显示一些示例文件,并要求您标识这些文件所属的用户或组的名称,这有时可能很乏味。

您可以找到有关 usermap 工具使用的更详细说明在 Tuxera 的网页中,他制作了用于 Mac 的 NTFS-3G 驱动程序的高级版本,并且似乎是该驱动程序的当前维护者开源 NTFS-3G 驱动程序。这就是您可以获得的最权威的来源!

UserMapping文件放置在正确的位置后,只需卸载并重新安装 NTFS 分区,然后chown即可chgrp开始在 NTFS 文件系统上工作。但是,它们仍然仅适用于在 Linux UID/GID 和相应的 Windows SID 之间配置了映射的用户/组。

另一个问题

正如 Hauke Laging 所提到的,您的目录有一个 ACL,可以防止除Apache 用户/media/debian/之外的任何用户访问该目录树中的任何内容。这可能是因为守护进程使用它来允许本地登录用户的 GUI 桌面工具在没有 root 权限的情况下在该特定目录树中安装可移动媒体。debianwww-data/media/debian/udisksddebian

我建议您将 NTFS 文件系统挂载到不在 下的其他位置/media/debian,以避免该 ACL。当相应的用户登录时,可能会在任何目录上强制执行该 ACL,因此您应该为此文件系统创建自己的自定义安装点,因为无论用户是否登录,它显然都应该是可访问udisksd的。/media/<username>debian

例如,您可以创建一个/media/docdrive目录,然后将/etc/fstab行更改为:

UUID=0042E54842E54350  /media/docdrive      ntfs-3g   rw,defaults,windows_names 0 0

(请参阅man mount.ntfs-3g参考资料 装载选项的含义;使用 UserMapping 文件时,您不应该user,exec,umask=000再需要这些选项,它们实际上会阻止您chmod在文件系统上使用。)

...然后将AliasApache 配置中的行更改为:

Alias  /regular  "/media/docdrive/mydoc/build/html"

答案2

非 Linux 文件系统

chownchmodsetfacl等仅适用于 Linux 文件系统。根本原因是您必须能够将该信息存储在该文件系统中。通常这是不可能的,或者至少是不可行的。

因此,对于此类文件系统,向 Linux 显示的用户和组以及权限是在安装时确定的。正如您可以配置的umask那样,/etc/fstab您还可以配置要使用的用户和组。

真正的问题

真正的问题是 的权限/media/debian,与 NTFS 挂载完全无关。唯一可以访问该目录的是用户root和组的成员debian

答案3

做好安装准备:

sudo mkdir /mnt/winntfs
sudo mkdir /mnt/winntfs/.NTFS-3G

创建用户映射

sudo ntfsusermap  /dev/sda4

为用户输入 www-data 为组输入 www-data

现在您将获得如下内容:

sudo cat  UserMapping
# Generated by ntfsusermap for Linux, v 1.2.0
:www-data:S-1-5-21-2378563617-2567501716-2196283026-513
www-data:www-data:S-1-5-21-2378563617-2567501716-2196283026-1001

复制它以供使用:

sudo cp UserMapping  /mnt/winntfs/.NTFS-3G/UserMapping

设置所有权和文件模式。

sudo chown -R www-data:www-data  /mnt/winntfs/mydoc
sudo chmod  755 -R /mnt/winntfs/mydoc

在 debian 上设置 apache2 配置。

sudo vim  /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
 ServerName localhost
 DocumentRoot  /mnt/winntfs/mydoc 
 Alias  /regular  "/mnt/winntfs/mydoc/build/html"
 <Directory /mnt/winntfs/mydoc>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
 </Directory>
</VirtualHost>

设置 fstab 进行安装。

sudo vim /etc/fstab
UUID=0042E54842E54350  /mnt/      ntfs-3g   rw,defaults  0 0

重新启动它并输入127.0.0.1以读取您的网络应用程序。

sudo systemctl restart apache2

相关内容