我正在使用 PDFTK 为 PDF 文件添加水印,使用以下命令:
pdftk /tmp/55180af7c8c88.pdf stamp /tmp/stamp55180af7c95b84.58412952.pdf output /tmp/55180af7c95c81.06110501.pdf
然而,上述结果是:
Error: Failed to open output file:
/tmp/55180af7c95c81.06110501.pdf
No output created.
Error: unable to open file for output: /tmp/55180af7c95c81.06110501.pdf
上述是一个奇怪的错误,因为 PDFTK 应该创建该输出文件!
如果我把sudo
命令放在前面,就不会抛出错误。但我正在写入 tmp 文件夹,而这一切都是可写的,我以为呢?
我正在从 PHPexec
命令运行 PDFTK。为了 100% 确保这不是权限问题,我将/tmp
文件夹所有者和组设为www-data
,即 apache 用户,但抛出了相同的错误。
我现在不知道发生了什么,我感谢任何帮助!
答案1
您不应该摆弄 的权限/tmp
。它是系统的重要组成部分。我怀疑您的pdftk
命令失败的原因是/tmp
设置不正确。要恢复 的权限,请tmp
以 root 身份运行以下命令:
chown root:root /tmp
chmod 1777 /tmp
结果将留下/tmp
如下所示的权限和所有者/组:
ls -ld /tmp
drwxrwxrwt 6 root root 12288 Mar 29 18:05 /tmp
根据进一步的调查,我怀疑现在我们已经/tmp
理清了,失败的原因pdftk
是输出文件已经存在但应用程序无法写入。(等待通过评论更新。)
答案2
您是否已启用 selinux?请查看先前的这个问题和答案, 请。
在您善意评论 SELinux/AppArmor 不相关之后,我正在编辑此内容。如果我是您,这是一个长远的目标,我会查看您用于 /tmp 的文件系统。如果它不是 tmpfs 并且快要满了,您可能会遇到与您描述的问题类似的问题。您可能知道,一旦文件系统快要满了,它只允许 root 在其上写入。
再次希望它能有所帮助!