Requer que o script bash seja executado com sudo (não como usuário root)?

0

Eu quero exigir que um script bash seja executado como o usuário atual com sudo , mas evite que ele seja executado se ele for executado diretamente como usuário root. Isso ocorre porque estou fazendo algumas ações de configuração para o usuário atual que exigem permissões de root, mas dependem da variável de ambiente SUDO_USER que está sendo definida.

Isso é o que eu tenho no momento:

#!/usr/bin/env bash

# Require script to be run via sudo, but not as root

if [[ $EUID != 0 ]]; then
    echo "Script must be run with root privilages!"
    exit 1
elif [[ $EUID = $UID && "$SUDO_USER" = "" ]]; then
    echo "Script must be run as current user via 'sudo', not as the root user!"
    exit 1
fi

Isso é confiável como está? Estou um pouco inseguro sobre a verificação se EUID e UID correspondem, já que não sei se UID está sempre configurado corretamente. Seria simplesmente suficiente verificar se SUDO_USER está vazio?

    
por PseudoPsyche 17.02.2015 / 16:22

2 respostas

0

Na minha opinião, não seria suficiente, porque qualquer pessoa pode usar o sudo para outro usuário que não seja o root:

[my.username@some_hostname ~]$ echo "'$SUDO_USER':'$UID':'$EUID'"
'':'503':'503'
[my.username@some_hostname ~]$ sudo -i -u zenoss
[zenoss@some_hostname ~]$ echo "'$SUDO_USER':'$UID':'$EUID'"
'my.username':'1337':'1337'

(CentOS 6.5, GNU bash, versão 4.1.2 (1) -release (x86_64-redhat-linux-gnu))

Eu entendo sua opinião sobre o UID / EUID, mas provavelmente ficaria apenas com o $ UID. Infelizmente, mesmo as "informações básicas" não são muito detalhadas, mas uma fonte reverenciada diz :

$UID
    User ID number
    Current user's user identification number, as recorded in /etc/passwd
    This is the current user's real id, even if she has temporarily assumed another
    identity through su. $UID is a readonly variable, not subject to change from 
    the command line or within a script, and is the counterpart to the id builtin.

$EUID
    "effective" user ID number
    Identification number of whatever identity the current user has assumed, 
    perhaps by means of su.
    Caution 
        The $EUID is not necessarily the same as the $UID.
    
por 18.03.2015 / 11:42
-1
ID='id -u'
if [ $ID -ne 0 ]; then
   echo "This command must be run as root."
   exit 1
fi
    
por 29.11.2016 / 18:07