Postagem em destaque

Verificando se script foi executado como root

O desenvolvimento de scripts é útil quando precisamos realizar tarefas rotineiras ou até mesmo configurações especificas. Mas temos que ficar atentos quando estamos criando scripts que necessitam de privilégios administrativos para realizar as modificações necessárias no sistema; para evitar problemas precisamos garantir que o script só execute pelo usuário root; claro que isso não iria impedir de alguém alterar o código para executar como um usuário comum, mas o ponto em questão é garantir a integridade de execução, evitando que procedimentos posteriores sejam executados mesmo que os anteriores venham a falhar por falta de privilégio.

Para criar essa verificação precisamos inserir uma condição no inicio do script, antes de qualquer instrução. A maneira mais comum de realizar essa verificação é através de variáveis de ambiente.

A variável de ambiente armazena informações do sistema, caminhos de diretórios específicos do sistema de arquivos e as preferências do usuário.

Variáveis que podemos utilizar:


UID ID de identificação do usuário.
LOGNAME Nome do login do usuário.
USERConta do usuário.

Vamos iniciar o nosso script utilizando a minha variável favorita 'UID'.

O 'UID' contém um número único que identifica cada usuário no sistema, onde o 'UID' do usuário root, sempre será '0'.

Então, o que precisamos é inserir uma simples comparação no inicio do nosso script.

Exemplo:


#!/bin/bash

# Verificando o UID do usuário que executou o script
if [ $UID -ne 0 ]; then
    # Se for diferente de 0, imprime mensagem de erro.
    echo "Requer privilégio de root."

    # Finaliza o script

    exit 1
fi

# Continua a execução dos comandos
echo "Executando comandos..."

Se tentarmos executar como usuário comum.


$ ./script
Requer privilégio de root.

A mensagem de erro foi retornada e a execução do script finalizada.

Agora, executando o script com 'sudo' e digitando a senha do usuário.
Observação: A conta de usuário deverá estar cadastrada no arquivo /etc/sudoers para usar o comando 'sudo'.


$ sudo ./script
[sudo] senha para shaman:
Executando comandos...

Foi verificado que o usuário que executou o script é root ou possui privilégios para executar como tal; então a execução segue o seu curso.

Utilizando a variável 'LOGNAME'.


#!/bin/bash

# Verificando o login do usuário
if [ $LOGNAME != "root" ]; then
    # Se for diferente de root, imprime a mensagem de erro
    echo "Requer privilégio root."

    # Finaliza o script
    exit 1
fi

# Continua a execução dos comandos
echo "Executando comandos..."

Tentando executar como usuário normal.

$ ./script
Requer privilégio de root.

Vou executar como root, porém sem utilizar o comando 'sudo'; logando diretamente como root e executar o script depois.


$ su
Senha:

root$ ./script
Executando comandos...

Isso mostra que usando tanto o comando 'sudo' ou executando diretamente como 'root' a verificação funciona.

Provavelmente vocês reparam que em ambos os 'if', não coloquei as variáveis entre (") aspas duplas e que é altamente recomendado o uso delas; mas neste caso em especifico não haveria problemas, porque não existe a chance do usuário que esteja executando o script ter um login ou UID nulo; fora isso (") aspas sempre.

Comentários

Contato

Nome

E-mail *

Mensagem *