在更新 sudoers 权限后,PHP 网页可能仍然无法启动 Unix 命令。这可能是因为 sudoers 文件存在权限错误。以下是解决此问题的步骤:
步骤 1:检查 sudoers 文件
通过检查您的 sudoers 文件中是否存在任何限制,可以确定问题是否在 sudoers 范围内。可以使用以下命令来检查 sudoers 文件是否存在错误:
sudo visudo
步骤 2:解决现有的权限问题
如果 sudoers 文件中包含任何错误的权限设置,则需要解决这些问题。首先,为 sudoers 文件设置正确的权限:
sudo chmod 0440 /etc/sudoers
sudo chown root:wheel /etc/sudoers
步骤 3:启用 Unix 命令执行
确保 sudoers 中的 Unix 命令被启用,您需要将 /usr/bin/true
添加到您的 sudoers 文件中,并且将所有的 Unix 子类添加到相应的权限组。以下是详细的解释和步骤:
/usr/bin/true
存在的,并赋予可执行权限:which true
ls -l /usr/bin/true
/usr/bin/true
及其所有子进程具有可执行权限:sudo visudo
接下来,在编辑好的 sudoers 文件中添加以下内容:
/usr/bin/true ALL=(ALL:ALL) NOPASSWD: /usr/bin/php-fpm --nodaemonize
这将授权 true
程序及其所有子进程在没有密码或凭据的情况下以非交互模式执行 php-fpm
命令。
sudo chgrp -R wheel /usr/bin/ /bin/ /sbin/ /usr/local/bin/ /usr/local/sbin/ /opt/php/8.1/sbin/ /opt/php/8.1/bin/*
sudo chmod -R 750 /usr/bin/ /bin/ /sbin/ /usr/local/bin/ /usr/local/sbin/ /opt/php/8.1/sbin/ /opt/php/8.1/bin/*
步骤 4:为 php-fpm 创建环境变量
为确保 PHP 能够通过 /bin/php-fpm
命令进程启动,您可能需要为 PHP 进程创建一个默认的环境变量。将以下环境变量添加到您的 /etc/environment
文件中,或者在当前命令行中运行以下命令:
sudo bash -c "echo 'export FPM_HOST=127.0.0.1' >> /etc/environment"
sudo bash -c "echo 'export FPM_PORT=9000' >> /etc/environment"
sudo bash -c "echo 'export FPM_USERNAME=www-data' >> /etc/environment"
sudo bash -c "echo 'export FPM_GROUP=www-data' >> /etc/environment"
sudo bash -c "echo 'export FPM_APP_NAME=public' >> /etc/environment"
上述环境变量设置将允许 php-fpm
进程与您的网站进行通信。
现在您已经设置了必要的 sudoers 和环境变量,并启用了 unix 子类的执行权限。重新启动 PHP-FPM 服务,然后再次尝试访问您的 PHP 网页并执行 Unix 命令。
领取专属 10元无门槛券
手把手带您无忧上云