Bom dia galera, eu queria atraves de uma aplicação java onde o usuario fara um cadastro informando login e senha que um usuario fosse criado no servidor linux a partir destes dados fornecidos pelo java, por exemplo ele ira abrir uma aplicacao java e nela tera um formulario onde ele ira preencher usuario :joao e senha: 1234 (exemplo) ae quando clicar no botao cadastrar um usuario joao com a senha 1234 sera criado no servidor linux e permissao geral sera dada a pasta deste usuario, eu li sobre script bash mas nao sei se ira funcionar devido ao comando adduser so serem executados como root, alguem sabe como fazer isso??
Ta ai uma coisa que eu tbm queria saber como fazer, alguém!!!
Você precisaria criar um comando com setuid para que ele, ao ser chamado, fosse executado automaticamente como root.
Você quer fazer isso com Java ou com Shell Script ? Sua pergunta ficou bastante confusa. (Vale ressaltar que com shell script o trabalho seria bem menor).
entao é q a ideia seria executar o shell script pelo java, só q nao tenho ideia de como montar um shell para criar o usuario e dar as devidas permissoes e nem de como executar ele pelo java, e nem sei se isso é possivel uhauah. teria que acontecer da seguinte forma, o usuario entrario com os daods no java a partir destes dados o shell seria montado e executado pelo java.
Você pode fazer o seguinte: verificar se quem está executando o Shell Script é o root i[/i], se não for, você exibe uma mensagem de erro.
entao mas nao é obrigatorio o root executar, é q pelo pouco q entendo de linux o comando adduser so pode ser executado pelo root, o problema é q nao sei como fornecer a senha do root atraves do java, nao quero que o usuario veja o que esta acontecendo, ele apenas ira digitar usuario e senha e o java se encarrega de criar todo o necessario no servidor linux.
Então, meu caro. Mas seria muito melhor você fazer desta forma:
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo
echo "Voce deve executar este script como root! "
else
echo "Voce e root!"
adduser ...
fi
você pode manter dentro do java a senha do root (por exemplo, em um arquivo de configuração), e a partir disso, rodar os comandos através de (não sei se funciona, mas vale testar a ideia):
Process p = Runtime.getRuntime().exec("su comando");
Process p = Runtime.getRuntime().exec(senhaRoot);
OutputStream os = p.getOutputStream();
Ou, você pode garantir que seu server seja sempre rodado como root, como o juniorlinux e entanglement falou.
Mas, garanta que vai verificar os comandos para que não consigam injetar código dentro dele.
obrigado, mas como o java ira verificar se é root? bom pensando pelo lado do linux eu abriria o terminal e digitaria “sudo adduser joao” ae ele pediria a senha de root e apos eu fornecela ele pediria mais algumas informacoes do usuario que estou inserindo e uma confirmação dos dados e pronto o usuario estaria criado. porem no java como eu automatizaria isso? tem como no comando sudo eu ja enviar a senha sem que ela precise ser solicitada ao usuario?
Como não tenho aqui senha de root, tenho de chutar um pouco (não tenho como testar).
a) Crie um script com o que você quer fazer. Digamos que o nome do script seja “blabla.sh”
O script mais simples que consigo imaginar que dá para mostrar que o usuário que o está executando não é o seu próprio, e sim root, é:
echo $USER
b) Usando o sudo, mude o proprietário desse arquivo para root e o grupo para seu próprio grupo. Supondo que seu usuário pertença a “seugrupo”:
sudo chown root blabla.sh
sudo chgrp seugrupo blabla.sh
c) Usando o sudo, mude a permissão desse arquivo para SUID
sudo chmod 6555 blabla.sh
Para checar se o chmod funcionou, veja se a listagem dele (com ls -la blabla.sh) é parecida com:
-r-sr-sr-x 1 root seugrupo 11 Nov 16 11:18 blabla.sh
onde “r-s” indica que o setuid foi feito corretamente.
d) Teste para ver se ele usa as permissões corretas.
./blabla.sh
a entendi, bom vou tentar explicar exatamente o q estou fazendo para caso vcs tenham alguma ideia melhor possam me ajudar:
tenho uma maquina com linux Ubuntu 10.04 desktop que rodara uma aplicacao java que ira se conectar atraves de SSH a um servidor linux ubuntu 10.04(server) e a partir desta conexao o java ira criar no servidor um usuario aonde este usuario tera uma pasta e irei usar o rsync para sincronizar arquivos do ubuntu desktop para o ubuntu server dentro das pasta criada para aquele usuario só que o usuario nao devera se preocupar com codigos nem arquivos bash nem nada, ele so ira fornecer ao java seus dados de login e qual pasta ele quer sincronizar o resto fica por conta da programação. (caso nao tenha ficado claro podem perguntar).
bom galera irei testar quando chegar em casa pois é la que estou configurando e desenvolvendo, enquanto isso quem quiser ir deixando mais ideias serao muito bem aceitas. obrigado a todos que estao me ajudando.