Как проверить, какой пользователь php работает? - PullRequest
94 голосов
/ 14 октября 2011

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

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

Ответы [ 16 ]

177 голосов
/ 14 октября 2011

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

67 голосов
/ 14 октября 2011

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

$username = posix_getpwuid(posix_geteuid())['name'];

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

65 голосов
/ 14 октября 2011

В обратном направлении, но без exec / system:

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

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

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

20 голосов
/ 14 октября 2011

Было бы полезно получить больше подробностей, но если предположить, что это система linux, и если php работает под apache, он будет работать так же, как и пользователь apache.

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

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

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

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

15 голосов
/ 14 октября 2011

Вы можете попробовать использовать обратные пометки, как это:

echo `whoami`;
8 голосов
/ 09 февраля 2014

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

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_
6 голосов
/ 14 октября 2011

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

<?php
exec('whoami');
?>
2 голосов
/ 09 февраля 2019

Прямо из оболочки вы можете запустить:

php -r "echo exec('whoami');"
2 голосов
/ 10 июня 2017

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

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

<?php                                                                           
phpinfo();                                                                    
?>  

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

предоставит всю родословную php!

1 голос
/ 22 апреля 2014

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

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

Надеюсь, что это поможет кому-то еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...