来自 php 的 运行 tar 命令导致无法取消链接:只读文件系统
Running tar command from php causes Cannot unlink: Read-only file system
我正在尝试实现由 laravel 处理的某些目录(主要是 /etc 中的目录)的简单备份功能。基本上我存储包含特定目录文件的 .tar 档案。
这是一个用于创建单个目录备份存档的命令:
shell_exec("cd {$backupPath} && tar -cf {$dirName}.tar -P {$fullPathToDir}")
这是从备份存档恢复目录的命令:
shell_exec("cd / && sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first")
出于测试原因,我让 http 用户 运行 sudo tar
,但是我最初的想法是创建一个 bash 脚本来处理那个,并将它添加到sudoers。 运行 命令或 shell 脚本给出相同的错误。
问题是如果我 运行 它通过 php 我得到这样的错误:
Cannot unlink: Read-only file system
但是,如果我从命令行 运行 它,它会起作用:
su http -s /bin/bash -c "cd / && sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first"
运行 这在完整的 archlinux 系统和 archlinux docker 容器上都给我相同的结果。如果能提供任何帮助,我将不胜感激。
问题出在 php-fpm 7.4 的 systemd 单元上,其中 ProtectSystem 设置为 true,在将其注释掉后,一切都按预期工作。
sed -i 's:ProtectSystem=full:#ProtectSystem=full:' /usr/lib/systemd/system/php-fpm7.service
我正在尝试实现由 laravel 处理的某些目录(主要是 /etc 中的目录)的简单备份功能。基本上我存储包含特定目录文件的 .tar 档案。
这是一个用于创建单个目录备份存档的命令:
shell_exec("cd {$backupPath} && tar -cf {$dirName}.tar -P {$fullPathToDir}")
这是从备份存档恢复目录的命令:
shell_exec("cd / && sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first")
出于测试原因,我让 http 用户 运行 sudo tar
,但是我最初的想法是创建一个 bash 脚本来处理那个,并将它添加到sudoers。 运行 命令或 shell 脚本给出相同的错误。
问题是如果我 运行 它通过 php 我得到这样的错误:
Cannot unlink: Read-only file system
但是,如果我从命令行 运行 它,它会起作用:
su http -s /bin/bash -c "cd / && sudo tar -xf {$backupPath . $dirName} --recursive-unlink --unlink-first"
运行 这在完整的 archlinux 系统和 archlinux docker 容器上都给我相同的结果。如果能提供任何帮助,我将不胜感激。
问题出在 php-fpm 7.4 的 systemd 单元上,其中 ProtectSystem 设置为 true,在将其注释掉后,一切都按预期工作。
sed -i 's:ProtectSystem=full:#ProtectSystem=full:' /usr/lib/systemd/system/php-fpm7.service