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

У этого вопроса уже есть ответ здесь: Как я могу использовать команду в скрипте без запроса пароля? 5 ответов Как запустить команду 'sudo' внутри скрипта? 7 ответов

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

Очень простая версия с использованием псевдокода [ ! d10] 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, наверху. Но проблема в том, что мне придется подождать, пока не встретится первая строка «судо», чтобы ввести кодовую фразу.

-1
задан 7 October 2017 в 00:28

6 ответов

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
ответ дан 22 May 2018 в 17:47
  • 1
    Спасибо, очень ценен десерт. Спасибо, что нашли время, чтобы показать мне пример. Я проверяю "man" но слишком часто описания слишком загадочны, если предположить, что один из них - опытный пользователь Linux. Вы - тот, кто на самом деле отвечает на первоначально заданный вопрос, а не восхваляет эту тему. Освежающее изменение. – X10WannaBe 7 October 2017 в 16:39

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
ответ дан 18 July 2018 в 05:40

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
ответ дан 24 July 2018 в 18:23

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

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

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

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

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

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

2
ответ дан 22 May 2018 в 17:47
  • 1
    @dessert ха-ха, слишком много уценки. :) – muru 7 October 2017 в 00:46
  • 2
    Сарказм всегда является такой помощью. В отличие от комментариев выше, MY-версия Ubuntu DID создает папку Folders with Root. должен ли Sudo или не должны делать это спорный вопрос. – X10WannaBe 7 October 2017 в 16:42
  • 3
    @ X10WannaBe действительно сарказм - это помощь, когда вы отказываетесь предоставить реальный скрипт и как он был запущен, а вместо этого предоставляйте псевдокод. Может быть, лучше задавать вопросы в следующий раз? – muru 7 October 2017 в 20:36

Учитывая ваш текущий скрипт, нет, команда 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 эта оболочка может считать домашний каталог root.

2
ответ дан 18 July 2018 в 05:40

Учитывая ваш текущий скрипт, нет, команда 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
ответ дан 24 July 2018 в 18:23
  • 1
    @dessert ха-ха, слишком много уценки. :) – muru 7 October 2017 в 00:46
  • 2
    Сарказм всегда является такой помощью. В отличие от комментариев выше, MY-версия Ubuntu DID создает папку Folders with Root. должен ли Sudo или не должны делать это спорный вопрос. – X10WannaBe 7 October 2017 в 16:42
  • 3
    @ X10WannaBe действительно сарказм - это помощь, когда вы отказываетесь предоставить реальный скрипт и как он был запущен, а вместо этого предоставляйте псевдокод. Может быть, лучше задавать вопросы в следующий раз? – muru 7 October 2017 в 20:36

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

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