Logar como root dentro de um script com zenity [RESOLVIDO]

1. Logar como root dentro de um script com zenity [RESOLVIDO]

Josivan
van.jp01

(usa KUbuntu)

Enviado em 22/04/2011 - 18:20h

Um exercício da cadeira de Administração de Sistemas do curso superior de tecnologia em redes de computadores pede pra criar um script pra adcionar e remover usuários com o zenity. Até aí tudo bem, fiz sem problemas. Coloquei um teste para verificar se o script está sendo executado como root. Se não estiver é exibida uma caixa de diálogo de erro e, em seguida, uma caixa de entrada de texto para pegar a senha de root. Armazeno a senha numa variável e blz, agora como fazer pra logar como root?


  


2. Re: Logar como root dentro de um script com zenity [RESOLVIDO]

Guilherme Domingues de Oliveira
korvoman

(usa Debian)

Enviado em 22/04/2011 - 18:49h

Sugiro a aplicação do sudo para aplicativos de admin para este usuário "zenith".

Para rodar algum aplicativo por outro usuário dentro de um script, pode-se colocar su -c usuario comando


3. Re: Logar como root dentro de um script com zenity [RESOLVIDO]

Josivan
van.jp01

(usa KUbuntu)

Enviado em 22/04/2011 - 19:01h

zenity é um aplicativo pra por interface gráfica em shell script.

Eis o início do meu script:


#! /bin/bash
# Script para adcionar e remover usuários
# Por Josivan Barbosa

#Verifica se o usuário é root
if [ "`id -u`" != "0" ] ; then
zenity --error --text="Precisa ser root!"
senha=`zenity --entry --title="Permissão de root." \
--text="Digite a senha de root:" \
--hide-text`

# Agora é a dúvida: Como logar como root dentro do script?


4. Rodando comandos com privilégios em shell scripts

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 22/04/2011 - 19:14h

Oi Josivan,

Você só precisa rodar alguns comandos com privilégios, use a opção -S do sudo:

$ echo ${senha} | (sudo -S seu_comando)

Abraço!


5. sudo -S

Josivan
van.jp01

(usa KUbuntu)

Enviado em 22/04/2011 - 20:02h

Olá Júlio,

Testei aqui e percebi que sudo -S pede a senha de quem executou script (no Debian). Se foi usuário comum dá no mesmo.

Mesmo assim obrigado.

Descobri a opção de usar o gksu, mas só funcionaria no gnome.

Pretendo fazer isso tambem num script de configuração de rede (incluindo wireless) com o zenity.


6. Para rodar um comando como root

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 22/04/2011 - 20:35h

Josivan,

Talvez a opção que você esteja procurando seja a -c do comando su:

$ su -c comando

Ao que parece ela não aceita a senha via entrada padrão, então você terá que digitá-la no meio da execução do script.

Abraço!


7. Re: Logar como root dentro de um script com zenity [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/04/2011 - 00:08h

eu ja tentei isso diversas vezes

use o sudo, ou o su -c

da uma olhada nesse topico

http://www.vivaolinux.com.br/topico/Shell-Script/logar-como-root-dentro-de-um-script/

mas se for usar o sudo, o sudo tem que estar configurado, logico, algumas distribuições ja vem permitindo tudo pelo sudo

e se for usar o "su -c" terá que colocar a senha em modo texto

o comando su não aceita senha se não for digitada diretamente

ex:
ele recusa isso

$ su -c "./script.sh" <<EOF
echo senha
EOF



8. Re: Logar como root dentro de um script com zenity [RESOLVIDO]

Josivan
van.jp01

(usa KUbuntu)

Enviado em 23/04/2011 - 13:42h

Obrigado por terem respondido. Encontrei a solução usando gksu que é o su do ambiente gráfico.

Ficou assim:

#! /bin/bash

#Verifica se o usuário é root
if [ "`id -u`" != "0" ] ; then
gksu $0
exit
fi

# resto do script...

Caso o usuário não seja root, entra no if e chama o gksu onde pedirá a senha de root e executará o script novamente. A variável $0 se refere ao script, então, ele pode ser renomeado que nao vai ter problemas.





9. Não sabia que era isso que você queria

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 23/04/2011 - 15:23h

Josival,

Talvez a pergunta do tópico não tenha ficado muito clara. Eu estava pensando em uma coisa mais complicada, acho que o Douglas também.

Que bom que resolveu o seu problema. :-)

Abraço!


10. Re: Logar como root dentro de um script com zenity [RESOLVIDO]

Josivan
van.jp01

(usa KUbuntu)

Enviado em 23/04/2011 - 16:11h

Era simples mesmo. Foi só um exercício que o meu professor passou pra conhecer os aplicativos de interface gráfica com shell. Tenho um de rede pra entregar em 15 dias que falta fazer a parte de rede sem fio e por interface gráfica. Aqui o script pra adcionar e remover usuários completo:




#! /bin/bash
# Administração de Sistemas - CST Redes de Computadores - IFPB
# Script para adcionar e remover usuários
# Por Josivan Barbosa
#ivan_jp01@hotmail.com

#Verifica se o usuário é root
if [ "`id -u`" != "0" ] ; then
gksu $0
exit
fi

Menu () {
opcao=$(zenity --list --column "Gerência de usuários." \
--title="Gerência de usuários." \
"Adcionar usuário." \
"Remover usuário." )

case ${opcao} in
"Adcionar usuário.")Adcionar ;;
"Remover usuário.")Remover ;;
esac
}

Adcionar () {
usuario=`zenity --entry \
--title="Adicionar usuário" \
--text="Digite o nome do usuário:"`
if [ $? -eq 1 ] ; then # Volta ao menu principal se o usuário clicar em "Cancelar"
Menu

elif [ -z $usuario ] ; then # Verifica se foi digitado um nome para o usuário.
zenity --error --text="Informe um nome para o usuário!"
Adcionar

elif ! [ -z `grep -w $usuario /etc/passwd` ] ; then # Verifica se o usuário ja existe.
zenity --error --text="Usuário já existe!"
Adcionar

else
while true ; do # Campo para cadastro da senha
senha=`zenity --entry \
--title="Adcionar usuário." \
--text="Digite a senha:" \
--hide-text`
if [ $? -eq 1 ] ; then # Volta ao menu principal se o usuário clicar em "cancelar".
break

elif [ -z $senha ] ; then # Verifica se foi digitado uma senha.
zenity --error --text="Informe uma senha!"

else
useradd -m $usuario # Adciona o novo usuário
echo $usuario:$senha | chpasswd
zenity --info --text="Usuário '$usuario' adcionado com sucesso!"
break

fi
done

Menu

fi
}

Remover () {
usuario=`zenity --entry \
--title="Remover usuário." \
--text="Digite o nome do usuário:"`

if [ $? -eq 1 ] ; then # Volta ao menu principal se o usuário clicar em "cancelar".
Menu

elif [ -z $usuario ] ; then # Verifica se foi informado um usuário.
zenity --error --text="Informe o nome do usuário!"
Remover

elif [ -z `grep -w $usuario /etc/passwd` ] ; then # Verifica se o usuário existe.
zenity --error --text="Usuário não existe!"
Remover

elif zenity --question \
--text="Deseja remover o diretório home do usuário '$usuario'"?""
then
userdel -r $usuario # Remove o usuário e seu diretório home.
zenity --info --text="Usuário '$usuario' removido com sucesso!"
Menu

else
userdel $usuario # Remove o usuário e mantém seu diretório home.
zenity --info --text="Usuário '$usuario' removido com sucesso!"
Menu

fi
}
Menu







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts