Java SecurityManager: хорошее введение в файлы политики
Можете ли вы порекомендовать хорошее введение в нетривиальные файлы политик для стандартного Java SecurityManager?
Есть ли примеры, которые выходят за рамки того, что предлагает веб-сайт Java? Или, может быть, кто-то описывает, как защитить Tomcat, который запускает целую кучу различных веб-приложений?
[EDIT] Мой вариант использования - это приложение, которое может запускать скрипты, написанные тремя типами пользователей: 1. разработчиками приложений, 2. администраторами приложений и 3. конечными пользователями.
Пользователи из группы 1 должны иметь доступ к практически любому ресурсу (= нет необходимости в специальном SM).
Группе № 2 можно доверять, но мы хотели бы защитить их от глупых ошибок (например, звонить System.exit
).
Группе № 3 нельзя доверять. Они обычно пишут только небольшие сценарии.
Когда я запускаю скрипт, я знаю, откуда он берется. Помогут ли файлы политики в моем случае использования или мне нужно написать собственный SecurityManager?
1 ответ
Вы на самом деле смотрели на методы, доступные в SecurityManager?
- Как он (SecurityManager) может ответить, может ли конкретный пользователь выполнить определенное действие?
- У него нет возможности узнать, что пытался сделать пользователь (действие)
- У него нет возможности узнать, по каким данным пользователь пытался выполнить операцию (вещь).
Полицейские файлы хороши только для ресурсов, которые нуждаются в некоторых ограничениях безопасности, которые могут быть выражены в краткой текстовой форме и не изменятся во время работы jvm. Вещи, как следующие:
- может читать только из hardrive/path/to/file.
- может читать только системное свойство X
- можно только открывать сокеты на портах...
На самом деле ваш вопрос не говорит, кого вы хотите проверить и какие действия они могут выполнить. Если вы пытаетесь защитить страницы (например, URL-адреса), вы можете рассмотреть что-то вроде Spring Security, которое позволяет вам говорить что-то вроде:
- для URL "/crash-computer" это разрешено делать только пользователям в роли "nasty"
- только пользователи с ролью "admin" могут получить доступ к "/admin/*" и т. д.
Вам нужно будет добавить свою собственную логику, чтобы делать такие вещи, как только пользователь, создавший X, или суперпользователь может обновить X.