Como fazer sudo su automatico

Iniciado por koga021, 15 de Janeiro de 2009, 17:00

tópico anterior - próximo tópico

koga021

Boa tarde to com seguinte problema
tenho um scripot de backup que faz tudo certinho e nao pede senha de nada,
porem no final quero botar o computaodr para desligar

entaun logo no final botei
halt
shutdow
poweroff

e naun funcionava
e com isso rodei no shel
e la dava a menssagem que precisava ser root para desligar

fui la eu de whereis halt
e mudei a permiçao para 777 do halt, mas mesmo assim continua dando, vc precisa ser  root
para desligar o computador no final do script

queria ver se existe algo do tipo

senha='xyz'
sudo su << $senha
e executa o script e desliga.

tem como fazer isso?
script abaixo
Citar
#!/bin/bash

#arquivos para backup
arquivos='/home/elsa-rj/douglas2 /home/elsa-rj/ELSA'

#espaço em branco antes de $(date --i)
data="$(date --i)"


#destino e onde serao armazenado o tar.gz enquanto nao e enviado ao servidor
destino="/home/elsa-rj/douglas/$data"

#troca de valores
alvo=$destino

#entrando na pasta o qual sera o backup
cd /home/elsa-rj/douglas/
chmod 777 /home/elsa-rj/douglas/
mkdir $alvo
chmod 777 $alvo
tar -czvf $data.tar.gz $arquivos
chmod 777 $alvo.tar.gz

#########fim da compactaçao#################

#########Envio via FTP#######################
# Dados do arquivo de backup

###################ALTERAR AKI LOGIN,SENHA IP####################
# Dados do servidor FTP
HOST_FTP='157.86.41.211'
USUARIO_FTP='servidor'
SENHA_FTP='servidor'

# A partir daqui não precisa mais editar.
# put local de origem   nome no servidor
# Acessa o FTP e coloca os arquivos
ftp -in << EOF
open $HOST_FTP
user $USUARIO_FTP $SENHA_FTP
cd /servidor
put $alvo.tar.gz $data.tar.gz
bye
EOF
echo "apagando arquivo compactado"
rm $alvo.tar.gz
rmdir *
echo "Backup efetuado com sucesso"

#halt para desligar
halt

fpissarra

Olha só... não sei se há uma maneira ou não, mas acredito que isso é contra a filosofia do uso do sudo. O propósito é dar segurança ao sistema, pedindo a senha do sudoer para que hava uma intervenção humana em questões que podem causar problemas ao sistema.

Se "bypassarmos" este esquema, para que então existe o sudo?

[[]]s
Fred

krlsedu

Olá, como você executa este script, automaticamente, ou manual, se for manual tente executar com logue no terminal com sudo su, e depois execute o script.
Atenciosamente Carlos Eduardo!
A união faz o Ubuntu!!!

deisefontoura

Oi eu estou querendo a mesma coisa. Eu quero fazer autenticação do linux no php através de shell scripts,
mas como eu faço um shell script que rode automático (não vai existir a possibilidade de digitar a senha em linha de comando).
Esses arquivos vão ser gerados e apagados depois que o login for efetuado, mas preciso carregar a senha do usuário,
e que o shell script use isso sem que apareça o Password: pra digitar.
Deu pra entender?

dudu_ubuntun


Felix

Talvez isso possa ajudar também:

Citar
Em alguns casos há um usuário que tem acesso ao nosso servidor, mas não podemos/queremos/devemos dar acesso de root ao mesmo, porém ele necessita executar alguns comandos, uma alternativa a isso é instalar o comando sudo para auxiliá-lo, eu costumo seguir da seguinte forma:

1. Crio o usuário:

#add user usuario

2. Instalo o programa sudo:

#ap-get update && apt-get install sudo

    Descompactando sudo (de .../sudo_1.6.8p12-4_i386.deb) ...
    Instalando sudo (1.6.8p12-4) ...
    No /etc/sudoers found... creating one for you.

3. Edito o arquivo sudoers, criado após a instalação adicionando a linha referente ao usuário e aos comandos que ele poderá executar, mas que pedem nível de superusuário:

#vim /etc/sudoers

    usuario ALL=NOPASSWD: /usr/sbin/arp, /usr/sbin/arping

4. Para ajudar o usuário, edito o .bashrc dele para que ele não precise digitar o comando sudo nos comandos necessários, dessa forma:

#vim .bashrc

    alias arp='sudo arp'

    alias arping='sudo arping'

Pronto, mais uma receita simples e fácil e que é muito útil para mim no dia-a-dia

fonte

deisefontoura

Não era bem isso...
Eu quero que se use a senha do usuário. só não queria que spawnasse o "password:"
pois estraga o script automático para ser rodado via página web. Queria alguma maneira
de passar como argumento para um switch user a senha digitada pelo usuário na página.
Pesquisando sobre isso, achei que teria como fazer isso com expect:
ver a reply desse tópico
http://www.computing.net/answers/unix/trouble-whit-command-su-/7127.html

Mas ainda não era bem o que eu precisava. Então para fazer a autenticação
criei o seguinte script (desconsiderar os echos no meio do script, que são meros testes de funcionamento)

#abrindo o arquivo de senhas
$file = '/etc/shadow'; /*ou então /etc/passwd observe que o usuário do apache precisa ter permissão para ler esse arquivo*/
$open = fopen($file,r);

#Carrega o usuário e senha
$user = 'deise';/*aqui vai o post do usuário*/
$pass = 'deise';/*aqui também*/

#"Expressão" para encontrar o usuário

$regex_usu = $user;

#Expressão para encontrar a senha
$regex_pass = $user.'\:([^\:]*)\:';


if($open){
   $read = fread($open,8192);
   if($read)
   {
       #
      echo "leu o arquivo";
      echo "<br>";
      echo $read;
      echo "<br>";
      #
      ereg($regex_usu,$read,$result_usu);
      ereg($regex_pass,$read,$result_pass);
      #
      echo "usuario:";
      print_r($result_usu[0]);
      echo "<br>";
      #
      echo "Senha:";      
      print_r($result_pass[1]);
      echo "<br>";   
         
         if($result_usu[0] == $user)
         {
            echo "usuario correto";
            echo "<br>";            
            if (crypt($pass, $result_pass[1]) == $result_pass[1]) {
      
                echo "Senha correta";
               echo "<br>";
               echo "Autenticacao completa";
               echo "<br>";               
            }else
            {
               echo "Senha incorreta";
               echo "<br>";                     
            }
         }else
         {
            echo "Usuario incorreto";
            echo "<br>";            
         }
   }else
   {
      echo "Falhou ao ler o arquivo";
      echo "<br>";      
   }
}else{
echo "Falhou ao abrir o arquivo";
echo "<br>";
}

clcampos

Acho isso uma grande quebra de segurança, pois sua senha estará visível dentro da rotina, mas basta fazer igual ao exemplo abaixo:

#!/bin/bash
#
# Testando se consigo passar a senha direto para o sudo -s
#
# Cristiano
# 10/Fev/2009
#

senha="senha_do_usuário_administrador"  #coloque aqui  sua senha

clear
echo -e "\nTentando mostrar o conteúdo de \033[1m/etc/shadow\033[0m\n"
cat /etc/shadow
echo -e "\nObserve que não existe permissão\n"
read ESPERA

sudo -s <<!
passwd=$senha
echo -e "\nTentando mostrar o conteúdo de \033[1m/etc/shadow\033[0m\n.Tecle <\033[1mENTER\033[0m> para apresentar o conteúdo."
cat /etc/shadow
echo -e "\nObserve que agora mostrou\n"
!

Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

semideiapnick

Boa noite,

Este script acima não funcionou! Tenho testado por a senha em variaveis e carregar próximo ao sudo, mais todas as tentativas foram por água abaixo.


clcampos

Citação de: semideiapnick online 09 de Março de 2009, 22:01
Boa noite,

Este script acima não funcionou! Tenho testado por a senha em variaveis e carregar próximo ao sudo, mais todas as tentativas foram por água abaixo.



Qual?
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

jamilservicos

Pelo que percebi o unico problema que você quer resolver e depois do backup desligar a maquina automaticamente é isso?

se for a solução é simples!

basta adicionar o usuario no /etc/sudoers

username ALL=NOPASSWD: /sbin/shutdown

para desligar sem pedir a senha
ou

username ALL=NOPASSWD ALL

para nunca pedi a senha e ter todos os privilegios root
lembrando que no lugar de username é o login do usuario!

Jamilservicos.com