在Linux中挂载HFS +卷时绕过默认权限


8

我有一个使用Snow Leopard和Kubuntu 11.10的双引导Macbook Pro,并且想在运行Kubuntu时阅读(不在乎写)我的主Mac主目录。

我可以毫无问题地挂载它,但是由于uid不同(在Mac上为502,在Kubuntu上为1000),我的Kubuntu上的用户无法看到mac用户拥有的HFS +上的文件。

查看有关HFS +的内核文档,我读到:

When mounting an HFSPlus filesystem, the following options are accepted:
[CUT]
    uid=n, gid=n
        Specifies the user/group that owns all files on the filesystem
        that have uninitialized permissions structures.
        Default:  user/group id of the mounting process.

因此,我尝试使用以下选项:

$ sudo mount -t hfsplus -o uid=1000,gid=1000 /dev/sda2 /mnt/Mac

但是他们似乎无能为力:使用ls -l环顾四周时,我仍然看到相同的权限。我可能会缺少一些东西,有任何线索吗?

我知道我可以在Ubuntu上更改我的用户ID以使其与Mac Os X匹配,但我希望尽可能避免使用它。

Answers:


9

bindfs就是答案。它将使用一个已经挂载的文件系统,并提供您想要的任何uid的视图:

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo

编辑:

另外,阅读文档后,我意识到该map选项(1.10及更高版本)可能更合适:

sudo bindfs --map=502/1000 /media/diskFoo ~/myUIDdiskFoo

很酷的解决方案。它在不更改操作系统默认行为的情况下解决了该问题,并使更多的选择成为可能。请注意,如果系统与其他用户共享,则可能会将私有文件暴露给意外的听众。
盖洛斯

1
是的 我对系统安装实用程序不提供此功能感到惊讶。另外,您可以使用bindfs的map功能将用户502映射到1000,这可能更安全,并且可以达到您的预期。
Catskul

由于我没有发表评论的声誉,所以我只想指出Catskul的回答中有一个小错误,= =应该是:sudo bindfs --map = 502/1000 / media / diskFoo〜/ myUIDdiskFoo
J. Simon van der Walt

1

最后,我创建了一个具有与mac os x用户相同的UID的linux用户,但是它无法浏览Mac hfs +卷上我家中的每个目录,因为很多文件归Mac用户“未知” UID所有99(请参阅http://googlemac.blogspot.com/2007/03/user-99-unknown.html)。

似乎他们这样做是为了让您在连接到另一台计算机时挂载和读取卷。普通用户查看UID 99拥有的那些文件时,会看到它们是其所有者。很奇怪。只有root可以照原样看到它们。

因此,我在Mac OS X中重新启动,以具有管理特权的其他用户身份登录,并使用chown -R 502:20 / Users / gerlos / *更改了我家中每个文件的所有者。现在,我可以毫无问题地阅读所有内容。

备注:

  • 在Kubuntu 11.10上创建新用户的默认kubuntu gui工具无法创建UID小于1000的用户。请在终端上使用adduser。
  • 您可以在终端上使用“ id”命令来了解您的用户UID。
  • 在Mac OS X上,您需要是root用户才能看到文件的真实所有者。因此,如果您键入“ ls -n / Users / gerlos”和“ sudo ls -n / Users / gerlos”,则会得到不同的结果。

OSX的“真实” unix用户与Finder识别的用户之间的差异使我非常头疼……它甚至可能使OSX上的某些应用程序表现异常(例如Dropbox无法同步您的文件)。为避免任何问题,请登录OSX系统,打开终端,并确保您的Unix用户拥有OS X用户已经拥有的所有东西。也许我听不懂,但以我的使用GUI的经验还不够。
gerlos 2013年

1

实际上,当我遇到这个问题时,我正在寻求做类似的事情。根据我的理解,从您的第一篇文章来看,请求的挂载选项是询问应使用哪种用户uid而不是Linux系统的默认值(即uid 1000)。因此,您应该使用502,它是您尝试挂载的文件系统的期望所有者。

我已经在自己的情况下对其进行了测试,并且效果很好,使用uid 99可以在我的系统之间共享文件系统。有了这个,我将不需要去改变uid。非常感谢您的分享。这可能对您而言不再重要,但可能会帮助其他人。干杯


1
对。最好的解决方案是不使用UID和权限,像平常一样挂载HFS +文件系统,然后使用bindfs在HFS +文件系统下挂载主目录,因此一切似乎都由您的linux用户拥有。这样,您将永远不需要使用自定义UID,也不需要更改HFS +文件系统中的权限,因此可以在两个系统中保留默认行为。由于可以使用bindfs重新挂载每个用户的家,因此即使在共享系统中,您也可以保留私有文件,但仍使用户可以访问它们。
gerlos 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.