executa o script como root sem senha [closed]

1

Eu quero executar um script sem solicitar senha. Eu editei o arquivo / etc / sudoers e escrevi várias linhas atrás do último. Este é o meu arquivo:

#
Defaults    env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

jose ALL= NOPASSWD: /sbin/shutdown -h now
jose ALL= NOPASSWD: /sbin/shutdown -r now
jose ALL= NOPASSWD: /home/jose/sync.sh

O código de script (funciona bem com a senha) é:

#!/bin/bash 
#Filename: sync.sh

echo "Empezando sincronizar....."

ping -c 1 -t 1 172.18.2.100 > /dev/null 2> /dev/null # ping and discard output

if [ $? -eq 0 ]; then # check the exit code
echo "${ip} is up" # display the output
sudo mount -t smbfs //172.18.2.100/Downloads /home/jose/pc1
rsync -r -u -verbose /home/jose/pc1/movies/ /home/jose/Movies/
rsync -r -u -verbose /home/jose/pc1/series/ /home/jose/TV?Shows/
sudo umount /home/jose/pc1

# you could send this to a log file by using the >>pinglog.txt redirect
else
echo "${ip} is down"
fi

echo "Fin sincronizacion"

Eu posso desligar e reiniciar sem digitar a senha, mas quando tento executar a última linha, o prompt de script para a senha. Eu substituo o caminho do script por "ALL" e posso executar comandos raiz sem senha, mas não consigo executar o comando mount / umount e o script.

O usuário pertence ...

jose: jose adm dialout cdrom disquete audio video usuários plugdev lpadmin sambashare admin

Qualquer ajuda? Agradecemos antecipadamente.

    
por jibtga 13.06.2012 / 10:19

2 respostas

3

A correção

  1. Em /etc/sudoers , certifique-se de que a linha ainda esteja lá:

    jose ALL= NOPASSWD: /home/jose/sync.sh
    

    NÃO apague essa linha!

  2. Opcional : no seu script, remova o sudo s na frente de cada comando usando exapmle:

    sed -i 's/^\(\s*\)sudo\s*//g' /home/jose/sync.sh
    

    Isso não é necessário, mas prova um ponto. Você pode deixar os arquivos como estão, se quiser poder executá-los como usuário regular, sem sudo /home/jose/sync.sh e, em seguida, ser solicitada uma senha.

  3. Execute o seu script com:

    sudo /home/jose/sync.sh
    

    sudo não solicitará uma senha . É importante ter o sudo na frente de sua chamada para o script.

Também por motivos de segurança , execute os seguintes comandos no seu script:

sudo chown root:root /home/jose/sync.sh
sudo chmod o-rwx /home/jose/sync.sh

Dessa forma, ninguém pode editar seu script sem a senha de root. Isso é importante porque todo mundo que fica em seu computador como um método livre e sem senha para executar comandos como root.

O problema

O problema com a maneira como você fez isso é que você concedeu permissões para executar o script com privilégios de root, mas na verdade não o executa como root usando sudo .

A única coisa que você executa como root são os dois comandos que têm "sudo" na frente deles (que são, é claro, umount /home/jose/pc1 e mount -t smbfs //172.18.2.100/Downloads /home/jose/pc1 ). Mas esses dois comandos de montagem NÃO têm permissões de root (e não devem, apesar de pl1nk , descrever como você pode dar permissão de root sua resposta ), pois eles não estão listados em /etc/sudoers para ter NOPASSWD para o usuário jose .

    
por con-f-use 27.08.2012 / 12:32
2

Em / etc / sudoers ( use visudo para editar ) adicione:

jose ALL= NOPASSWD: /bin/mount
jose ALL= NOPASSWD: /bin/umount
    
por pl1nk 13.06.2012 / 10:34