05
2024
03
12:10:38

sshfs 文件系统权限的一点笔记

sshfs 是基于ssh的一个工具,用于挂载远端的文件系统到本地. 只要可以用ssh方式访问远端,那么就可以用sshfs 这个工具把有权限的目录挂载到本地来.
linux系统中,有一个虚拟文件系统的概念,虚拟文件系统作为一个统一的文件系统接口,各种不同的文件系统的驱动只要实现虚拟文件系统接口就可以了,而驱动一般都不会运行在用户空间,而为了在用户空间也可以export 一个虚拟文件系统接口,fuse 这个工具就被创造出来了.  fuse 就是实现用户空间export 出一个虚拟文件系统的接口. 基于fuse , sshfs 这个工具才可以很好的工作, mount时候指定的filesystem 类型就是fuse , 而一旦mount 之后,用df 看到的文件系统类型则是: fuse.sshfs  .

sshfs的使用方法:

A. 使用sshfs 命令进行挂载的格式就是:   sshfs  -o  OPTION   LOGINID@HOST:/REMOTE_PATH     /LOCAL_PATH
如下的例子仅做参考:

sshfs -o rw,default_permissions,allow_other,uid=1000,gid=100,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3  test@192.168.0.114:/home/test/      /mnt

B. 配置到 fstab 以方便开机就可以进行自动挂载,写法和 传统的文件系统略有不同,采用如下的语法格式:


B. 配置到 fstab 以方便开机就可以进行自动挂载,写法和 传统的文件系统略有不同,采用如下的语法格式:

sshfs#ssh_login_id@sshd_server:/FOLDER   /mnt/    fuse IdentityFile=/SSH_LOGIN_KEY_NEED_ABS_PATH_AND_CORRECT_PERMISSION,rw       0 0

从上面可以看到其实 除了第一列的写法有点特殊之外,其他都和 传统挂载很类似的,在上面的例子中的IdentityFile 的值通常是ssh 免密登陆时候的 key, 也就是通常在 ~/.ssh/ 下面.  其中fs的类型写fuse , 后面是option ...

C. 对于sshfs 的使用方法就是上面两条,非常的简单,但是有一些参数还是要特别注意下,否则可能会遇到各种问题:



1).
通过 uid, gid 选项来控制挂载后对应的file owner. 需要注意的是: 如果在root 账户下,查看内存中该挂载对应的option, 其中user_id=0 , group_id=0, 而一旦完成挂载,是不支持修改file/folder owner和group的,所以要在挂载的时候指定好owner,group,这两个选项不体现在 内存里面保存的 挂载参数列表里
2).
fuse本身有一个option叫做 default_permissions, 这个选项是fuse 的选项,并不是sshfs的选项,通过man 帮助文档的解释,添加这个选项之后,文件的访问控制强制基于 file mode,也就是不会把remote 的uid,gid 映射到本地,而如果没有添加这个选项,那么就依靠fuse(fuse怎么干的,鄙人真不清楚),所以如果要想使chmod 命令一定生效,那么加上这个选项吧. 根据man 帮助文档所述,这个选项通常和allow_other 选项一起使用,而allow_other要想生效,那么需要/etc/fuse.conf配置需要enable  user_allow_other .
3).
umask 选项,这个选项用于设置挂载后的文件的权限,如果使用这个选项,那么挂载后, 在client端的权限无法进行修改,如果用chmod在客户端修改了,那么客户端显示的权限依然不变,但是server end 可能就发生了变化,这一点非常奇葩,也非常需要注意,别以为客户端没有改变,服务端也不会改变; 另外这个选项在 mount 之后在内存是看不到这个选项的,也就是会生效,但是不体现在内存里面保存的挂载参数里面





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5295.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: