Как проверить, какой пользовательский php работает как?

Мне нужно определить, работает ли php как никто. Как мне это сделать?

Есть ли другие имена для «никто»? «Апач»? Любые другие?

Если доступно, вы можете исследовать текущую учетную запись пользователя с помощью posix_geteuid а затем получить имя пользователя с помощью posix_getpwuid .

Однако, если вы работаете в безопасном режиме (что часто бывает, когда exec отключен), то маловероятно, что ваш PHP-процесс запущен ничем, кроме учетной записи www-data или apache по умолчанию.

<?php echo exec('whoami'); ?>

Вид назад, но без exec / system:

 file_put_contents("testFile", "test"); $user = fileowner("testFile"); unlink("testFile"); 

Если вы создадите файл, владелец будет пользователем PHP.

Вероятно, это также можно запустить с любой из временных функций файла, таких как tempnam() , которая создает случайный файл во временном каталоге и возвращает имя этого файла. Если есть проблемы из-за чего-то вроде разрешений, open_basedir или безопасного режима, которые предотвращают запись файла, как правило, каталог temp все равно будет разрешен.

Более подробная информация была бы полезна, но, предполагая, что это Linux-система, и предполагая, что php работает под apache, он будет запускаться, как всегда работает apache.

Простой способ проверить (опять же, предполагая некоторую среду, похожую на unix) – создать файл php с:

 <?php print shell_exec( 'whoami' ); ?> 

который предоставит вам пользователя.

Для моего экземпляра AWS я запускаю apache качестве вывода, когда запускаю этот скрипт.

Вы можете попробовать использовать backticks следующим образом:

 echo `whoami`; 

я хотел бы использовать:

 lsof -i lsof -i | less lsof -i | grep :http 

любой из этих. Вы можете ввести em в свою командную строку ssh, и вы увидите, какой пользователь прослушивает какой сервис.

вы также можете пойти и проверить этот файл:

 more /etc/apache2/envvars 

и ищите эти строки:

 export APACHE_RUN_USER=user-name export APACHE_RUN_GROUP=group-name 

чтобы отфильтровать данные файла envvars, вы можете использовать grep:

  more /etc/apache2/envvars |grep APACHE_RUN_ 

exec('whoami') сделает это

 <?php exec('whoami'); ?> 

В моей настройке я хочу проверить, разрешено ли текущему процессу создавать папки, вложенные папки и файлы, прежде чем начинать процесс, и предложить решение, если оно похоже на то, что я не могу. Я хотел запустить stat(<file>) для разных вещей, чтобы обеспечить соответствие разрешений для выполняемого процесса (я использую php-fpm, поэтому он зависит от пула).
Решение, основанное на посиксе, которое Марио дал выше, кажется идеальным, однако кажется, что расширение posix – отключено, поэтому я не мог сделать выше, и, поскольку я хочу сравнить результаты с ответом от запуска stat (), запускающего whoami в отдельном shell тоже не помогает (мне нужен uid и gid, а не имя пользователя).

Однако я нашел полезный намек, я мог бы стать stat(/proc/self) и stat(/proc/self/attr) и видеть uid и gid файла.

Надежда, которая помогает кому-то еще

добавьте файл info.php в следующий каталог – ваш каталог http / apache по умолчанию – обычно / var / www / html

со следующим содержанием

 <?php phpinfo(); ?> 

Затем httpd / apache перезапустите go в свой html-каталог по умолчанию http://enter.server.here/info.php

будет доставлять всю родословную php!

Обычно я использую

 <?php echo get_current_user(); ?> 

Буду рад, если это поможет вам

 $_SERVER["USER"] $_SERVER["USERNAME"] 

Предложение

Немного поздно, но, несмотря на то, что следующее является обходным, оно решает требование, поскольку это работает очень хорошо:

 <? function get_sys_usr() { $unique_name = uniqid(); // not-so-unique id $native_path = "./temp/$unique_name.php"; $public_path = "http://example.com/temp/$unique_name.php"; $php_content = "<? echo get_current_user(); ?>"; $process_usr = "apache"; // fall-back if (is_readable("./temp") && is_writable("./temp")) { file_put_contents($native_path,$php_content); $process_usr = trim(file_get_contents($public_path)); unlink($native_path); } return $process_usr; } echo get_sys_usr(); // www-data ?> 

Описание

Выделение кода выше неточно, скопируйте и вставьте в свой любимый редактор и посмотрите в виде кода PHP, или сохраните и протестируйте его самостоятельно.

Как вы, вероятно, знаете, get_current_user() возвращает владельца «текущего скрипта» – поэтому, если вы не «chown» сценарий на сервере для пользователя веб-сервера, он скорее всего будет «никем», или если разработчик-пользователь существует в одной и той же ОС, он скорее отобразит это имя пользователя.

Чтобы обойти это, мы создаем файл с текущим запущенным процессом. Если вы просто require() в текущем запущенном скрипте, он будет возвращать то же самое, что и родительский скрипт, как указано; поэтому нам нужно запустить его как отдельный запрос для вступления в силу.

Процесс потока

Чтобы сделать это эффективным, рассмотрите возможность запуска шаблона проектирования, который включает в себя «режим выполнения», поэтому, когда сервер находится в «режиме разработки или тестовом режиме», тогда только он может запустить эту функцию и сохранить ее выход где-нибудь в include , или просто текст или базу данных, или в зависимости от того.

Конечно, вы можете изменить некоторые особенности кода выше, поскольку вы хотите сделать его более динамичным, но логика выглядит следующим образом:

  • определить уникальную ссылку на ограничение помех другим пользователям
  • определить локальный путь к файлу для записи временного файла
  • определить общий URL-адрес / путь для запуска этого файла в собственном процессе
  • напишите временный файл php, который выводит имя владельца скрипта
  • получить результат этого скрипта, сделав запрос на него
  • удалите файл, поскольку он больше не нужен – или оставьте его, если хотите
  • вернуть результат запроса в качестве возвращаемого значения функции