2015-07-07 13 views
2

Я пишу программу Java, которая будет работать на серверах Linux. Программа должна запускаться как «root», выполнять определенную операцию (чтение файла), а затем переходить к пользователю без полномочий root после того, как файл был прочитан и закрыт.Как запустить Java-программу как root, но перейти на пользователя без полномочий root

Я прочитал следующие вопросы, но я не нашел жизнеспособного решения - тем более, что я не имею дело с портами HTTP.

https://askubuntu.com/questions/62713/how-to-downgrade-user-permissions-on-a-java-app-after-opening-port-80-443

https://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user

Running a part of a Java Program as Root

Любые идеи о том, как реализовать то, что я пытаюсь сделать?

РЕШЕННЫЙ:Как было предложено в ответ, JNA сделала трюк для меня.

+1

Я не уверен, как это сделать на Java, но в Unix это называется Bernstein Chaining или https://en.wikipedia.org/wiki/Chain_loading –

ответ

1

К сожалению, в чистой Java нет возможности сделать это.
Но вы можете использовать JNI или JNA для вызова системной функции setuid.
Например, вы можете повторно использовать пакет jetty-setuid для этого: JAR + Native library.

+0

Я согласен с тем, что единственный способ справиться с этим - это позвонить функция setuid system. Разве это не общая проблема? Обычно приложения, которые должны выполнять определенные «связанные с корнем» задачи, должны запускаться с правами root, но по соображениям безопасности они должны как можно скорее отказаться от пользователя без полномочий root. – BlueChips23

+0

Я раньше не знал о JNA. Я провел несколько тестов, и JNA отлично работает - именно то, что мне нужно. – BlueChips23

Смежные вопросы