Я не согласен с частью другого ответа: создание портов с помощью iself категорически не всегда вызывает sudo ( или doas) и должны выполняться обычным (выделенным) пользователем. Только некоторые из целей make, например те, которые устанавливают или удаляют порты, например make install
, будут вызывать программу SUDO
, если она была указана в /etc/mk.conf
или в среде. Причина упоминания этого параметра в руководстве - для массовых сборок с dpb (1).
Причина, по которой эта строка существует, является обратной совместимостью с файлом OpenBSD по умолчанию sudoers
, как упоминается в сообщении фиксации :
CVSROOT: /cvs
Module name: src
Changes by: reyk@cvs.openbsd.org 2015/08/28 07:19:50
Modified files:
usr.bin/doas : doas.conf.5
Log message:
Document an example that lets root run unrestricted doas commands as
root ("permit nopass keepenv root as root"), matching the old
behaviour from OpenBSD's sudoers file ("root ALL=(ALL) SETENV: ALL").
OK sthen@
Почему это полезно? Представьте себе сценарий, который выполняет некоторые действия, требующие привилегий root, примерно так:
#!/bin/sh
cmd1
doas cmd2
cmd3
Вы можете успешно запустить этот сценарий только как пользователь, имеющий разрешение на использование doas.По умолчанию ни один пользователь - даже не root - не имеет права использовать doas; вы должны явно указать это, добавив правила в /etc/doas.conf
.
Без строки разрешить root как root
приведенный выше сценарий завершится ошибкой, если вы запустите это как root, что, наверное, удивительно и неудобно.
Теперь переходит к той части, где я согласен с другим ответом: как упоминалось выше, скрипты сборки по умолчанию в OpenBSD имеют переменную SUDO
, которую вы можете установить на sudo
или ] doas
для повышения привилегий. Если какая-либо команда выполняется под $ SUDO
, вы хотите сохранить переменные среды, такие как префиксы каталогов и другие вещи, необходимые системе сборки для правильной работы.
Еще одна вещь: обратите внимание, что только первый большой пример в цитируемом отрывке из руководства предназначен для создания портов. Прочтите цитируемый текст в виде маркированного списка с четырьмя независимыми элементами:
Следующий пример
- разрешает пользователям в группе wsrc создавать порты;
- wheel выполнять команды от имени любого пользователя, сохраняя при этом переменные среды PS1 и SSH_AUTH_SOCK и отключение ENV;
- позволяет tedu запускать procmap от имени пользователя root без пароля;
- дополнительно разрешает пользователю root запускать неограниченные команды от своего имени.
Очевидно, что пример с procmap не имеет ничего общего со сборкой портов, а второй пример - это обычная вещь, когда членам группы wheel разрешено повышать привилегии до root (например, через su, sudo или doas).
Зачем вам это нужно? Ну, некоторые скрипты или make-файлы содержат переменную SUDO.По умолчанию ни один пользователь не имеет права использовать doas. Вы должны явно согласиться, добавив правила в /etc/doas.conf
.
send
- для отправки строк процессу expect
- ожидание определенной строки от процесса spawn
- для запуска команды Вы должны закрыть все команда, которая запускает запуск, иначе она будет читать ее как строку.
Ваш ожидаемый сценарий должен выглядеть следующим образом с использованием EOF:
#!/usr/bin/expect -f
spawn ssh 10.10.80.1
expect EOF
Проблема в том, что expect
запускает вашу команду spawn, которая запускает apt-get
, затем expect
доходит до конца скрипта и поэтому останавливается, а apt-get
уничтожается сигналом SIGHUP.
По крайней мере, вы должны добавить еще одну строку
expect eof
в свой сценарий, чтобы ожидал
чтения от порожденной команды до тех пор, пока она не получит конец файла.