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

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Вид обратного пути, но без exec/system:

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

echo `whoami`;

Ответ 6

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

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_

Ответ 7

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

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

Ответ 8

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

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

<?php                                                                           
phpinfo();                                                                    
?>  

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

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

Ответ 9

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

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

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

Ответ 10

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

php -r "echo exec('whoami');"

Ответ 11

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

<?php echo get_current_user(); ?>

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

Ответ 12

$_SERVER["USER"]

$_SERVER["USERNAME"] 

Ответ 13

Предложение

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

<?
    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() возвращает владельца "текущего запуска script", поэтому, если вы не "chown" a script на сервере для пользователя веб-сервера, он, скорее всего, быть "никому", или если разработчик-пользователь существует в той же ОС, он скорее отобразит это имя пользователя.

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

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

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

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

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

Ответ 15

<?php phpinfo(); ?>

сохранить как info.php и

откройте info.php в вашем браузере

Ctrl + F затем введите любой из них:

APACHE_RUN_USER
APACHE_RUN_GROUP
user/group

Вы можете видеть пользователя и группа Apache работает как.

Ответ 16

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

<? system('whoami');?>

или же

<? passthru('whoami');?>

или же

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

или же

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

или же

<? print get_current_user();?>