Eu já fiz essa pergunta no Stack Overflow , mas fui solicitado a publicá-la aqui. Então, fazendo o mesmo.
Eu executei este comando usando meu programa java
sudo -u <username> -S pwd
Eu tenho essa saída
command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
Eu tentei editar o / etc / sudoers, mas ele já contém
<username> ALL=(ALL) NOPASSWD: ALL
Aprendi então que isso pode ser feito comentando o seguinte código em / etc / sudoers
# Defaults requiretty
Além disso, por padrão, ao tentar executar um comando como outro usuário sudo
, precisamos fornecer nossa própria senha. Mas isso pode ser alterado fazendo a seguinte alteração em / etc / sudoers-
Defaults targetpw
Minha pergunta é: é possível executar o comando acima em java sem fazer alterações em nenhum lugar, ou seja, com as configurações padrão ?
requiretty
estiver ativada por padrão. De acordo comsudo
a própria documentação , é "desativado por padrão".Respostas:
Eu não sei como executar comandos shell em Java, mas dê uma olhada na opção -t para o comando ssh
É o que faço quando preciso executar o comando como root over ssh (desabilitação direta do login root e tty exigido pelo sudo)
fonte
A resposta curta é não, você precisará alterar as configurações para que o sudo faça as coisas de maneira diferente do que atualmente.
sudo pode ser a ferramenta errada para isso. As regras do Sudo existem para ajudar os administradores de sistema a configurar uma maneira de obter privilégios elevados, difíceis de abusar, para obter privilégios adicionais / não desejados.
Se você considerar o que o sudo faz por você:
Se você deseja que seu java execute comandos arbitrários como usuários arbitrários sem fornecer senha para esses usuários ou para você, você está basicamente substituindo o sudo. Nesse caso, você deve criar suas próprias regras sobre como evitar abusos.
Existem basicamente duas maneiras de fazer isso:
No caso de # 1, seu programa java está executando o que o sudo faz, e você deve implementar seu próprio conjunto de regras para proteger contra abusos.
Existem outros programas além do sudo para fazer o 2. Um exemplo pode ser encontrado em https://code.google.com/archive/p/exec-wrapper/downloads
Esse prático script de shell cria um programa C para executar outro comando (geralmente um script). Em seguida, você compila o programa C em um binário e marca essa raiz setuid ou realmente pode ser setuid para qualquer usuário. (modo: 4555 e proprietário: root)
Enquanto você estiver em um sistema de arquivos que permita, a execução do programa binário executará o comando configurado como o ID do usuário que possui o próprio programa binário.
fonte