написав сценарий bash, который использует sudo [duplicate]

В этом вопросе уже есть ответ: Как запустить команду «sudo» внутри скрипта? 7 ответов

Я уверен, что это очень простой вопрос, но я боюсь, что мне не удалось заставить его работать или понять, что происходит.

У меня есть проект узла, который я обычно запускаю с

sudo npm start

, и я пытаюсь создать сценарий bash, который запустит это для меня.

Я пробовал несколько вариантов:

su myname -c "npm run start" sudo su myname -c "npm run start" su myname -c "sudo npm start"

, но все они, похоже, выполняют команду без прав суперпользователя. Из исследования, которое я сделал, кажется, что

sudo su myname -c "npm run start"

является правильным, но он не работает (он работает, но без разрешений). Может ли кто-нибудь указать мне в правильном направлении?

0
задан 28 December 2017 в 22:18

3 ответа

Не используйте обычный скрипт sudo в сценариях, запускайте весь скрипт с правами root и используйте sudo -u YOURUSERNAME для выполнения команд без прав root, если это действительно необходимо.

Напишите сценарий, подобный этому :

#!/bin/bash
npm start

Сохраните его, сделайте его исполняемым с chmod +x /path/to/script и запустите его с правами root с помощью:

sudo /path/to/script    # from a terminal
gksudo /path/to/script  # without terminal (e.g. for a starter)
kdesudo /path/to/script # without terminal, KDE equivalent

Это все, что нужно.

Вы можете добавить дополнительные команды к скрипту, вы можете, например, проверить, запущен ли он с правами root и выйти из него (благодаря PerlDuck):

[[ $EUID -ne 0 ]] && echo "This script must be run as root." && exit 1
1
ответ дан 22 May 2018 в 15:53
  • 1
    Это запустит весь скрипт как root. Не уверен, предназначено ли это OP (в случае, если оно содержит больше команд, чем только npm start). Другой способ - запустить скрипт как myname и поместить sudo npm start в скрипт. Мы не знаем. – PerlDuck 28 December 2017 в 22:29
  • 2
    Я часто добавляю код, подобный if [ 0 != $(id -u) ]; then echo "this script must be run as root"; exit 1; fi, или что-то похожее на скрипты, когда его решающий, кто ими управляет. – PerlDuck 28 December 2017 в 22:36
  • 3
    @PerlDuck Спасибо, я сделал некоторые изменения. Даже если только одна команда нуждается в корневых разрешениях, весь скрипт должен быть запущен как root IMO. – dessert 28 December 2017 в 22:54
  • 4
    Пожалуйста. Это персональная привычка, потому что у меня часто есть сценарии, которые должны или не должны запускаться как root (или какой-либо другой выделенный пользователь), и они часто показывают странное поведение, когда его запускает кто-то другой , – PerlDuck 28 December 2017 в 23:08
  • 5
    Re "Даже если только одна команда требует прав root ... " : Я решаю это в каждом случае. Иногда я добавляю запись в /etc/sudoers для специальной команды и запускаю скрипт как myname. Думаю, это зависит от меня. – PerlDuck 28 December 2017 в 23:11

Не используйте обычный скрипт sudo в сценариях, запускайте весь скрипт с правами root и используйте sudo -u YOURUSERNAME для выполнения команд без прав root, если это действительно необходимо.

Напишите сценарий, подобный этому :

#!/bin/bash npm start

Сохраните его, сделайте его исполняемым с chmod +x /path/to/script и запустите его с правами root с помощью:

sudo /path/to/script # from a terminal gksudo /path/to/script # without terminal (e.g. for a starter) kdesudo /path/to/script # without terminal, KDE equivalent

Это все, что нужно.

Вы можете добавить дополнительные команды к скрипту, вы можете, например, проверить, запущен ли он с правами root и выйти из него (благодаря PerlDuck):

[[ $EUID -ne 0 ]] && echo "This script must be run as root." && exit 1
1
ответ дан 18 July 2018 в 00:17

Не используйте обычный скрипт sudo в сценариях, запускайте весь скрипт с правами root и используйте sudo -u YOURUSERNAME для выполнения команд без прав root, если это действительно необходимо.

Напишите сценарий, подобный этому :

#!/bin/bash npm start

Сохраните его, сделайте его исполняемым с chmod +x /path/to/script и запустите его с правами root с помощью:

sudo /path/to/script # from a terminal gksudo /path/to/script # without terminal (e.g. for a starter) kdesudo /path/to/script # without terminal, KDE equivalent

Это все, что нужно.

Вы можете добавить дополнительные команды к скрипту, вы можете, например, проверить, запущен ли он с правами root и выйти из него (благодаря PerlDuck):

[[ $EUID -ne 0 ]] && echo "This script must be run as root." && exit 1
1
ответ дан 24 July 2018 в 17:11

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

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