Я пытаюсь настроить сервер разработки, который будет использоваться для нескольких (веб-проектов) разными командами (состоящими из разных людей, некоторые из которых могут быть задействованы более чем в одном проекте). Я доверяю всем своим пользователям, однако по юридическим причинам (конфиденциальные данные потенциально могут храниться в некоторых проектах) мне нужно иметь возможность ограничить их доступ к некоторым частям сервера.
Мне нужен следующий стек:
nginx
php-fpm
(через fastcgi)mariadb
как сервер mysqlvarnish
Большинству (если не всем) пользователей необходим доступ к ssh, поэтому об ограничении подключений к sftp и их заключении в тюрьму не может быть и речи. Я выяснил следующее:
nginx
не выполняет произвольный код, поэтому может работать с разрешениями для всех проектовphp-fpm
жестяная банка выполнить произвольный код, поэтому его нужно ограничить. Я решил запустить отдельные пулы, каждый с доступом только к одному проектуmysql
не представляет угрозы для безопасностиvarnish
это отдельная проблема, с которой мне придется разобраться позжеМоя первоначальная идея заключалась в том, чтобы заключить в тюрьму пользователей, использующих ssh-соединения, но это похоже на «быстрое исправление», а не на решение - кроме того, это было бы ограничивающим и утомительным обслуживанием. Вторая мысль заключалась в том, чтобы использовать SELinux (с которым у меня нет опыта) для ограничения доступа к файлам, связанным с проектом. Я думал, что сработает следующее (margo
это пример названия проекта):
margo_proj
) что будет: margo_proj_t
, margo_proj_log_t
и margo_proj_tmp_t
httpd_t
а также все контексты, которые назначаются пользователям, участвующим в проекте/srv/www/margo
так как margo:margo
с участием 775
разрешения и margo_t
контекст /srv/www/margo
которые не интерпретируются PHP имеют 775
разрешение770
разрешенияnginx
так как www-data:www-data
и php-fpm
бассейн как margo:margo
, оба с httpd_t
контекст. margo
группа.Это сработает? У меня очень базовое (т.е. несуществующее) понимание SELinux, и я хотел проверить, является ли это правильным способом решения проблемы, прежде чем я начну выполнять операции, которые могут привести к простою сервера. Информации о SELinux очень много, но я не смог найти ничего, хотя бы отдаленно связанного с моей конкретной проблемой, и большинство статей трудно понять неопытному пользователю SELinux.