问题:
我有一台双启动 PC,Ubuntu / Windows 10,共享对 NTFS 磁盘分区的访问(如/DATA/
在 Ubuntu 中安装)。
chmod
当对此类共享分区中的文件执行命令时,无论用户调用此命令,我都需要避免“权限被拒绝”错误。这是因为 Ichmod
被称为更大程序的一部分,用户不能只是避免它们,当他们返回错误时,整个程序就会停止。
我尝试过的:
/DATA/
现在正在使用permissions
选项(映射文件已激活)挂载,并在 ID 为 1001 的非 root 用户下,并且所有用户都是 ID 为 1003 的组的一部分,这rwx
是允许的,即:
UUID=... /DATA ntfs auto,users,rw,permissions,umask=007,uid=1001,gid=1003 0 0
这个解决方案几乎有效。每个人都可以 r+w,并且当用户 1001 调用时chmod
我们不会收到错误。它确实没有做出任何改变,但这不是问题。问题是,对于其他用户来说,该命令chmod
仍然会触发错误,因为他们不被视为文件的所有者。
有没有办法将安装的分区的所有权授予/DATA/
所有用户?或者至少对于第一次登录的用户?
或者至少让chmod
命令永远不会返回错误?
答案1
与普遍的看法相反,NTFS 是符合 POSIX 标准的文件系统。它支持所有 POSIX 文件名和 POSIX 权限§
在 Windows 中POSIX 权限存储为扩展属性在里面$EA_INFORMATION
溪流。我不知道当前的 ntfs-3g 驱动程序是否支持这一点,但它确实支持通过以下方式将 Windows 权限映射到 POSIX 权限用户映射文件。配置完之后ntfs-3g将自动处理权限转换当你跑步时chmod
。
§那是因为在 20 世纪 80 年代,美国联邦政府要求某些类型的政府采购符合 POSIX 标准,因此 MS 必须在 Windows 中包含一个 POSIX 子系统。因此,NTFS 还必须支持 POSIX 功能,例如文件名中的特殊字符、硬链接、区分大小写、权限……它首先用于微软 POSIX 子系统然后适用于 UNIX 的 Windows 服务 (SFU),基于 UNIX 的应用程序的子系统最后适用于 Linux 的 Windows 子系统。
答案2
调用 chmod 的程序是否硬编码 的路径/bin/chmod
?
如果没有,如果它只运行chmod
PATH 中第一个程序,请尝试创建一个仅包含名为“chmod”的符号链接的目录/bin/true
。
例如(作为根):
# mkdir /usr/local/dummy
# ln -s /bin/true /usr/local/dummy/chmod
PATH="/usr/local/dummy:$PATH"
然后在运行程序之前先将 PATH 设置为包含此目录 ( )。您可以创建一个包装脚本来设置 PATH,然后运行该程序。
您可能也想为其创建符号链接chown
。
顺便说一句,这是显而易见的,但您不希望此 PATH 设置成为默认值。仅当运行触发问题的程序时才需要它。