我有一个本地 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 关联的人类可读名称)需要映射)。