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


0

Desejo exigir que um script bash seja executado como o usuário atual sudo, mas evito que ele seja executado se ele foi executado diretamente como usuário raiz. Isso ocorre porque estou executando algumas ações de configuração para o usuário atual que exigem permissões de root, mas dependem da SUDO_USERvariável de ambiente que está sendo definida.

Isto é 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 quanto à verificação de se EUIDe UIDcorrespondência, pois não sei se UIDsempre é definido corretamente de maneira confiável. Seria simplesmente o suficiente para verificar se SUDO_USERestá vazio?

Respostas:


0

Na minha opinião, não seria suficiente, porque qualquer um pode usar o sudo para outro usuário que não seja 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))

Entendo sua opinião sobre o UID / EUID, mas provavelmente me ateria apenas a $ UID. Infelizmente, mesmo 'bash info' não é especialmente detalhado, 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.

-1
ID=`id -u`
if [ $ID -ne 0 ]; then
   echo "This command must be run as root."
   exit 1
fi

Bem-vindo ao superusuário. Você parece estar errado. Por favor, leia a pergunta cuidadosamente novamente. É sobre "eu sou a raiz" versus "eu não sou realmente a raiz, apenas usando sudo". Seu código não pode diferenciá-lo.
Kamil Maciorowski
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.