组内的用户无法在安装为 NTFS 的本地磁盘上 chmod

组内的用户无法在安装为 NTFS 的本地磁盘上 chmod

我有一个本地 SSD 磁盘,它通过 /etc/fstab 安装在我的 Ubuntu 机器上:

/dev/sdb2 /media/Store ntfs-3g rw,nosuid,nodev,default_permissions,umask=0002,uid=deniss,gid=deniss 0 0

我可以在该驱动器上读取和写入任何内容。现在我已经安装了 nginx 和 php-fpm,并添加www-data到我的组和www-data我的组中,这样我就可以编辑这两个组中的文件:

$ groups deniss
deniss : deniss adm cdrom sudo dip www-data plugdev lpadmin lxd sambashare

$ groups www-data
www-data : www-data deniss

nginx 用户 (www-data) 可以读取和写入已安装共享上的所有文件,当它尝试 chmod 驱动器上的文件时,问题就开始了:

$ sudo -u www-data chmod 644 test.txt
chmod: changing permissions of '/media/Store/file.txt': Operation not permitted

并不是说我需要 www-data 来 chmod 文件,而是驱动器上运行着本地网站,并且 chmod 有时集成到库和框架中,我无法禁用它们。

答案1

NTFS 不是 unix 文件系统,并且无法使用 unix 所有权、组或权限。

当 NTFS 文件系统安装在 Linux 上时,一个用户和一个组用于模拟所有文件和目录的所有权,并且一组权限也用于 NTFS 挂载上的所有文件/目录。

这就是default_permissions,umask=0002,uid=deniss,gid=deniss您的/etc/fstab条目部分正在设置的内容。

答案2

ntfs-3g驱动程序实际上可以提供 UNIX 风格的所有权、组和基本权限的功能等效项。默认情况下它不会执行此操作,因为驱动程序不知道 Linux 用户和组 ID 应如何表示为 Windows 安全 ID(简称 SID)。

但是,如果您创建一个映射文件,为每个相关的 Linux UID 和 GID 标识相应的 Windows SID,并将其(在您的情况下)放置在 处/media/Store/.NTFS-3G/UserMapping,那么像chmod和 这样的命令chown将大部分按预期工作(文件的 setuid/setgid/sticky 位除外) ),只要仅引用存在 SID 映射的用户和组。

有关详细信息,请参阅USER MAPPING中的段落man ntfs-3g。该ntfsusermap命令可以帮助您创建这样的映射文件,方法是识别具有特定 Windows 用户或组 SID 的文件,并询问相应的 Linux 用户或组应该是什么,然后重复该过程,直到文件系统中的所有现有 SID 都被映射或您想要停止创建更多映射。

https://jp-andre.pagesperso-orange.fr/ntfsusermap.html您将找到有关使用 的示例ntfsusermap,以及该工具的 Windows 版本ntfsusermap,以防您在运行 Windows 时创建映射文件更方便(这样您就可以让 Windows 查找与每个 SID 关联的人类可读名称)需要映射)。

相关内容