为sshfs挂载点设置适当的权限,以便可以与samba共享


12

我有一个通过SSH提供访问权限的域托管服务商。

我的平台是:

  • Gentoo 2.6.36-r5
  • Windows(XP / Vista / 7)

我在Windows上工作,我使用Gentoo来完成Windows无法完成的所有操作。

因此,我使用sshfs将我的域的远程公共目录挂载到/mnt/mydomain.com。验证是通过密钥完成的,因此懒惰的我不必时不时输入密码。

因为我在Windows上进行编码,并且不想一直上传/下载更改的文件,所以我想通过samba共享访问此/mnt/mydomain.com。

因此,我在samba中共享了/ mnt,在Windows资源管理器中列出了除mydomain.com以外的所有挂载。

我的理论是:

  1. sshfs不会将安装点uid / gid设置为samba期望的值
  2. samba不知道它必须包含已设置/mnt/mydomain.com的uid / gid 。
  3. 以上所有都是错误的,我不知道。

这是控制台的配置和输出,需要其他任何信息即可。同样,我也没有注意到与该问题有关的错误或警告,但我可能是错的。

gentoo ~ # ls -lah /mnt
total 20K
drwxr-xr-x  9 root  root  4.0K Mar 26 16:15 .
drwxr-xr-x 18 root  root  4.0K Mar 26  2011 ..
-rw-r--r--  1 root  root     0 Feb  1 16:12 .keep
drwxr-xr-x  1 root  root     0 Mar 18 12:09 buffer
drwxr-s--x  1 68591 68591 4.0K Feb 16 15:43 mydomain.com
drwx------  2 root  root  4.0K Feb  1 16:12 cdrom
drwx------  2 root  root  4.0K Feb  1 16:12 floppy
drwxr-xr-x  1 root  root     0 Sep  1  2009 services
drwxr-xr-x  1 root  root     0 Feb 10 15:08 www

/etc/samba/smb.conf

[mnt]
comment = Mount points
writable = yes
writeable = yes
browseable = yes
browsable = yes
path = /mnt

/ etc / fstab

sshfs#myusername@mywebhotel.com:/home/to/pub/dir/ /mnt/mydomain.com/ fuse comment=sshfs,noauto,users,exec,uid=0,gid=0,allow_other,reconnect,follow_symlinks,transform_symlinks,idmap=none,SSHOPT=HostBasedAuthentication 0 0

为了更容易阅读:

  • myusername@mywebhotel.com
  • / home / to / pub / dir /
  • /mnt/mydomain.com/

选项:

  • comment = sshfs
  • Noauto
  • 使用者
  • 执行
  • uid = 0
  • gid = 0
  • allow_other
  • 重新连接
  • follow_symlinks
  • transform_symlinks
  • idmap =无
  • SSHOPT =基于主机的身份验证

救命!


HostbasedAuthentication不建议使用IIRC (PubkeyAuthentication首选基于用户)
user1686 2011年

SSHFS version 2.8 fuse: unknown option 'SSHOPT=HostBasedAuthentication'
汤姆·黑尔

Answers:


11

sshfs是基于FUSE的文件系统,出于安全目的,FUSE层默认不允许其他用户访问其安装。您拥有allow_otherin选项,但除非您进行编辑/etc/fuse.conf以包含,否则它将被忽略user_allow_other


1
当执行“ ps aux”时,左列指出sshfs和smbd进程的根目录。我“解析”这是因为两者都以相同的特权运行。从ls -lah输出中,您可以看到uid不是root,这个uid是由sshfs设置的,但是我不能设置它,至少不能在选项中更改uid / gid。我相信samba会以某种方式认为它必须使用uid / gid 68591排除该特定目录。(试图消除我的困惑。)
CS01

@ CS01:“ master” smbd以root身份运行,但对于连接处理程序而言并非如此-如果您以“ jim”的身份通过SMB登录,则您的smbd进程还将切换到“ jim”的UID。
user1686'1

1
您还需要通过选项uid = <UID>,gid = <GID>将UID和/或GID映射到所需的用户。
sweisgerber.dev 2015年

谢谢大家的回答。总结一下,在最新版本的Ubuntu上测试后:1.更新/etc/fuse.conf;2.指定三个sshfs命令选项(-o allow_other -o uid=<UID> -o gid=<GID>)。似乎不需要重新启动smbd(但我不确定,因为smbd无论如何我都已重新启动)。

2

为什么不直接从Windows挂载sshfs?
有一些免费的解决方案(有关更多信息,请参见此处此处)。


1
哇,这个工具很棒!
CS01 2012年

它们看起来不太有前途,并且至少在三年后才被暂停:)您是否对它们有稳定的经验?
sweisgerber.dev 2015年

0

当您的正常smb共享正常工作时,我不愿透露有关Samba配置的信息,因为您可以像共享普通文件夹一样完全共享sshfs挂载。但是,与仅本地计算机访问相比,通过sshfs装载SSH共享是很特殊的。

要通过fstab挂载共享,可以将该行放入/ etc / fstab并按需挂载共享。比c&p命令行命令更方便。

通用的etc / fstab行:

**<USERNAME>**@<SERVER>:<REMOTE_PATH> /MOUNT/POINT fuse.sshfs noauto,users,idmap=user,IdentityFile=/path/to/.ssh/id_rsa,allow_other,reconnect,port=22,uid=<UID>,gid=<GID> 0 0

noauto:您需要通过mount /MOUNT/POINT 从/ etc / fstab中的该行提取的所有其他信息来安装它

users: 允许普通用户安装此安装项

重新连接:待机后重新连接/重新安装ahre,等等

uid = / gid =:将远程uid / gid映射到此本地uid / gid

例:

foo@example.org:/home/foo/music ~/foos_music fuse.sshfs noauto,users,idmap=user,IdentityFile=/home/foo/.ssh/id_rsa,allow_other,reconnect,port=22,uid=foo,gid=users 0 0

您需要了解有关sshfs安装的所有信息[ https://wiki.archlinux.org/index.php/Sshfs]

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.