Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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();?>