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

RHEL挂载Win2012 R2 CIFS共享 普通用户脚本创建文件权限被拒

根因分析

CIFS协议挂载默认不会自动映射本地普通用户权限,你使用sudo执行挂载操作且未带权限映射参数时,整个挂载点的默认所有者为root,仅root账户拥有目录级写入权限:

  • 执行sudo nano myfile.txt时进程提权为root身份,不受权限限制可以正常创建文件
  • 已有文件的读写执行正常,是默认挂载参数开放了其他用户的基础读/执行权限,部分文件权限位额外开放了写入
  • 执行python myscript.py > output.txt时,创建output.txt的操作是由当前登录的普通用户权限运行的shell完成的,该用户对挂载目录没有新建文件的权限,因此直接返回permission denied。
修复步骤
  • 先卸载当前异常的挂载点
sudo umount /home/user1/myfolder

如果提示设备忙,就先退出所有在这个目录下操作的终端、进程再重试。

  • 查询当前普通用户的UID和GID,直接在终端执行id命令即可获取,输出示例里uid=1000(user1) gid=1000(user1) groups=...,对应的uid、gid数值替换到后续挂载命令里即可,一般本地创建的第一个普通用户默认uid/gid都是1000。

  • 带权限参数重新挂载

sudo mount -t cifs //192.168.100.1/myfolder/ /home/user1/myfolder -o username=MyRegisteredUserNameForServer,uid=1000,gid=1000,file_mode=0755,dir_mode=0755

参数说明:

  • uid=xxx:将共享内所有文件/目录的所有者映射为本地对应用户

  • gid=xxx:将共享内所有文件/目录的所属组映射为本地对应用户组

  • file_mode=0755:设置挂载后文件的默认权限,所有者拥有读写执行权限,其余用户拥有读、执行权限

  • dir_mode=0755:设置挂载后目录的默认权限,所有者拥有读写、进入权限,其余用户拥有读、进入权限

  • 验证修复结果
    切回普通用户身份,在挂载目录下执行touch test.txt,如果没有报错,再执行原脚本重定向命令即可正常生成输出文件。

可选配置

如果需要开机自动挂载该共享,编辑/etc/fstab文件,追加如下配置行(替换其中的密码、uid/gid为你实际的值即可):

//192.168.100.1/myfolder/ /home/user1/myfolder cifs defaults,username=MyRegisteredUserNameForServer,password=你的Windows共享访问密码,uid=1000,gid=1000,file_mode=0755,dir_mode=0755 0 0

保存后执行sudo mount -a,没有报错即配置正常,重启后也会自动挂载。如果不想把密码明文写在fstab里,可以创建一个权限为600的凭证文件存储账号密码,在挂载参数里用credentials=/path/to/credfile替换明文账号密码配置即可。

异常排查

如果按照上述步骤操作后仍然报权限错误,先临时关闭SELinux测试:

sudo setenforce 0

关闭后操作正常的话,就是SELinux拦截了普通用户对CIFS挂载点的写入,重新挂载时在-o参数里追加context=unconfined_u:object_r:user_home_t:s0即可,不需要永久关闭SELinux。

内容的提问来源于stack exchange,提问作者shivam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:36:18