You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

root用户无法读取非root用户通过gio mount挂载的SMB共享目录

root用户无法读取非root用户通过gio mount挂载的SMB共享目录

我遇到了一个挺奇怪的权限问题,想跟大家聊聊:作为普通用户时,我用这条命令挂载SMB共享完全正常:

$ gio mount smb://raspberrypi.local/shared

但切换到root用户之后,居然没办法读取这个挂载的目录!

先给大家看一下权限情况:
用普通用户查看目录权限,显示完全属于当前用户(UID 1000),权限是0700:

$ stat /run/user/1000/gvfs/smb-share:server=raspberrypi.local,share=shared

  File: /run/user/1000/gvfs/smb-share:server=raspberrypi.local,share=shared
  Size: 0               Blocks: 0          IO Block: 4096   directory
Device: 48h/72d Inode: 16          Links: 1
Access: (0700/drwx------)  Uid: ( 1000/     max)   Gid: ( 1000/     max)
Access: 2024-07-19 19:55:20.000000000 -0700
Modify: 2024-07-19 19:55:20.000000000 -0700
Change: 2024-07-19 19:55:20.000000000 -0700
 Birth: -

但用sudo以root身份执行stat,直接报权限拒绝:

$ sudo stat /run/user/1000/gvfs/smb-share:server=raspberrypi.local,share=shared
stat: cannot statx '/run/user/1000/gvfs/smb-share:server=raspberrypi.local,share=shared': Permission denied

我本来以为root能访问系统里所有文件,这情况实在有点意外...

问题原因

其实这是gvfs结合fuse挂载的正常设计,核心原因有两个:

  1. 挂载目录/run/user/1000/gvfs本身的权限是drwx------,完全属于挂载共享的普通用户,其他用户(包括root)默认无法直接进入。
  2. FUSE文件系统默认会限制root访问,这是出于安全考虑——避免普通用户挂载的文件系统带来权限越界风险,即使root突破了目录权限,FUSE层也会阻止访问。

解决办法

这里给几个实用的方案:

  • 以普通用户身份执行操作:如果root需要访问这个共享,可以用sudo -u 用户名切换回挂载共享的用户执行命令,比如:
    sudo -u max ls /run/user/1000/gvfs/smb-share:server=raspberrypi.local,share=shared
    
  • 用mount.cifs直接挂载:这是更适合root的SMB挂载方式,挂载到系统公共目录后,root和普通用户都能访问:
    sudo mount.cifs //raspberrypi.local/shared /mnt/smb-share -o username=你的SMB用户名,password=你的SMB密码,uid=1000,gid=1000
    
  • 调整FUSE配置(不推荐):修改/etc/fuse.conf,去掉user_allow_other的注释,重启相关服务后root就能访问,但这会降低系统安全性,谨慎使用。

备注:内容来源于stack exchange,提问作者Max Coplan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:09:42