getmyuid против posix_getuid

Koichi

Новичок
getmyuid против posix_getuid

Всем привет!

Обнаружил, что после некоторых изменений у хостера, скрипты PHP начали обращаться к файлам от имени какого-то другого пользователя, вместо нужного.
Написал небольшой скрипт для проверки и выяснил, что теперь возвращаются разные значения UID от двух вроде одинаковых команд:
getmyid() - возвращает UID нашего пользователя, под которым заливаем файлы по FTP, под которым PHP скрипты работали раньше.
posix_getuid() - возвращает UID какого-то пользователя nobody, от имени которого теперь PHP скрипты создают файлы.

Естественно, теперь fopen не может открыть на редактирование файлы нашего пользователя, у которых аттрибуты 0644.
И наоборот, файлы созданные через fopen нашим пользователем по FTP мы теперь редактировать тоже не можем.

Что это может означать, в чём различие между двумя этими функциями, и на что нужно обратить внимание хостера в такой непростой ситуации?
 

С.

Продвинутый новичок
Первый коммент:

Note that this function really does what the description says, it returns the numeric user id of the user who *owns the file* containing the current script not the effective user id of user *running* the current script.
 

Koichi

Новичок
Ааа, точно, теперь понял в чём же разница между этими функциями.
getmyid() - возвращает UID пользователя, являющегося владельцем файла данного выполняемого PHP скрипта.
posix_getuid() - возвращает UID пользователя, от имени которого был запущен процесс, выполняющий данный PHP скрипт.

Хостер пишет мне, что не понимает в чём может быть причина того, что процесс стал запускаться от имени другого пользователя.
Советует сделать бэкап и пересоздать весь мой аккаунт на его хостинге.

Есть среди форумчан какие-нибудь предположения, из-за чего на сервере Apache 2.0.63 может процесс запускаться от имени левого пользователя?
Очень бы не хотелось пересоздавать аккаунт из-за большого объёма файлов, непростой структуры медленно обновляющихся DNS записей, востребованности сайта.

Server Software:
Apache/2.0.63 (Unix)
mod_ssl/2.0.63
OpenSSL/0.9.8e-fips-rhel5
mod_auth_passthrough/2.1
mod_bwlimited/1.4
FrontPage/5.0.2.2635
PHP/5.2.14
Loaded Modules:
core mod_access mod_auth mod_include mod_log_config mod_logio mod_env mod_expires mod_headers mod_setenvif mod_version mod_proxy proxy_connect proxy_ftp proxy_http mod_ssl prefork http_core mod_mime mod_status mod_autoindex mod_asis mod_info mod_suexec mod_cgi mod_negotiation mod_dir mod_imap mod_actions mod_userdir mod_alias mod_rewrite mod_so mod_auth_passthrough mod_bwlimited mod_fpcgid mod_bw mod_php5
Подскажите пожалуйста, в каком направлении надо копать, чтобы процессы снова запускались от имени того же пользователя, который является владельцем файлов и всего аккаунта.
 

dimagolov

Новичок
Есть среди форумчан какие-нибудь предположения, из-за чего на сервере Apache 2.0.63 может процесс запускаться от имени левого пользователя?
это как бы очевидно. из-за того, что апач запущен из-под этого пользователя.
Подскажите пожалуйста, в каком направлении надо копать, чтобы процессы снова запускались от имени того же пользователя, который является владельцем файлов и всего аккаунта.
в сторону конфига апача и скрипта его запуска
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вот кстати говоря, у нас была похожая проблема, с апачем 2.0 как раз - через пару часов работы, он терял половину настроек окружения (в частности, в нашем случае, NLS_LANG, который выставлял кодировку для работы с оракловой базой.) Тогда решилось переездом на апач 2.2, но! это было под виндой, и пользователь вроде бы не менялся.
 

С.

Продвинутый новичок
Вообще говоря "ноубоди" -- дефолтный для запуска Апача. Это сделано для улучшения безопасности, в случае дыры в скрипте ущерб может быть нанесен гораздо меньше. Такая конфигурация неудобна только на шаред хостингах, там стараются менять владельца.

Если Апач весь твой, то может стоит и оставить "ноубоди". Для файлов, предназанченных на запись из скрипта (их обычно немного) выставить 666.
 

Koichi

Новичок
Вот какое дело.
Server API: Apache 2.0 Handler
apache2handler User/Group: nobody(99)/99

Хостер пишет мне, что раньше PHP работал как php_cgi mod_cgi
А теперь работает как mod_php5 mod_so
И благодаря этому я теперь могу редактировать .htaccess и php.ini

Эти возможности могут позволить мне запускать PHP скрипты от имени владельца скрипта вместо nobody?
Файлы владельца nobody я не могу редактировать через FTP и не могу уже созданным файлам указать нового владельца.

apache2handler Loaded Modules:
core mod_access mod_auth mod_include mod_log_config mod_logio mod_env mod_expires mod_headers mod_setenvif mod_version mod_proxy proxy_connect proxy_ftp proxy_http mod_ssl prefork http_core mod_mime mod_status mod_autoindex mod_asis mod_info mod_suexec mod_cgi mod_negotiation mod_dir mod_imap mod_actions mod_userdir mod_alias mod_rewrite mod_so mod_auth_passthrough mod_bwlimited mod_fpcgid mod_bw mod_php5
 

С.

Продвинутый новичок
Нет, ты не сможешь менять владельца процесса в такой конфигурации.

Чтобы иметь возможность править файлы, выставляй соответствующие атрибуты скриптом при создании файла.
 

Koichi

Новичок
ООоо, так это же разрешения 0777 на все мои редактируемые файлы.
Блин, это плохо, это очень досадно.
И все новые файлы тоже будут принадлежать nobody, а не мне.
Значит, пора прессовать хостера, чтобы вернул всё как было.

C, благодарю за внимание и исчерпывающий ответ, Вы мне помогли определиться.

-~{}~ 19.08.10 13:54:

А какой из трёх способов смены пользователя наиболее рекомендуется к применению?

* suPHP
* suEXEC
* phpSuExec
 

С.

Продвинутый новичок
Нет абсолютно "правильного" способа смены владельца. Если бы был, то его бы все давно и пользовали. В каждом есть свои негативные стороны.

Что такого страшного в 0777? (0666 достаточно). А когда ты запускаешь непонятно какой код со свсеми своими правами, тебе не страшно? В первом случае он может только некоторые файлы данных попортить, а во-втором -- поиметь тебя по полной программе.

Тут дело привычки. Можно прекрасно работать с ноубоди, не испытывая никаких неудобств.
 
Сверху