Criar usuario e dar permissoes no linux atraves do java

12 respostas
R

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??

12 Respostas

D

Ta ai uma coisa que eu tbm queria saber como fazer, alguém!!!

E

Você precisaria criar um comando com setuid para que ele, ao ser chamado, fosse executado automaticamente como root.

A

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).

R

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.

A

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.

R

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.

A

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

E

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.

R

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?

E

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

R

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).

R

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.

Criado 16 de novembro de 2010
Ultima resposta 16 de nov. de 2010
Respostas 12
Participantes 5