无法在 NTFS-3G 文件系统上运行 chmod。如何启用它?

无法在 NTFS-3G 文件系统上运行 chmod。如何启用它?

当我的 Ubuntu 操作系统通过 fstab 挂载时,它同时启用了 NTFS-3G 的权限和 acl 功能:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system>  <mount point>  <type>  <options>  <dump>  <pass>
PARTUUID=86b1e9b5-0ff0-4566-a1a5-6034817df59c  /boot/efi  vfat  umask=0077  0  0
UUID=ed5a8772-679d-483e-9192-2340f5160635  /  ext4  noatime,errors=remount-ro  0  0
/swapfile none swap defaults 0 0
UUID=1D5F100E68B50F72  /home/peng  ntfs-3g  defaults,permissions,acl,nls=utf8,uid=1000,gid=1000,windows_names  0  0

但是当我尝试将虚拟文件的权限修改为 700 时,什么都没有改变:

$ chmod 700 dummy 
$ ls -l
total 0
-rwxrwxrwx 1 peng peng 0 Jul  9 23:08 dummy
$ ls -l
total 0
-rwxrwxrwx 1 peng peng 0 Jul  9 23:08 dummy

为什么permissions,acl忽略了该选项?如何真正启用它们?

更新 1:事实证明,该安装座的驱动程序仍在使用,fuseblock而该驱动程序早已过时:

$ mount | grep sda
/dev/sda1 on /home/shared type btrfs (rw,noatime,nodatasum,nodatacow,ssd,space_cache=v2,subvolid=5,subvol=/)
/dev/sda2 on /home/peng type fuseblk (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)

这很奇怪,因为 NTFS-3G 在内核 5.17 中应该已经是首选:

$ uname -r
5.17.15-76051715-generic

更新2:最新文档解释说uid和gid可能不应该存在于fstab中,所以我删除了它们:

# <file system>  <mount point>  <type>  <options>  <dump>  <pass>
PARTUUID=86b1e9b5-0ff0-4566-a1a5-6034817df59c  /boot/efi  vfat  umask=0077  0  0
UUID=ed5a8772-679d-483e-9192-2340f5160635  /  ext4  noatime,errors=remount-ro  0  0
/swapfile none swap defaults 0 0
UUID=1D5F100E68B50F72  /home/peng  ntfs-3g  permissions,nls=utf8,windows_names  0  0

但重新启动后,挂载选项仍然看起来不准确且不一致:

$ mount  | grep sda
/dev/sda1 on /home/shared type btrfs (rw,noatime,nodatasum,nodatacow,ssd,space_cache=v2,subvolid=5,subvol=/)
/dev/sda2 on /home/peng type fuseblk (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)

无论如何,我现在可以 chmod 和 chown 大多数文件,但我仍然不知道这是否是理想的配置

答案1

发现网上有很多NTFS-3G在引入POSIX权限之后的最佳实践配置,需要按照这个表格进行配置:

文件访问检查 状况
无需权限检查 用户ID掩码掩码umask或者权限或者访问控制列表选项,并且未找到用户映射文件
所有文件和目录具有相同的所有权(uid、gid)和权限(受 fmask、dmask 和 umask 限制) 用户ID或者或者掩码或者掩码或者umask已定义,但未找到用户映射文件
根据所有权和模式进行标准权限检查,不使用 POSIX ACL(忽略 uid、gid、fmask dmask 和 umask)
  • 用户ID或者或者掩码或者掩码或者umask或者访问控制列表定义,权限已定义,但未找到用户映射文件或者
  • 编译时未选择 POSIX ACL,并且找到了用户映射文件或者
  • 编译时选择的 POSIX ACL,权限已定义,并且找到用户映射文件
根据所有权、模式和 POSIX ACL 的权限(忽略 uid、gid、fmask、dmask 和 umask)
  • 编译时选择 POSIX ACL,否权限,并定义 acl或者
  • 编译时选择 POSIX ACL,否权限,并找到用户映射文件
  • (来源:https://github.com/tuxera/ntfs-3g/wiki/File-Ownership-and-Permissions

    因此,所有涉及uid和的选项gid都是严格禁止的。最后,这是我正在使用的 fstab:

    # <file system>  <mount point>  <type>  <options>  <dump>  <pass>
    ...
    UUID=1D5F100E68B50F72  /home/peng  ntfs-3g  permissions,nls=utf8  0  0
    
    $ mount  | grep sda
    /dev/sda2 on /home/peng type fuseblk (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)
    
    

    到目前为止,它似乎正在按预期运行。

    不幸的是,ACL 控制似乎仍然处于实验阶段,只能在编译时选项永久启用后才能使用

    相关内容