Обеспечение безопасности моей Java-программы - PullRequest
2 голосов
/ 02 февраля 2010

У меня есть проект Java, который использует библиотеку Bluecove , для этой библиотеки требуются права суперпользователя для выполнения определенных действий, которые мне требуются в моем проекте. Здесь следует отметить, что, несмотря на то, что проект основан на Java, он предназначен только для Linux.

В проекте будет много функций, которым не требуются привилегии root, некоторые из которых должны будут взаимодействовать с функциями привилегий root, а некоторые - нет.

Кроме того, проект будет выполнять такие программы, как hciconfig , используя введенные пользователем данные с правами суперпользователя.

Вся эта корневая активность заставляет меня беспокоиться о безопасности моей системы. Целевой машиной будет собственный компьютер пользователя, и не планируется запускать эту систему на каком-либо общедоступном терминале, но безопасность по-прежнему важна, поскольку неизвестные внешние устройства Bluetooth могут взаимодействовать с этой системой.

До сих пор мои меры безопасности включали сильную фильтрацию пользовательского ввода и очень внимательное отношение ко всем действиям, которые внешние устройства Bluetooth будут выполнять в системе, но я все больше и больше недоволен этим.

Что бы люди порекомендовали? Одна мысль состоит в том, чтобы разделить систему на два или три модуля, один из которых содержит GUI и некорневый бэкэнд, один содержит корневой бэкэнд Bluecove и, возможно, корневую оболочку для hciconfig и других используемых инструментов.

Я заметил, что некоторые программы, например Apache, однажды запускают «выпадающие» свои привилегии. Как это достигается и эффективно ли это?

1 Ответ

3 голосов
/ 02 февраля 2010

Какой apache делает это системным вызовом setuid (в libc), который, как вы заметили, эффективно снижает привилегии процесса. Вы можете сделать вызов libc через JNI или JNA .

Это работает очень хорошо, даже для программ на Java, за исключением того, что после перехода от root к некорневому пользователю вы не сможете выполнять какие-либо операции, требующие повышенных привилегий. Таким образом, эту технику можно использовать только в том случае, если все привилегированные операции могут выполняться заранее, как это делает Apache.

Другая возможность состоит в том, чтобы разделить вашу программу на два процесса - при запуске ваша программа разветвляется на другую программу, которая запускается от имени пользователя root, а затем исходная программа преобразуется в некорневую. Два процесса могут связываться через их стандартный ввод / вывод.

...