Chromium无头模式生成PDF时非用户家目录路径写入失败问题求助
Chromium无头模式写入PDF到家目录外失败排查步骤
问题核心原因
Ubuntu 20.04 环境下的Chromium默认开启了沙箱安全限制(Snap沙箱或AppArmor策略),会阻止Chromium访问家目录、临时目录之外的路径,即使目标目录权限配置为777也会被拦截。
排查步骤
第一步:验证基础目录权限
先确认当前用户对目标路径的所有上层目录都有可执行(x)权限,且对目标目录有读写权限,执行如下测试命令:touch /var/www/test/test.pdf && rm /var/www/test/test.pdf如果命令执行失败,说明是目录权限配置问题,修正上层目录权限即可。如果执行成功,继续向下排查。
第二步:确认Chromium安装类型
执行命令查看安装源:apt list --installed | grep chromium如果输出中带有
snap标识,说明是Snap版本的Chromium,默认受Snap沙箱限制:
解决方法:给Chromium Snap开放对应目录的访问权限,执行命令:snap set chromium system-files="read,write /var/www/test"配置完成后重新执行PDF生成命令即可。
第三步:排查AppArmor拦截
如果是Deb包安装的Chromium,执行命令查看是否有AppArmor的拦截日志:dmesg | grep -i apparmor | grep chromium如果输出中有
DENIED字样的记录,说明是AppArmor策略拦截了写入操作:
解决方法:修改AppArmor配置文件/etc/apparmor.d/usr.bin.chromium-browser,在规则块中添加如下内容:/var/www/test/** rw,保存后重载规则即可生效:
apparmor_parser -r /etc/apparmor.d/usr.bin.chromium-browser第四步:临时验证方法
可以临时添加--no-sandbox参数测试是否为沙箱限制导致的问题:chromium-browser --headless --disable-gpu --no-sandbox --print-to-pdf='/var/www/test/test.pdf' 'https://www.google.com'注意:
--no-sandbox仅用作临时验证,生产环境不建议长期开启,存在安全风险。
内容的提问来源于stack exchange,提问作者ScorpioTiger
相关产品推荐
相关产品推荐

