My Question is, is it possible to execute my above command in java without making any changes anywhere i.e. by having default settings?
sudo -u -S pwd
A resposta curta é não, você precisará alterar as configurações para fazer com que o sudo faça as coisas de maneira diferente da atual.
sudo pode ser a ferramenta errada para isso. As regras do Sudo estão lá para ajudar os administradores de sistemas a configurar uma maneira de obter privilégios elevados que são difíceis de abusar para obter privilégios adicionais / não intencionais.
Se você considerar o que o sudo faz por você:
- solicita senha para verificar a identidade
- elevar privilégios
- então, opcionalmente, obtenha privilégios como outro usuário
- registra o uso do sudo para obter acesso ou executar comandos
Se você quiser que seu java execute comandos arbitrários como usuários arbitrários sem fornecer senha para esses usuários ou para os seus próprios, você está essencialmente substituindo o sudo. Nesse caso, você deve criar suas próprias regras para evitar o abuso.
Existem basicamente duas maneiras de fazer isso:
- execute seu java com privilégios elevados e cuidadosamente obtenha e devolva os privilégios necessários (consulte as chamadas de função C setuid () seteuid ()).
- execute um programa externo para obter privilégios elevados quando desejar
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 abuso.
Existem outros programas além do sudo para fazer # 2. Um exemplo pode ser encontrado no link
Este prático script de shell cria um programa em C para executar outro comando (geralmente um script). Em seguida, você compila o programa em C para um binário e marca a raiz do setuid ou realmente pode ser setuid para qualquer usuário. (modo: 4555 e proprietário: root)
Contanto que você esteja em um sistema de arquivos que o permita, rodar o programa binário executará o comando configurado como o ID do usuário que possui o próprio programa binário.