Привет, я только что закончил технический тест на Ubuntu и столкнулся с проблемой, когда мне нужно было изменить пользователя процесса PHP, чтобы исправить сломанный веб-сайт. Я думаю, что пользователь был "foo", но нужно было "www-data". В конце мне сказали, что "chowning the process" - это исправление, я просто хочу знать, как это сделать, для справки в будущем.
Так же, как вы бы chownили пользователя файла (я предполагаю), но только для процесса. Я искал и искал, но мне интересно, не ищу ли я не ту команду? Или это можно изменить где-то в файле конфигурации, может быть?
Заранее спасибо!
решение1
Невозможно извне изменить пользователя или группу запущенного процесса в Linux. Что вы можете сделать, так это изменить конфигурацию того, что вы запускаете, чтобы использовать нового пользователя со следующего запуска. Это зависит от того, как вы установили и настроили PHP (или, скорее, от того, что запускает PHP для вас — apache, php-fpm и т. д.).
решение2
Ты не сможешь этого сделать, чувак, если можешь, поделись с нами. Посмотри эту ссылку: https://stackoverflow.com/questions/37401774/изменение-владельца-текущего-процесса
решение3
На самом деле это недостаток конструкции ядра Linux, поскольку изменение учетных данных происходит только на диске, но не в памяти. Говоря конкретно, при изменении учетных данных (UID, GID или дополнительный список групп) все существующие процессы продолжат использовать свои предыдущие учетные данные и получат доступ к ранее предоставленным данным. И нет ни одной функции API для распространения изменения учетных данных по всей системе (т. е. всем процессам). В результате этого дефекта ни одна программа уровня пользователя не может делать то, что вы хотите. Для этого вам нужен модуль ядра. Я только что попытался сделать один, и он работает на простых программах. (https://github.com/xuancong84/supgroup)
Однако, в целом, это не очень хорошая идея, поскольку в целом программа может иметь множество взаимодействий, например, открытые дескрипторы файлов, дочерние процессы/потоки, работающие на других ядрах ЦП, связанные каналы, открытые устройства и т. д. Таким образом, изменение UID/GID во время работы может привести к множеству неопределенных поведений, среди которых некоторые могут вызывать ошибки (например, сломанный канал, прерванная связь ввода-вывода), некоторые могут оказаться опасными (например, сбой системы). Я проверил, что эта программа работает на простых программах (таких как nc -l 8080
), но на гораздо более сложной программе, запускающей много потоков на многих ядрах ЦП и ядрах CUDA графического процессора, имеющей интенсивную сетевую активность и активность дискового ввода-вывода, я не уверен, что произойдет.