Можно изменить позиции табуляции в терминале с помощью терминальной базы данных, которая можно получить доступ к нескольким путям от 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'
Q#1: мне только предложат sudo пароль однажды, или я должен буду ввести sudo пароль на каждом вызове команды в сценарии, для которого нужно sudo разрешение?
Да, однажды, на время выполнения Вашего сценария.
Примечание: Когда Вы предоставляете учетные данные sudo
, аутентификация обычно успешна в течение 5 минут в оболочке, где Вы ввели пароль. Дополнительно любые дочерние процессы, которые выполняются от этой оболочки, или любой сценарий, который работает в оболочке (Ваш случай), будут также работать на повышенном уровне.
Q#2: существует ли все еще возможность, что sudo полномочия испытают таймаут (если, например, конкретная команда займет много времени достаточно для превышения sudo тайм-аута)? Или будет начальная буква sudo вход пароля продолжается в полный период целого сценария?
Нет они не будут тайм-аут в рамках сценария. Только если Вы в интерактивном режиме вводили их в оболочке, где учетные данные были обеспечены. Каждый раз sudo
выполняется в этой оболочке, тайм-аут сбрасывается. Но в Вашем случае они останутся учетные данные, пока сценарий выполняет и выполняет команды из него.
Этот предел является определенным для политики; тайм-аут подсказки пароля по умолчанию для sudoers политики безопасности составляет 5 минут.
bash
и все его дочерние процессы будут работать с полномочиями суперпользователя. Таким образом, Вы не должны будете повторно вводить пароль для команд в Вашем сценарии удара.
sudo
тайм-аут только относится к (более позднему) отдельному вызову sudo
. Это не влияло бы на Ваш уже рабочий процесс удара или любого из его потомков.
Эти ответы все, вероятно, корректны. Однако это не обычно используемый путь (насколько я знаю) создать сценарии удара, которые требуют sudo
полномочия. Обычно наверху сценария Вы предполагаете, что он не был выполнен с sudo
полномочия и вместо этого звонят sudo -v
самостоятельно (который предложит пользователю их пароль) 'настраивать' a sudo
'сессия'. Вы можете также echo
некоторый объяснительный текст перед подсказкой или переопределением sudo
владейте подсказкой с -p
переключатель, чтобы позволить пользователю знать Вам нужно sudo
доступ для некоторых команд.
Затем в Вашем сценарии необходимо быть в порядке для вызова sudo
на командах, которые требуют его (и только те команды, которые требуют его) без дальнейших запросов пароля. Если Вы думаете определенная группа команд, которые работают вместе в Вашем сценарии (независимо от их собственного использования sudo
) расширится вне sudo тайм-аута, можно звонить sudo -v
в середине для издания своего рода 'активного' sudo
'сессия'.
Если sudo
'сессия', действительно оказывается, истекает во время сценария, пользователя просто попросят их пароля в следующий раз, когда Вы даете sudo команду в сценарии.
sudo -v
это попросит у пользователя их пароля снова. Не худшая проблема, по-моему. Возможно, быть полезным, делая пользователя, знающего о механизме, могло бы быть удобным.
– alexrussell
18.02.2015, 11:39
sudo -u $SUDO_USER
заставить все некорневые команды требования работать неподнятый. Печально это добавляет больше кода, но является единственным надежным способом выполнить корневые вещи в длительном процессе.
– dragon788
17.11.2017, 17:31
/etc/sudoers.d
использование visudo -c -f /tmp/tempsudoers
гарантировать файл допустимо прежде, чем скопировать его в место, и затем удалите тот файл, однажды сделанный (использование прерывания на выходе/ошибке, чтобы гарантировать, что эскалацией нельзя злоупотребить). Самая безопасная и надежная реализация только позволила бы Вашему пользователю выполнять определенные команды в Вашем сценарии с определенными аргументами без использования пароля NOPASSWD
путем хранения каждой команды/аргументов в массив для создания файла.
– dragon788
22.11.2017, 18:51
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
sudo -u $(logname) <command>
должен работать. – Gauthier 13.02.2015, 12:17