我使用命令
ntfsusermap /dev/sda1
为了生成一个映射文件以使用 NTFS USB 外部驱动器(其中已经有许多在 Windows 下编写的文件)与基于 debian 的 Linux 发行版。当我启动此命令时,我看到的是:
所以我输入 1000 这是我的 Linux 帐户 UID,然后我收到消息:
您没有定义组,这可能会导致问题 您接受定义标准组吗?
我不知道为什么,因为没有出现任何输入组 GID 的步骤,而且显然我无法选择单击 Enter 继续创建没有组的映射文件或中止该过程。生成的映射文件具有以下结构
# Generated by ntfsusermap for Linux, v 1.2.0
:p1:S-1-5-21-7728005000-258166423-2201256221-513
p1:p1:S-1-5-21-7728005000-258166423-2201256221-1001
最后一行S-1-5-21-7728005000-258166423-2201256221-1001
与用于写入外部硬盘驱动器上已有文件的 Windows 用户帐户的 SID 完全匹配。
现在,如果我尝试将以这种方式生成的映射文件与某些服务器应用程序一起使用,我会收到消息
您的数据目录可供其他用户读取
请将权限更改为0770,以便其他用户无法列出该目录。
我应该如何映射驱动器以避免类似问题?
答案1
好的,您似乎有一个用户 SID(以 结尾的-1001
)和一个组 SID(以 结尾的-513
)分别映射到您的 Linux 用户帐户p1
及其私有组p1
。
在讨论 SID 映射时,了解一些信息可能很重要Windows 众所周知的 SID。
形式的 SIDS-1-5-21-<domain_specific_part>-513
是众所周知的 SID域用户组,其中包括所有常规域用户帐户。
当 SID 映射在使用 NTFS-3g 驱动程序挂载的文件系统上生效时,您应该能够使用经典的 Unix 风格chown
、chgrp
和chmod
命令,并且驱动程序将自动为您生成相应的 NTFS ACL。如果经典的 Unix 风格限制太多,您还可以使用getfacl
/setfacl
来使用 Posix 风格的 ACL(由驱动程序转换为 NTFS ACL)(如果在编译 NTFS-3g 驱动程序时启用了此功能)。
消息
您的数据目录可供其他用户读取
请将权限更改为0770,以便其他用户无法列出该目录。
看起来有问题的应用程序只是查看 Unix 风格的权限,并发现它们对于它的口味来说太宽松了。显然,当以 Unix 风格查看时,您的数据目录权限至少为drwx???r-x
.假设 Unix 风格的所有者和组显示为p1
,这意味着实际的底层 NTFS ACL 将如下所示:
- 用户
p1
:完全控制 - 域用户:??? (您没有透露任何可以告诉我权限设置的信息,但该
p1
组当前映射到“域用户”众所周知的 SID。) - 每个人:阅读(甚至完全控制)
应用程序担心最后一部分。但它的建议没有切中要害:虽然使用chmod 770 <data_directory_pathname>
可能会避免错误消息,但这将为组设置完全访问权限(中间的7
,映射到rwx
组权限)...并且通过 SID 检查,我们现在知道所涉及的组实际上是“域用户”,域中的每个常规 Windows 用户都属于该组!所以这不会起到太大的保护作用。
如果应用程序的“数据目录”应该是私有的,正如应用程序似乎建议的那样,您有两个选择:
1.) 您可以保留现在的 SID 映射,并使用chmod 700 <data_directory_pathname>
或chmod go-rwx <data_directory_pathname>
将应用程序数据目录的权限设置为drwx------
从 Linux 中查看时,将对该目录的访问限制为p1
仅限用户(在 Windows 和 Linux 中)。
2.) 或者,您可以创建一个合适的 Windows团体对于数据目录,甚至可能比 . 更具描述性地命名相应的 Linux 组p1
。然后,将 Windows 组的 SID 编辑到映射文件中,或者ntfsusermap
在文件系统上的至少一个 NTFS ACL 中使用该 Windows 组后重新运行该工具。
由于应用程序本身建议drwxrwx---
其数据目录的权限为 0770(即 ),因此它可能不会抱怨授予该组完全访问权限 - 这是权限的最后一个三元组(“其他”三元组,或者在 Windows 术语中,Everyone
ACL条目)它担心。