Если я, sudo выполняют файл сценария Bash, будет, все команды в сценарии Bash выполняются как sudo также?

Можно изменить позиции табуляции в терминале с помощью терминальной базы данных, которая можно получить доступ к нескольким путям от C++ (например, ncurses). Можно также получить доступ к нему от использования оболочки tput.

Вы хотели бы запуститься путем очистки вкладок (tput tbc). Затем переместите курсор в каждый столбец, в котором Вы хотите позицию табуляции (tput hpa 10 для столбца 10, например). Затем наконец установите позицию табуляции (tput hts). Повторите расположение и установку позиции табуляции для каждой позиции табуляции, которую Вы хотите. Пример:

echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'
tput tbc
for ((i=0; i<`tput cols`; i+=10)); do
    tput hpa $i
    tput hts
done
tput hpa 0
echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'
30
10.07.2018, 10:57
3 ответа

Q#1: мне только предложат sudo пароль однажды, или я должен буду ввести sudo пароль на каждом вызове команды в сценарии, для которого нужно sudo разрешение?

Да, однажды, на время выполнения Вашего сценария.

Примечание: Когда Вы предоставляете учетные данные sudo, аутентификация обычно успешна в течение 5 минут в оболочке, где Вы ввели пароль. Дополнительно любые дочерние процессы, которые выполняются от этой оболочки, или любой сценарий, который работает в оболочке (Ваш случай), будут также работать на повышенном уровне.

Q#2: существует ли все еще возможность, что sudo полномочия испытают таймаут (если, например, конкретная команда займет много времени достаточно для превышения sudo тайм-аута)? Или будет начальная буква sudo вход пароля продолжается в полный период целого сценария?

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

выборка из sudo страницы справочника

Этот предел является определенным для политики; тайм-аут подсказки пароля по умолчанию для sudoers политики безопасности составляет 5 минут.

38
27.01.2020, 19:38
  • 1
    Ответ на Q1 "нет, Вам не предложат снова". –  dannysauer 16.02.2014, 19:42
  • 2
    @dannysauer - читает его Q снова. Я говорю Да тому, чтобы быть запрошенным пароля только однажды! –  slm♦ 17.02.2014, 00:35
  • 3
    Вопрос говорит, "это a или b", и просто высказывание "да" не прояснило, было ли это "да," или "да, b". Просто пытаясь разъяснить вещи для будущих читателей. :D –  dannysauer 17.02.2014, 05:02
  • 4
    @dannysauer - видит обновление. –  slm♦ 17.02.2014, 05:05
  • 5
    Этот новый вопрос был бы этим: stackoverflow.com/questions/3522341 / …. sudo -u $(logname) <command> должен работать. –  Gauthier 13.02.2015, 12:17

bash и все его дочерние процессы будут работать с полномочиями суперпользователя. Таким образом, Вы не должны будете повторно вводить пароль для команд в Вашем сценарии удара.

sudo тайм-аут только относится к (более позднему) отдельному вызову sudo. Это не влияло бы на Ваш уже рабочий процесс удара или любого из его потомков.

17
27.01.2020, 19:38

Эти ответы все, вероятно, корректны. Однако это не обычно используемый путь (насколько я знаю) создать сценарии удара, которые требуют sudo полномочия. Обычно наверху сценария Вы предполагаете, что он не был выполнен с sudo полномочия и вместо этого звонят sudo -v самостоятельно (который предложит пользователю их пароль) 'настраивать' a sudo 'сессия'. Вы можете также echo некоторый объяснительный текст перед подсказкой или переопределением sudoвладейте подсказкой с -p переключатель, чтобы позволить пользователю знать Вам нужно sudo доступ для некоторых команд.

Затем в Вашем сценарии необходимо быть в порядке для вызова sudo на командах, которые требуют его (и только те команды, которые требуют его) без дальнейших запросов пароля. Если Вы думаете определенная группа команд, которые работают вместе в Вашем сценарии (независимо от их собственного использования sudo) расширится вне sudo тайм-аута, можно звонить sudo -v в середине для издания своего рода 'активного' sudo 'сессия'.

Если sudo 'сессия', действительно оказывается, истекает во время сценария, пользователя просто попросят их пароля в следующий раз, когда Вы даете sudo команду в сценарии.

3
27.01.2020, 19:38
  • 1
    Скажите, что один из шагов сценария создает совершенно новое ядро Linux, которое может взять, говорят два часа. Поддержание сессии могло быть проблемой, как Вы будете иметь дело с этим? –  Gauthier 13.02.2015, 12:20
  • 2
    Вы не можете. Но в следующий раз Вы звоните sudo -v это попросит у пользователя их пароля снова. Не худшая проблема, по-моему. Возможно, быть полезным, делая пользователя, знающего о механизме, могло бы быть удобным. –  alexrussell 18.02.2015, 11:39
  • 3
    Инверсия этого должна потребовать, чтобы пользователь назвал сценарий с sudo на другие ответы, и затем sudo -u $SUDO_USER заставить все некорневые команды требования работать неподнятый. Печально это добавляет больше кода, но является единственным надежным способом выполнить корневые вещи в длительном процессе. –  dragon788 17.11.2017, 17:31
  • 4
    я предполагаю, что должен разъясниться, другой другой способ сделать, это должно было бы назвать sudo однажды в начале сценария для помещения временного файла в /etc/sudoers.d использование visudo -c -f /tmp/tempsudoers гарантировать файл допустимо прежде, чем скопировать его в место, и затем удалите тот файл, однажды сделанный (использование прерывания на выходе/ошибке, чтобы гарантировать, что эскалацией нельзя злоупотребить). Самая безопасная и надежная реализация только позволила бы Вашему пользователю выполнять определенные команды в Вашем сценарии с определенными аргументами без использования пароля NOPASSWD путем хранения каждой команды/аргументов в массив для создания файла. –  dragon788 22.11.2017, 18:51
  • 5
    Несколько поздно возвращаясь к @Gauthier сюда, но казалось бы, что я был неправ, когда я сказал, что Вы не можете сохранить a sudo сессия, живая, если данная единственная задача занимает больше времени, чем тайм-аут. Я столкнулся с этой техникой на днях в dotfiles Mathias Bynens repo: while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & - Примечание github.com/mathiasbynens/dotfiles/blob/master/.macos#L13 –  alexrussell 27.11.2017, 18:40

Теги

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