Почему я вижу две строки в fstat для одного и того же сокета / порта?

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

$ sudo apt-get install php5-gd php5-mcrypt

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

$ grep -Hr "extension=" /etc/php5 
/etc/php5/mods-available/opcache.ini:zend_extension=opcache.so
/etc/php5/mods-available/json.ini:extension=json.so
/etc/php5/mods-available/mcrypt.ini:extension=mcrypt.so
...

и закомментировать строки в файлах, дающих ошибку.

Edit Также возможно, что указанные пути неверны, возможно, вы можете их исправить.

1
30.08.2017, 15:20
1 ответ

Этого я и ожидал. Чтобы прослушивать привилегированный порт, процесс должен быть запущен с привилегиями root. Но как только пользователь подключен, мы хотим, чтобы этот процесс выполнялся с привилегиями подключенного пользователя.Если серверный процесс просто сбросит свои привилегии, он не сможет обслужить запрос от другого пользователя. Существует также проблема, заключающаяся в том, что сервер должен обрабатывать несколько подключений одновременно. Итак, что происходит, так это то, что сервер (, работающий как root ), прослушивает сокет до тех пор, пока пользователь не подключится, а затем, чтобы позволить ему обрабатывать другие запросы и работать с правильным уровнем привилегий, он разветвляется, создавая 2 экземпляра.. Один экземпляр возвращается к прослушиванию соединений, другой переключается на менее привилегированного пользователя. Оба имеют копию дескриптора, ссылающегося на соединение сокета.

Если один из процессов закроет сокет, то, в отличие от двух процессов, обращающихся к одному и тому же файлу, соединение будет потеряно.

0
28.01.2020, 00:49

Теги

Похожие вопросы