get_current_user
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
- getmyuid() — Получение UID владельца скрипта PHP
- getmygid() — Получить GID владельца скрипта PHP
- getmypid() — Получение ID процесса PHP
- getmyinode() — Получает значение inode текущего скрипта
- getlastmod() — Получает время последней модификации страницы
User Contributed Notes 7 notes
to get the username of the process owner (rather than the file owner), you can use:
<?php
$processUser = posix_getpwuid ( posix_geteuid ());
print $processUser [ ‘name’ ];
?>
On Centos, the Red Hat linux clone, this instruction gives the file’s OWNER (the first parameter in instruction ‘chown’). It does not reveal the file’s GROUP.
get_current_user() does NOT reveal the current process’ user’s identity.
See: posix_getuid() — Return the real user ID of the current process
The information returned by get_current_user() seems to depend on the platform.
Using PHP 5.1.1 running as CGI with IIS 5.0 on Windows NT, get_current_user() returns the owner of the process running the script, *not* the owner of the script itself.
It’s easy to test — create a file containing:
<?php
echo get_current_user ();
?>
Then access it through the browser. I get: IUSR_MACHINE, the Internet Guest Account on Windows, which is certainly not the owner of the script.
Further testing of behaviour on Windows vs Linux.
On Linux this function is indeed returning the owner of the script. If you want to know the username PHP is running as you can use POSIX functions (or shell_exec with ‘whoami’).
On Windows this function is returning the username PHP is running as. Both for IIS (IUSR) and Apache (SYSTEM — which comes from the fact Apache is a service on Windows).
The behaviour on Windows is actually useful given that POSIX functions aren’t available. If you need to find the owner of the script on Windows perhaps the best way is to shell_exec to use dir /Q, and parse that.
Since this only returns the file owner and not the actual user running the script, an alternative in Linux is:
<?php
$current_user = trim ( shell_exec ( ‘whoami’ ));
?>
If you want to get the name of the user who executes the current PHP script, you can use
От имени какого пользователя работает PHP в Linux?
Здравствуйте!
Начал выкладывать свои PHP-скрипты в сеть и возник вопрос, о котором я раньше как-то не задумывался. Необходимо настроить безопасность по доступу к директориям в Ubuntu (в общем в Linux). Как известно доступ к папкам и файлам имеет 3 уровня:
1. суперпользователь
2. зарегистрированные пользователи
3. все остальные (собственно пользователи сайта)
Я рассуждаю так. Папка с включаемыми файлами должна быть доступна зарегистрированным, но никак не всем остальным. Что же касается любого действия, которое выполняется в системе (чтение, запись, перезапись), оно выполняется от имени какого-то пользователя (которого можно отнести к одному из этих 3-х уровней).
Поскольку доступ к папке с включаемыми файлами, нужен PHP-скрипту, я так подозреваю, что он должен работать от имени какого-то зарегистрированного в системе пользователя. Но вот что это за пользователь и где он настраивается не знаю.
Подскажите кто знает, верны ли мои предположения и куда дальше копать. Найти ответ нигде не могу.
PHP работает от имени привилегированного пользователя
Как изменить? Прошу помощи!
от имени какого пользователя запущен процесс
Доброе время суток, пытаюсь сделать диспетчер задач сейчас у меня есть th32ProcessID и.
Сделать возможным вход в MySQL от имени любого пользователя (ОС Linux Mint)
Доброго всем времени суток. Подскажите, как решить вот такую проблемку. Операционная система у.
PHP — SQL добавление имени пользователя.
Мне нужна помощь с кодом PHP одного из компонентов(расширений) Joomla. PHP я знаю мало, но код.
От имени кого выполняются скрипты PHP?
Мне всегда думалось, что только только процесс, запущенный от root, может без лишних телодвижений сменить себе uid на любого другого через системный вызов setuid. Ну то есть, если у запускаемого файла не установлен бит suid.
Но читаю я в «Hardening WordPress» следующее: «When you tell WordPress to perform an automatic update, all file operations are performed as the user that owns the files, not as the web server’s user.»
Это как? Сервис apache изначально запускается от root, меняет себя на www-data и дальше так работает от www-data. Он разве может сменить себе uid с www-data на любой другой?
PS. suexec не используется;
PPS. основные файлы/каталоги WP (разу уж про него речь зашла) имеют владельца wwwuser:www-data и права 0640/0750;
PPPS. никаких suid битов я никому не выставлял.
Как проверить, какой пользователь php работает?
Мне нужно определить, работает ли php как никто. Как мне это сделать?
Есть ли другие имена для «никто»? «Апач»? Любые другие?
12 ответов
Если доступно, вы можете исследовать текущую учетную запись пользователя с помощью posix_geteuid а затем получить имя пользователя с помощью posix_getpwuid .
Однако, если вы работаете в безопасном режиме (что часто бывает, когда exec отключен), то маловероятно, что ваш PHP-процесс работает под чем угодно, кроме учетной записи www-data или apache по умолчанию.
Вид обратного пути, но без exec/system:
Если вы создадите файл, владелец будет пользователем PHP.
Это также может быть запущено с любой из временных файловых функций, таких как tempnam() , которая создает случайный файл во временном каталоге и возвращает имя этого файла. Если есть проблемы из-за чего-то вроде разрешений, open_basedir или безопасного режима, который предотвращает запись файла, как правило, каталог temp все равно будет разрешен.
Более подробная информация была бы полезна, но если предположить, что это Linux-система, и предположим, что php работает под apache, она будет работать так же, как и любой пользовательский apache, выполняемый как.
Простой способ проверить (опять же, предполагая некоторую среду, похожую на unix) — создать php файл с помощью
который предоставит вам пользователя.
Для моего экземпляра AWS я получаю apache как вывод, когда я запускаю этот script.
Вы можете попробовать использовать обратные такты:
я использовал бы:
любой из них. Вы можете ввести em в свою командную строку ssh, и вы увидите, какой пользователь прослушивает какую службу.
вы также можете пойти и проверить этот файл:
и найдите следующие строки:
чтобы отфильтровать данные файла envvars, вы можете использовать grep:
добавьте файл 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(), выполняющего whoami в отдельная оболочка тоже не полезна (мне нужны uid и gid, а не имя пользователя).
Однако я нашел полезный намек, я мог stat(/proc/self) и stat(/proc/self/attr) и видеть uid и gid файла.
Надеюсь, что кто-то еще поможет
Предложение
Немного поздно, но, несмотря на то, что следующее является обходным, оно решает требование, поскольку это работает очень хорошо:
Описание
Выделение кода выше неточно, скопируйте и вставьте в свой любимый редактор и просмотрите его как PHP-код или сохраните и протестируйте его самостоятельно.
Как вы, вероятно, знаете, get_current_user() возвращает владельца «текущего запуска script», поэтому, если вы не «chown» a script на сервере для пользователя веб-сервера, он, скорее всего, быть «никому», или если разработчик-пользователь существует в той же ОС, он скорее отобразит это имя пользователя.
Чтобы обойти это, мы создаем файл с текущим запуском процесса. Если вы просто require() в текущем запуске script, он будет возвращать то же самое, что и parent-script, как указано; поэтому нам нужно запустить его как отдельный запрос для вступления в силу.
Процесс потока
Чтобы сделать это эффективным, подумайте о запуске шаблона проектирования, который включает в себя «режим выполнения», поэтому, когда сервер находится в «режиме разработки или в тестовом режиме», тогда только он может запустить эту функцию и сохранить ее выход где-то в include, или просто текст или базу данных, или в зависимости от того, какой из них.
Конечно, вы можете изменить некоторые особенности кода выше, так как вы хотите сделать его более динамичным, но логика выглядит следующим образом: