PHP Security: нужна помощь в понимании SUID

Я читаю книгу о безопасности PHP и ниже я не совсем понимаю, конкретная часть выделена жирным шрифтом. Так, скажем, PHP хочет переместить файл, принадлежащий пользователю A, PHP должен работать как пользователь A? Это разрешено? Я на самом деле не системный администратор, но я не совсем понимаю, как это делает сервер более или менее безопасным

Бит SUID или Set ID пользователя - это функция разрешений файловой системы UNIX и Linux, которая позволяет указать, что рассматриваемое приложение всегда должно запускаться как пользователь, которому принадлежит двоичный файл, независимо от того, какой пользователь инициирует процесс

1 ответ

Решение

Я предполагаю, что мы говорим о веб-сервере. Обычно, когда веб-сервер запускает библиотеку PHP (или исполняемый файл в зависимости от обстоятельств), PHP запускается как пользователь веб-сервера. Поэтому, если веб-сервер работает как пользователь 'www', PHP также будет работать от имени этого пользователя и наследовать разрешения этого пользователя.

Если вы установите бит SUID, тогда PHP не будет работать как пользователь 'www', вместо этого владелец программы PHP - это тот, от кого будет запускаться программа PHP. Так что если "root" владеет PHP, то PHP всегда будет работать как "root" со всеми связанными разрешениями. Это может быть очень опасно, так как в системах Unix "root" обладает неограниченной мощностью (учетные записи администратора уступают только системной учетной записи Windows и могут нанести почти столько же ущерба, сколько и достаточно плохого).

Теперь, если вы хотите, чтобы PHP мог открывать файл как пользователь 'joe', тогда PHP должен работать как пользователь 'joe'. Если это исходит от веб-сервера, это может произойти только одним из двух способов (обычно). 1. Веб-сервер работает как 'joe', и PHP унаследует эти разрешения. 2. PHP работает как пользователь, который может принять права других пользователей (обычно эта возможность зарезервирована для "root").

Поскольку запуск веб-сервера с именем "joe" нецелесообразен, принято SUID PHP-программы и запускать ее с правами root, а затем принять права пользователя "joe". Это может быть чрезвычайно опасно, поскольку ошибки в программе могут легко позволить любому взломать сервер и нанести неисчислимый ущерб. Кроме того, ошибки в других частях веб-сервера потенциально могут использовать это и снова нанести ущерб. По этой (и другим) причине настоятельно рекомендуется, чтобы вы не использовали SUID (за исключением случаев, когда это абсолютно необходимо) и не писали программы, в которых это не требуется.

В зависимости от конкретной среды могут применяться дополнительные сведения, а некоторые из них могут быть неточными. Я старался изо всех сил, не зная точно, что ты делаешь. Также обратите внимание, что в Windows нет SUID, но есть способы получить эту функциональность при работе веб-сервера.

Другие вопросы по тегам