Хорошо, так что это сбивает с толку. У меня есть сервер Apache, который выполняет сценарии Bash через PHP на моем Ubuntu 18.04. Мне нужно выполнить сценарии как локальный пользователь, чтобы vagrant работал, поэтому я изменил конфигурацию apache на того пользователя, которого хотел. Когда я выполняю команду в оболочке с помощью:
"php -f phptest.php", я получаю то, что я хочу, чтобы вывод был похож:
PHP Code Working, Linux scripting: <pre>-START OF BASH-
Current machine states: HOSTNAME1 running (virtualbox) HOSTNAME2 poweroff (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`.
-END OF BASH-
</pre>
Однако, когда я запускаю phptest .php из веб-браузера Я получаю такой вывод:
PHP Code Working, Linux scripting:
-START OF BASH-
/opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant/shared_helpers.rb:109:in `expand_path': couldn't find login name -- expanding `~' (ArgumentError) from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant/shared_helpers.rb:109:in `expand_path' from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant/shared_helpers.rb:109:in `user_data_path' from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant/plugin/manager.rb:16:in `user_plugins_file' from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant/plugin/manager.rb:27:in `instance' from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/lib/vagrant.rb:265:in `' from /opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require' from /opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require' from /opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:39:in `require' from /opt/vagrant/embedded/gems/2.0.3/gems/vagrant-2.0.3/bin/vagrant:75:in `
'
-END OF BASH-
Я понятия не имею, если это проблема с разрешениями или что, но кажется, что PHP-код работает нормально, учитывая, как я получаю желаемый вывод при выполнении его из оболочки. Это наводит меня на мысль, что на стороне apache есть что-то, что вызывает этот вывод, когда скрипт выполняется из веб-браузера.
Вот мои сценарии:
phptest.php
<?php
echo "PHP Code Working, ";
echo "Linux scripting: ";
$old_path = getcwd();
chdir('/home/luke/metasploitable3-master/');
$ls = shell_exec('bash phptest.sh');
chdir($old_path);
echo "<pre>$ls</pre>";
?>
phptest.sh
echo "-START OF BASH-"
vagrant status &> ./out.txt
echo $(cat ./out.txt)
echo "-END OF BASH-"