Java выполняет команды Linux, для которых требуется su?

Как лучше всего запускать команды Linux, требующие «su» с Java? Я хочу, чтобы он был очень надежным, а что касается безопасности, то меня это не волнует, система не является производственным сервером. Никто никогда не подключается к машине, кроме меня. Я подумал о том, чтобы войти в систему как root, чтобы мне не приходилось иметь дело с командой su, которая по умолчанию отключена. Я использую Дебиан 6.

Единственное, одно из моих требований состоит в том, что программа должна запускаться после того, как обычный пользователь войдет в систему без какого-либо дальнейшего ввода пользователя. Я бы установил автоматический вход в систему для обычного пользователя, и когда компьютер включен и после того, как обычный пользователь входит в систему, я бы хотел, чтобы эта программа Java запускалась как sudo, su без какого-либо пользовательского ввода. Возможно ли это?

Подскажите пожалуйста простое и надежное решение.

С Уважением


person Arya    schedule 21.06.2012    source источник
comment
Я думаю, вам следует немного улучшить этот вопрос: чего вы надеетесь достичь, делая это? Вы пытаетесь использовать su (что на самом деле просто переключение пользователя) для запуска от имени пользователя без полномочий root? Вы пытаетесь запускать команды от имени root и чего вы пытаетесь достичь в качестве конечной цели, используя root? Если вы ответите на эти вопросы, вам будет легче показать, что делать.   -  person hsanders    schedule 21.06.2012
comment
просто выбрасываю это для размышлений: интересно, могли бы вы просто использовать свой пароль в приложении при выполнении команд каким-либо образом - поскольку вы сказали, что это для вашего собственного использования   -  person user12345613    schedule 21.06.2012
comment
По моему мнению, если вы хотите, чтобы ваша Java-программа была надежной, не заставляйте ее полагаться на внешние программы.   -  person maksimov    schedule 21.06.2012
comment
Я бы поступил иначе. Прежде чем запускать программу, убедитесь, что тот, кто запускает программу, является пользователем root (и я думаю, что это может быть так, как обычно, но не уверен). т. е. при запуске сделать системный вызов и, если пользователь не root, выйти.   -  person Chris Dargis    schedule 21.06.2012
comment
@hsanders Я пытаюсь запускать команды как su или sudo из Java, такие как reboot, pon, poff и т. Д. ...   -  person Arya    schedule 21.06.2012
comment
@VanDarg есть ли способ запустить программу от имени пользователя root, когда я вхожу в систему как обычный пользователь?   -  person Arya    schedule 21.06.2012
comment
Да, в терминале команда sudo java -jar pathToJarFile. Это запросит у пользователя пароль. Чтобы запустить программу от имени пользователя root, вам нужно выполнить команду sudo.   -  person Chris Dargis    schedule 21.06.2012
comment
@VanDarg Понятно, единственное, что я требую, это чтобы программа запускалась после того, как обычный пользователь войдет в систему без какого-либо дополнительного ввода пользователя. Я бы установил автоматический вход в систему для обычного пользователя, и когда компьютер включен и после того, как обычный пользователь входит в систему, я бы хотел, чтобы эта программа Java запускалась как sudo, su без какого-либо пользовательского ввода. Возможно ли это?   -  person Arya    schedule 21.06.2012
comment
@Arya: Попробуйте запустить команду gksudo java -jar pathToJarFile при запуске. Это должно вызвать у пользователя диалоговое окно, которое запрашивает пароль root при запуске компьютера, если вы не возражаете.   -  person Chris Dargis    schedule 21.06.2012
comment
@ J-16 SDiZ, я думаю, есть правильный ответ. Когда вы выполняете одну конкретную команду, вам не нужно делать sudo su - root для выполнения этой команды, вы просто используете sudo. Настройте список команд в вашем файле sudoers с помощью visudo, настройте их для запуска без пароля в качестве пользователя, который будет запускать программу Java, и тогда программа Java сможет запускать эти команды.   -  person hsanders    schedule 21.06.2012
comment
@hsanders: Это, безусловно, один из способов, да. Я могу придумать несколько проблем с безопасностью, делая это таким образом. Я думаю, что лучше запросить у пользователя пароль.   -  person Chris Dargis    schedule 21.06.2012
comment
@VanDarg Вы можете ограничить то, что можно использовать через sudo, на самом деле это не большая проблема, потому что вы можете ограничить то, что он делает. Вероятно, намного хуже запускать всю Java-программу от имени пользователя root с помощью gksudo, чем запускать из нее несколько команд от имени пользователя root без пароля, поскольку любые уязвимости в JVM или во всем, что делает программа, автоматически становятся способом получить root права. компьютер, тогда как если он может просто запускать ограниченное подмножество команд в системе, это не так. Вы не всегда хотите, чтобы у конечного пользователя был пароль этой учетной записи пользователя, чтобы он мог ввести его, например, в библиотечном киоске.   -  person hsanders    schedule 21.06.2012
comment
@hsanders: я новичок в Linux. Я не знал, что можно поставить ограничение на то, что можно использовать через sudo. Другой ответ, очевидно, НАМНОГО лучше :)   -  person Chris Dargis    schedule 21.06.2012


Ответы (2)


Вместо этого используйте sudo. Его можно настроить так, чтобы определенные команды выполнялись без ввода пароля.

person J-16 SDiZ    schedule 21.06.2012

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

Если вы хотите запускать программы при запуске системы, вы можете написать сценарий bash для запуска команды gksudo java -jar path, когда пользователь входит в систему. Это предложит пользователю ввести пароль в диалоговом окне.

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

person Chris Dargis    schedule 21.06.2012