磁盘分区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 权限的情况下在该特定目录树中安装可移动媒体。debian
www-data
/media/debian/
udisksd
debian
我建议您将 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
在文件系统上使用。)
...然后将Alias
Apache 配置中的行更改为:
Alias /regular "/media/docdrive/mydoc/build/html"
答案2
非 Linux 文件系统
chown
、chmod
、setfacl
等仅适用于 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