树莓派Samba共享移动硬盘问题的解决

2016/12/11

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接

如果你想将连接树莓派的硬盘在局域网内共享,通过PC可以轻松访问,可能会遇到无法访问的问题,该问题的主要原因是udisk2的权限控制过于严格,且不支持配置,本文主要分享该问题的解决方案。

背景

我想在树莓派上挂载一个移动硬盘,然后通过samba共享这个移动硬盘,这样在PC上可以随时访问这个移动硬盘,拷贝资料就很方便。

但是在实现这个功能的过程中遇到了问题,虽然通过Windows能看到这个共享的移动硬盘,但是在打开时却提示没有权限。

分析问题原因

我以为是samba配置的问题,可是不管我如何调整Samba配置,发现都不能解决问题。后来看到我挂载的移动硬盘的权限原来是0700,才知道问题出在这里。我用root帐号修改这个硬盘的挂载目录的权限发现无效,这样解决这个问题比较棘手。

通过ps命令查进程,发现原来是udisk2负责可插拔设备的挂载,在网上查了一堆资料后,才发现udisk2会将插入的硬盘自动挂载到/media/[username]/,并且权限是0700,用户属组是登录用户pi,,所以通过samba共享时匿名用户不能访问该硬盘。这个0700是硬编码的,没法配置。能给udisk2配置的只是让它将硬盘挂载到/media目录,变成共享的硬盘,但是这样做之后硬盘的访问权限还是0700,但用户属组是root,这样通过samba还是不能访问共享硬盘。

由于udisk2可配置性非常差,所以不可能通过改配置来解决该问题。 后来在网上找到了另一种hack的解决方案,利用bindfs将挂载点绑定挂载到另一个挂载点,我们可以控制新挂载点的权限,通过该方案终于解决了该问题。

实际的解决方案

  1. 将udisk2的硬盘自动挂载点从/media/[username]迁移到/media

    udisk2利用dbus监听系统的设备插拔事件,这些事件其实就是udev事件,udisk2会通过解析udev事件的信息决定自动挂载点,其中有一个比较重要的变量UDISKS_FILESYSTEM_SHARED,如果该变量设置为1,则udisk2会将硬盘挂载到/media,如果为0则会挂载到/media/[username],/media/[username]目录的权限用acl控制。为了让自动挂载点切换到/media(如果不切换挂载点,即使绑定挂载也没权限访问),我们可以通过修改udev规则来修改这个UDISKS_FILESYSTEM_SHARED变量,可以新建文件/etc/udev/rules.d/99-udisks2.rules,内容如下:

    1
    2
    3
    4
    5
    # UDISKS_FILESYSTEM_SHARED
    # ==1: mount filesystem to a shared directory (/media/VolumeName)
    # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName)
    # See udisks(8)
    ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
    
  2. 绑定挂载

    需要先安装bindfs:

    1
    sudo apt-get install bindfs
    

    然后创建新的挂载点,并利用bindfs进行绑定挂载:

    1
    2
    mkdir /mnt/media
    bindfs -o perms=0755 /media /mnt/media
    

    这样新挂载点/mnt/median的权限就是0755,任何用户都可以访问了, 不过这只是临时挂载, 可以通过修改/etc/rc.local文件来实现开机时自动挂载,代码如下所示:

    1
    2
    3
    # ...
    bindfs -o perms=0755 /media /mnt/media
    exit 0
    
  3. 修改samba配置,让其在局域网内共享

    修改配置文件/etc/samba/smb.conf,添加新的访问点如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    # ...
    [DATA]
       comment = DATA
       path = /mnt/media/DATA
       read only = no
       public = yes
    # ...   
    
    
  4. 测试

    重启树莓派,然后通过PC就可以访问samba共享的硬盘了

参考资料

How to change permissions for automatic mounted media

¥打赏5毛

取消

感谢您的支持,我会继续努力的!

扫码支持
赏个5毛,支持我把

打开支付宝扫一扫,即可进行扫码打赏哦

本篇目录