Я хочу, чтобы скрипт bash запускался как текущий пользователь с sudo , но не позволяю ему запускаться, если он выполнялся как пользователь root напрямую. Это связано с тем, что я выполняю некоторые действия по настройке текущего пользователя, которым требуются права доступа root, но которые зависят от устанавливаемой переменной среды SUDO_USER .

Вот что у меня на данный момент:

#!/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

Это надежно, как оно есть? Я немного не уверен в том, что я проверяю, совпадают ли EUID и UID , так как я не знаю, всегда ли UID надежно установлен правильно. Достаточно ли просто проверить, пуст ли SUDO_USER ?

2 ответа2

0

На мой взгляд, этого будет недостаточно, потому что любой может использовать sudo для пользователя, кроме 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, версия 4.1.2(1)-релиз (x86_64-redhat-linux-gnu))

Я понимаю ваше мнение о UID/EUID, но я, вероятно, придерживаюсь только $ UID. К сожалению, даже «информация о bash» не слишком многословна, но один уважаемый источник говорит:

$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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .