我遇到了一个奇怪的问题,即 root 用户可以看到并查看某个目录,但普通用户(甚至是 sudoer)却看不到。我在包含相关文件夹的目录中运行该命令,然后从 root 用户那里(以及通过)ls -alF
获得了以下信息:sudo ls -alF
...
drwxrwxrwx+ 1 root root 12288 Mar 22 22:13 os/
...
我还从非 root 用户运行的相同命令中获得此信息:
...
d????????? ? ? ? ? ? os/
...
我使用 检查了相关目录的 ACL getfacl os
,得到了以下信息:
# file: os
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx
这是使用 ntfs-3g 安装的 NTFS 分区的挂载点,其 /etc/fstab 条目如下(使用它进行挂载):
UUID=<uuid> /os ntfs-3g hide_hid_files,hide_dot_files,windows_names,no_def_opts,big_writes 0 0
答案1
我解决问题的方法是这样的:添加permissions
我的选项,使我的 /etc/fstab 条目如下:
UUID=<uuid> /os ntfs-3g hide_hid_files,hide_dot_files,windows_names,no_def_opts,big_writes,permissions 0 0
对于那些好奇的人,我的理由如下。该permissions
选项使用标准访问控制,而该acl
选项允许设置 POSIX ACL(Windows 不知道这些是什么)。前者更好,因为它不会尝试考虑 Windows ACL,与 POSIX ACL 相比,这可能导致权限不兼容问题。有些版本没有该选项acl
,但至少 Ubuntu 二进制文件附带的版本有。
如果您希望最大程度地兼容 Windows 和 Linux,而又不至于出现太多问题的风险,您可能需要使用以下选项:
permissions
- 允许在 Windows 和 Linux 之间共享更好的权限处理。它被列为默认选项,但当acl
未传递时,默认情况下会被覆盖。因此,在保持与其他版本的兼容性时,明确传递它更安全。windows_names
- 确保文件/文件夹名称仅限于 Windows 本身支持的名称。例如:Windows 无法支持该字符,:
因为它表示命名的数据流,而该字符/
是 Windows 上命令行选项的标准用法。big_writes
- 使得写入不必分成 4kB 部分,从而使应用程序能够一次性写入。虽然默认情况下未设置,但从性能角度来看,这几乎总是更好的。
如果我遗漏了什么,这将被标记为社区维基。