Я помощник преподавателя по безопасности программного обеспечения и запускаю сервер, который изначально уязвим.
Это сервер nginx, на котором открыто 40 портов. Каждый порт обслуживает веб-приложение, и все веб-приложения очень уязвимы для взлома. Если одно веб-приложение скомпрометировано, злоумышленник получит привилегии пользователя www-data, а затем злоумышленник сможет взломать остальные 39 веб-приложений. Есть ли способ предотвратить это? Я не хочу, чтобы злоумышленник получил права доступа за пределами единственное взломанное веб-приложение.
Аппаратные ограничения сервера делают невозможным использование Docker, не говоря уже о виртуальных машинах.
Если одно веб-приложение скомпрометировано, злоумышленник получит привилегии пользователя www-data, а затем злоумышленник сможет взломать остальные 39 веб-приложений. Есть ли способ предотвратить это?
Да. Не делай этого. Нет абсолютно никаких причин запускать несвязанные приложения от имени одного пользователя. В типичной Unix-подобной системе имеется более 65 000 доступных идентификаторов пользователей, и вы должны воспользоваться ими. Как это сделать, зависит от конкретного приложения и используемых технологий, что лучше всего задать в отдельном вопросе.
Это звучит как уникальная ситуация для приложений, но я бы спросил разработчиков: если приложение является приложением PHP, почему они не могут использовать $_SERVER['SERVER_PORT']
чтобы получить текущий порт для текущего приложения и соответственно заблокировать данные? Это можно добавить в качестве проверки в верхней части программы PHP, и если будет замечено что-то непредвиденное, просто exit();
или сделайте что-нибудь, что явно запрещает нежелательное поведение. Как именно это сделать, зависит от приложения.