Ubuntu 22.04 上把 Windows 文件服务器的共享挂到 /mnt/share,chown www:www 报 Operation not permitted,chmod 777 也没反应,网站读不了里面的图片。
把日志和配置对完,能解释这个现象的基本就这几处。CIFS 协议不转发本地权限位,文件权限由挂载参数和 uid/gid 决定;没带 uid、gid 和 file_mode 参数时,所有文件按默认值挂到 root 名下;服务端的共享权限与 NTFS 权限叠加,客户端只看得到最终结果;SELinux 或挂载点的 context 不允许 httpd 访问该目录。
先看当前挂载参数与属主
findmnt -t cifs -o TARGET,OPTIONS && ls -ln /mnt/share | head
随后按业务账号重新挂载并指定权限
mount -t cifs -o username=share,uid=www,gid=www,file_mode=0644,dir_mode=0755 //10.0.0.8/img /mnt/share
接着把参数写进凭证文件避免明文
printf 'username=share\npassword=******\n' > /etc/cifs-img.cred && chmod 600 /etc/cifs-img.cred
剩下的就是按 SELinux 要求打上访问标签
semanage fcontext -a -t httpd_sys_content_t '/mnt/share(/.*)?' && restorecon -Rv /mnt/share
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
改完先别撤,确认这几项。ls -ln 显示属主是 33 33 且权限为 644,www 用户能直接读取图片,nginx 返回 200 而 SELinux 审计里不再出现 denied。
挂载点上的 chmod 是假动作,改参数后必须重新挂载才生效;凭证写进 fstab 时要用 credentials 文件,别把密码留在明文选项里。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
