标准用户无法访问具有所有权和 mod 777 的目录,但 root 可以

标准用户无法访问具有所有权和 mod 777 的目录,但 root 可以

我遇到了一个奇怪的问题,即 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 部分,从而使应用程序能够一次性写入。虽然默认情况下未设置,但从性能角度来看,这几乎总是更好的。

如果我遗漏了什么,这将被标记为社区维基

相关内容