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挂载的正常设计,核心原因有两个:
- 挂载目录
/run/user/1000/gvfs本身的权限是drwx------,完全属于挂载共享的普通用户,其他用户(包括root)默认无法直接进入。 - 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
相关产品推荐
相关产品推荐

