我正在尝试在Debian 9上使用php7读取服务的状态。 该命令很简单:
sudo -u root -S service openvpn@debideb status < /var/www/html/.htpass
在终端中测试时,我确实得到了预期的结果:
openvpn@debideb.service - OpenVPN connection to debideb
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-06-25 06:17:15 PDT; 1h 2min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5049 ExecStart=/usr/sbin/openvpn --daemon ovpn-debideb --status /run/openvpn/debideb.status 10 --cd /etc/openvpn -
Main PID: 5051 (openvpn)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/system-openvpn.slice/openvpn@debideb.service
└─5051 /usr/sbin/openvpn --daemon ovpn-debideb --status /run/openvpn/debideb.status 10 --cd /etc/openvpn --config
但是,当我通过www-data进行操作时,会得到以下结果:
passthru()
返回int(1)
;
shell_exec()
返回NULL
;
exec()
和system()
返回string("")
;
我在哪里弄糟?
答案 0 :(得分:1)
您可以运行CRON来检查服务状态并将结果输出为某种输出格式,然后从Web服务器用户读取输出文件。这样,您可以将运行CRON的用户与Web服务器用户隔离开来,并使其更加安全。
在您的PHP中根本没有一个exec
调用是一个非常糟糕的主意,更不用说当Web服务器具有root权限时(您需要在此处使用它)。