Приостановить SUDO в сценарии Bash? [дубликат]

У меня есть сценарий bash, который использует команды sudo, но в середине мне нужно остановить sudo-impact, а затем восстановить его.

Очень простая версия с использованием псевдокода

sudo apt-get install -y synaptic
sudo ...
// I need to suspend sudo here, otherwise the folder 
// is created with root as the owner.
mkdir ~/mystuff
// then reinstate it here
sudo apt-get install -y ssllib

Запрашивает ли sudo парольную фразу, как только запускает сценарий bash, или - спрашивает только тогда, когда встречает первую строку «sudo»?

Если да, тогда я думаю, что смогу переместить все вещи, не относящиеся к sudo, наверх. Но проблема в том, что мне придется подождать, пока не встретится первая строка «sudo», чтобы затем ввести кодовую фразу.

-1
задан 6 October 2017 в 14:28

2 ответа

sudo предложения опция -u для этого, см. man sudo :

-u user, --user=user
 Run the command as a user other than the default target user (usually root).
 The user may be either a user name or a numeric user ID(UID) prefixed
 with the ‘#’ character (e.g.  #0 for UID 0).  When running commands as a UID,
 many shells require that the ‘#’ beescaped with a backslash (‘\’).
 Some security policies may restrict UIDs to those listed in the password
 database. The sudoers policyallows UIDs that are not in the password database
 as long as the targetpw option is not set. Other security policies may
 not support  this.

Для Вашего примера это было бы:

sudo -u USERNAME mkdir /home/USERNAME/mystuff
2
ответ дан 2 November 2019 в 03:56

Учитывая Ваш текущий сценарий, нет, эти mkdir команда не будет выполнена с sudo. sudo волшебно не начинает влиять на команды, которые это не запускает. И при этом это волшебно не просит пароль, прежде чем это будет когда-либо выполняться.

то, Что могло бы происходить, - то, что Вы, возможно, запустили свой весь скрипт с sudo. Если это так, затем можно проверить, просит ли это правда, и любой, чтобы пользователь выполнил его без sudo:

if [ -n "$SUDO_COMMAND" ]
then
    echo "Please don't run this script with sudo."
    exit
fi

Или, переключитесь на фактического пользователя для этих команд:

if [ -n "$SUDO_USER" ]
then
    sudo -iu "$SUDO_USER" sh -c 'mkdir ~/mystuff'
fi

Вам, возможно, понадобилось бы sh -c, потому что ~ расширен оболочкой, запускающей скрипт, и в зависимости от sudo настройки, та оболочка могла бы думать, что корневой каталог является корнем.

2
ответ дан 2 November 2019 в 03:56

Другие вопросы по тегам:

Похожие вопросы: