Что именно вы имеете в виду под вопросом «есть ли еще имена»? Системные администраторы могут создавать пользователей с любым именем.
Альваро Гонсалес,
Любые другие имена по умолчанию для всего, что может считаться сервером; apache, никто, www-data и т. д.
Уэсли,
1
Если я правильно помню, у системных пользователей обычно маленький UID (ниже 1024?). Это может быть лучшим ключом к разгадке того, чего вы пытаетесь достичь.
Однако если вы работаете в безопасном режиме (что часто бывает, когда exec отключен), то маловероятно, что ваш процесс PHP работает под чем-либо, кроме учетной записи по умолчанию www-dataили apacheучетной записи.
Не могу использовать exec или system или любые подобные функции passthru.
Уэсли,
Было именно то, что мне было нужно. get_current_user () - это не то, что мне определенно нужно.
dgig
5
Может быть полезно для некоторых пользователей: если вы запустите это из интерфейса командной строки, вы получите пользователя, выполняющего команду, а не пользователя PHP.
Брэм Ванрой
@BramVanroy тогда где его запустить? = |
Эндрю
@BramVanroy - Я хочу понять ваш комментарий, но не понимаю. если вы запустите это из cli, разве вы не владеете текущим процессом php? Кем, кроме вас, в этом случае будет пользователь PHP?
Если вы создаете файл, владельцем будет пользователь PHP.
Это также может быть запущено с любой из функций временного файла, например tempnam(), которая создает случайный файл во временном каталоге и возвращает имя этого файла. Если есть проблемы из-за чего-то вроде разрешений open_basedirили безопасного режима, которые предотвращают запись файла, обычно временный каталог все равно будет разрешен.
Приятно: здесь единственное непривилегированное решение, позволяющее также найти группу , в которой работает PHP.
tanius
2
достойный взломщик, заслуживает более высокого места
Авраам Филипп
1
@RavinderPayal Если вы не используете функцию tempnam, как я предлагал. Почти гарантировано, что пользователь может писать во временный каталог независимо от того, кто он. Не имея возможности писать во временный каталог, вы можете временно дать папке 777 разрешения и, если включено, отключить selinux для этого пути.
Джонатан Кун,
1
@RavinderPayal есть дополнительные функции для возврата временного пути. Таким образом, можно $temp_file = tempnam(sys_get_temp_dir(), 'TMP');было бы создать временный файл в каталоге temp практически в любой системе. Затем вы можете использовать этот файл для получения пользователя / группы. Я оставил часть этого на усмотрение пользователя.
Джонатан Кун
20
Было бы полезно получить более подробную информацию, но если это система Linux и если php работает под apache, он будет работать так же, как и пользовательский apache.
Простой способ проверить (опять же, предполагая, что некоторая среда похожа на unix) - создать файл php с:
<?php
print shell_exec('whoami');?>
который даст вам пользователя.
Для моего экземпляра AWS я получаю apacheвыходные данные при запуске этого скрипта.
Может быть полезно для некоторых пользователей: если вы запустите это из интерфейса командной строки, вы получите пользователя, выполняющего команду, а не пользователя PHP.
Брэм Ванрой
13
я хотел бы использовать:
lsof -i
lsof -i | less
lsof -i | grep :http
любой из этих. Вы можете ввести em в свою командную строку ssh, и вы увидите, какой пользователь какой сервис слушает.
Не могу использовать exec или system или любые подобные функции passthru.
Уэсли,
@ Уэсли: так что это невозможно.
генезис
2
Может быть полезно для некоторых пользователей: если вы запустите это из интерфейса командной строки, вы получите пользователя, выполняющего команду, а не пользователя PHP.
и какую переменную / значение в этом выводе мы ищем?
Эндрю
Я уверен, что вы уже нашли это, но ищете ли вы "пользователь" на этой странице?
CRTLBREAK
0
В своих настройках я хочу проверить, есть ли у текущего процесса разрешение на создание папок, подпапок и файлов, прежде чем я начну процесс, и предложить решение, если похоже, что я не могу. Я хотел запускать stat(<file>)разные вещи, чтобы убедиться, что разрешения совпадают с разрешениями запущенного процесса (я использую php-fpm, поэтому он зависит от пула).
Решение на основе posix, которое Марио дал выше, кажется идеальным, однако кажется, что расширение posix --disabled, поэтому я не мог сделать это, и поскольку я хочу сравнить результаты с ответом от запуска stat () runningwhoami в отдельной оболочке тоже не помогает (мне нужны uid и gid, а не имя пользователя).
Однако я нашел полезную подсказку, я мог stat(/proc/self)иstat(/proc/self/attr) увидеть в UID и GID файла.
Выделение кода выше не является точным, скопируйте и вставьте его в свой любимый редактор и просматривайте как код PHP или сохраните и проверьте его самостоятельно.
Как вы, наверное, знаете, get_current_user()возвращает владельца «текущего запущенного скрипта» - так что, если вы не «показали» скрипт на сервере пользователю веб-сервера, он, скорее всего, будет «никто», или, если разработчик- Пользователь существует в той же ОС, он скорее отобразит это имя пользователя.
Чтобы обойти это, мы создаем файл с текущим запущенным процессом. Если ты простоrequire() это в текущий запущенный скрипт, он вернет то же самое, что и родительский скрипт, как упоминалось; поэтому нам нужно запустить его как отдельный запрос, чтобы он вступил в силу.
Процесс-поток
Чтобы сделать это эффективным, рассмотрите возможность запуска шаблона проектирования, который включает в себя «режим выполнения», поэтому, когда сервер находится в «режиме разработки или тестовом режиме», только он может запустить эту функцию и сохранить ее вывод где-нибудь во включаемом , -или просто текст или базу данных, или что-то еще.
Конечно, вы можете изменить некоторые детали приведенного выше кода, если хотите сделать его более динамичным, но логика следующая:
определить уникальную ссылку, чтобы ограничить помехи другим пользователям
определить локальный путь к файлу для записи временного файла
определить общедоступный URL / путь для запуска этого файла в его собственном процессе
напишите временный файл php, который выводит имя владельца скрипта
получить вывод этого скрипта, сделав к нему запрос
удалите файл, поскольку он больше не нужен - или оставьте его, если хотите
вернуть вывод запроса как возвращаемое значение функции
Ответы:
Если доступно, вы можете проверить текущую учетную запись пользователя,
posix_geteuid
а затем получить имя пользователя с помощьюposix_getpwuid
.Однако если вы работаете в безопасном режиме (что часто бывает, когда exec отключен), то маловероятно, что ваш процесс PHP работает под чем-либо, кроме учетной записи по умолчанию
www-data
илиapache
учетной записи.источник
get_current_user()
странице руководства, который показывает этот подход. Начиная с PHP 5.4, его можно сократить до следующего:print posix_getpwuid(posix_geteuid())['name'];
<?php echo exec('whoami'); ?>
источник
Вид обратного пути, но без exec / system:
Если вы создаете файл, владельцем будет пользователь PHP.
Это также может быть запущено с любой из функций временного файла, например
tempnam()
, которая создает случайный файл во временном каталоге и возвращает имя этого файла. Если есть проблемы из-за чего-то вроде разрешенийopen_basedir
или безопасного режима, которые предотвращают запись файла, обычно временный каталог все равно будет разрешен.источник
$temp_file = tempnam(sys_get_temp_dir(), 'TMP');
было бы создать временный файл в каталоге temp практически в любой системе. Затем вы можете использовать этот файл для получения пользователя / группы. Я оставил часть этого на усмотрение пользователя.Было бы полезно получить более подробную информацию, но если это система Linux и если php работает под apache, он будет работать так же, как и пользовательский apache.
Простой способ проверить (опять же, предполагая, что некоторая среда похожа на unix) - создать файл php с:
который даст вам пользователя.
Для моего экземпляра AWS я получаю
apache
выходные данные при запуске этого скрипта.источник
Вы можете попробовать использовать такие обратные кавычки:
источник
я хотел бы использовать:
любой из этих. Вы можете ввести em в свою командную строку ssh, и вы увидите, какой пользователь какой сервис слушает.
вы также можете пойти и проверить этот файл:
и ищите эти строки:
чтобы отфильтровать данные файла envvars, вы можете использовать grep:
источник
grep "APACHE_RUN_" /etc/apache2/envvars
работал хорошо, спасибо.exec('whoami')
сделаю этоисточник
Прямо из оболочки можно запустить:
источник
добавьте файл info.php в следующий каталог - ваш каталог http / apache по умолчанию - обычно / var / www / html
со следующим содержанием
Затем httpd / apache перезапустите, перейдите в свой html-каталог по умолчанию http://enter.server.here/info.php
доставит всю родословную php!
источник
В своих настройках я хочу проверить, есть ли у текущего процесса разрешение на создание папок, подпапок и файлов, прежде чем я начну процесс, и предложить решение, если похоже, что я не могу. Я хотел запускать
stat(<file>)
разные вещи, чтобы убедиться, что разрешения совпадают с разрешениями запущенного процесса (я использую php-fpm, поэтому он зависит от пула).Решение на основе posix, которое Марио дал выше, кажется идеальным, однако кажется, что расширение posix --disabled, поэтому я не мог сделать это, и поскольку я хочу сравнить результаты с ответом от запуска stat () running
whoami
в отдельной оболочке тоже не помогает (мне нужны uid и gid, а не имя пользователя).Однако я нашел полезную подсказку, я мог
stat(/proc/self)
иstat(/proc/self/attr)
увидеть в UID и GID файла.Надеюсь, это поможет кому-то другому
источник
Вы можете использовать эти команды:
или
или
или
или
источник
Я обычно использую
Буду рад если тебе помогло
источник
get_current_user() - Gets the name of the owner of the current PHP script
- не пользователь, запускающий процесс PHP.источник
echo $_SERVER["USER"];
работает, но дает имя текущего зарегистрированного пользователя в SSH.Предложение
Немного поздно, но, несмотря на то, что следующее решение является обходным, оно решает требование, поскольку это работает отлично:
Описание
Выделение кода выше не является точным, скопируйте и вставьте его в свой любимый редактор и просматривайте как код PHP или сохраните и проверьте его самостоятельно.
Как вы, наверное, знаете,
get_current_user()
возвращает владельца «текущего запущенного скрипта» - так что, если вы не «показали» скрипт на сервере пользователю веб-сервера, он, скорее всего, будет «никто», или, если разработчик- Пользователь существует в той же ОС, он скорее отобразит это имя пользователя.Чтобы обойти это, мы создаем файл с текущим запущенным процессом. Если ты просто
require()
это в текущий запущенный скрипт, он вернет то же самое, что и родительский скрипт, как упоминалось; поэтому нам нужно запустить его как отдельный запрос, чтобы он вступил в силу.Процесс-поток
Чтобы сделать это эффективным, рассмотрите возможность запуска шаблона проектирования, который включает в себя «режим выполнения», поэтому, когда сервер находится в «режиме разработки или тестовом режиме», только он может запустить эту функцию и сохранить ее вывод где-нибудь во включаемом , -или просто текст или базу данных, или что-то еще.
Конечно, вы можете изменить некоторые детали приведенного выше кода, если хотите сделать его более динамичным, но логика следующая:
источник
сохранить как info.php и
откройте info.php в вашем браузере
ctrl + f, затем введите любой из них:
вы можете видеть пользователя и группу apache, запущенную как.
источник
http://php.net/manual/en/reserved.variables.server.php
Аутентифицированный пользователь
источник