Подстановка параметров

Запустите update-grub (как root) или sudo update-grub (как обычный пользователь) после загрузки Elementary OS и входа в систему.

Это создаст файл /boot/grub/grub.cfg, включая меню загрузки, и по умолчанию с таймаутом.

40
24.04.2018, 23:59
8 ответов

При использовании оболочки zshили bashиспользуйте параметр -s для встроенной оболочки read, чтобы считать строку с терминального устройства без ее повторения.

IFS= read -rs VARIABLE < /dev/tty

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

sha1pass <<<"$VARIABLE"

Если кто-то запустит ps, все, что он увидит, это «sha1pass».

Это предполагает, что sha1passсчитывает пароль со стандартного ввода (в одну строку, игнорируя разделитель строк ), если не задан аргумент.

26
27.01.2020, 19:35

Просто запишите значение в файл и передайте файл:

$ cat > mysecret
Big seecreeeet!
$ cat mysecret | sha1pass 

Я не уверен, как работает sha1pass, если он может принимать файл в качестве входных данных, вы можете использовать sha1pass < mysecret. Если нет, использование catможет быть проблемой, так как оно включает последнюю новую строку. В этом случае используйте (, если ваш headподдерживает -c):

.
head -c-1 mysecret | sha1pass 
6
27.01.2020, 19:35

В идеале вы никогда не вводите -текстовый пароль в командной строке в качестве аргумента команды. Это делает пароль аргументом команды, а аргументы командной строки можно увидеть в таблице процессов с помощью простых инструментов, таких как ps, или войти в некоторые журналы аудита.

Тем не менее, существуют способы скрыть фактический пароль от истории команд оболочки.

sha1pass "$( head -n 1 )"

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

Для предотвращения эха символов:

sha1pass "$( stty -echo; head -n 1; stty echo )"

Команда stty -echoотключает эхо вводимых символов на терминале. Затем эхо восстанавливается с помощью stty echo.

Чтобы передать стандартный ввод, эту последнюю команду можно изменить (вы сделали бы это, если бы sha1passпринимала данные на стандартный ввод, но выглядела так, как будто эта конкретная утилита игнорирует свой стандартный ввод):

{ stty -echo; head -n 1; stty echo; } | somecommand

Если вам нужен многострочный ввод -(, вышеизложенное предполагает, что должна быть передана одна строка без символа новой строки в конце ), затем замените всю команду headна catи завершите ввод (при условии, что somecommandчитается до конца -из -файла )с Ctrl+D(после Возврат , если вы хотите включить символ новой строки на входе или дважды, если нет ).

Это будет работать независимо от того, какую оболочку вы использовали (, если это была оболочка типа Bourne -или rc -типа оболочки ).

Некоторые оболочки могут быть сделаны так, чтобы не сохранять набранные -команды в своих файлах истории, если команде предшествует пробел. Обычно это требует установки HISTCONTROLна значение ignorespace. Это поддерживается, по крайней мере, bashи kshв OpenBSD, но не, например. ksh93или dash. Пользователи zshмогут использовать параметр histignorespaceили свою переменную HISTORY_IGNORE, чтобы определить шаблон, который следует игнорировать.

В оболочках, которые поддерживают чтение с помощью readбез вывода символов на терминал, вы также можете использовать

IFS= read -rs password     # -s turns off echoing in bash or zsh
                           # -r for reading backslashes as-is,
                           # IFS= to preserve leading and trailing blanks
sha1pass "$password"

но это, очевидно, по-прежнему имеет ту же проблему с потенциальным раскрытием пароля в таблице процессов.

Если утилита читает со стандартного ввода и если оболочка поддерживает строки «здесь -», указанное выше можно изменить на

IFS= read -rs password
somecommand <<<"$password"

Резюме комментариев ниже:

  • Выполнение команды с паролем, указанным в командной строке, что делают все вышеперечисленные команды, кроме той, которая передает данные команде, потенциально может сделать пароль видимым для всех, кто одновременно запускает ps.. Однако ни одна из приведенных выше команд не сохранит введенный -пароль в файле истории оболочки, если она выполняется из интерактивной оболочки.

  • Хорошо себя зарекомендовавшие программы, которые считывают текстовые пароли -, считывают их со стандартного ввода, из файла или непосредственно с терминала.

  • sha1passтребует ввода пароля в командной строке, либо вводимого напрямую, либо с использованием какой-либо формы подстановки команд.

  • По возможности используйте другой инструмент.

40
27.01.2020, 19:35

Передача конфиденциальных данных через канал или здесь -doc:

command_with_secret_output | command_with_secret_input

или:

command_with_secret_input <<EOF
$secret
EOF

Это нормально, если секреты находятся в (не -экспортированных )переменных оболочки, но вы никогда не сможете использовать эти переменные в командных строках, только в -документах и ​​внутренних компонентах оболочки.

Как заметил Кусалананда в комментарии, если вы вводите команды в интерактивной оболочке, строки, которые вы вводите для документа здесь, будут сохранены в истории оболочки, поэтому вводить там пароль небезопасно, но это по-прежнему должно быть безопасно использовать переменные оболочки, содержащие секреты; история будет содержать текст $secret, а не то, до чего расширяется $secret.

Использование расширений команд небезопасно:

command_with_secret_input "$(command_with_secret_output)"

, потому что вывод будет включен в командную строку и виден в psвывод (или ручном чтении из /proc ), за исключением систем с усиленным /proc.

Присвоение переменной тоже допустимо:

secret=$(command_with_secret_output)
10
27.01.2020, 19:35

Если то, что сделал terdon, возможно, то это лучшее решение, прохождение через стандартный ввод. Единственная оставшаяся проблема - он записал пароль на диск. Вместо этого мы можем сделать это:

stty -echo
echo -n "password: "
head -1 | sha1pass
stty echo

Как сказал Кусалананда, stty -echoгарантирует, что то, что вы печатаете, не будет видно до тех пор, пока вы stty echoне сделаете это снова. head -1получит одну строку из стандартного ввода и передаст ее sha1pass.

1
27.01.2020, 19:35

Я бы использовал

sha1pass "$(cat)"

catбудет считываться со стандартного ввода до EOF, что может быть вызвано нажатием Ctrl+D. Затем результат будет передан в качестве аргумента вsha1pass

0
27.01.2020, 19:35

Если вы установите HISTCONTROLтак:

HISTCONTROL=ignorespace

и начните команду с пробела:

~$  mycommand

он не будет сохранен в истории.

26
27.01.2020, 19:35

Если вы передаете конфиденциальную информацию и используете ее регулярно, возможно, лучше всего ее зашифровать.

Ввод чего-то вроде

#create key as follows - will prompt for password
#echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc  -a -salt -pbkdf2|base64
export MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='

В вашем.bashrc вы получите зашифрованную переменную среды, к которой вы можете получить доступ, где бы вам ни потребовался секрет,и вам будет предложено ввести парольную фразу/пароль, который вы использовали при создании переменной среды.

В приведенном выше примере это «секрет»

Доступ к нему осуществляется с помощью следующей команды

`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `

напр.

xfreerpd /parameters.... /p:`echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2` 

Для вашего запроса используйте sha1pass. Вы можете создавать и передавать следующим образом

MY_SECRET=`echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc  -a -salt -pbkdf2|base64`

Затем используйте его следующим образом

sha1pass `echo $MY_SECRET|base64 --decode|openssl enc -aes-256-cbc -a -d -salt -pbkdf2 `

Часть base64 предназначена для того, чтобы вы могли установить переменную

MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='

И чтобы ваш секрет не застрял в истории команд и т.д.

Когда вы создаете секрет, иногда вывод base64 будет состоять из нескольких строк, поэтому вам нужно будет использовать разрывы строк для вашей переменной.

echo -n 'secret you want encrypted' | openssl enc -aes-256-cbc  -a -salt -pbkdf2|base64
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxL
WVFnK1hONQo=

#take the above line break out 
MY_SECRET='VTJGc2RHVmtYMTlzVnBGWXNYUitLWlpYT3BWdStaQXJXeUVwc1JORnFsNWswZXJKT1dkRWpsWkxLWVFnK1hONQo='

openssh каждый раз будет запрашивать пароль для шифрования и дешифрования, вы можете указать его как часть команды, но тогда вы просто скроете что-то из истории и т. д. Взгляните наhttps://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/для получения некоторой информации о используя для этого openssh.https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-base64-encode-and-decode-from-command-line/для base64 иhttps://stackoverflow.com/questions/16072351/how-to-assign-an-output-to-a-shellscript-variableдля разных вариантов подстановки команд я использовал назад -галочку `выше

0
21.06.2021, 12:24

Теги

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