bash надежно передает переменную среды на стандартный ввод

Вы можете использовать два правила, как описано здесь (, возможно, в сочетании с другим изящным трюком, описанным в этом сообщении в блоге , чтобы сделать его более общим/легко расходуемым):

ACTION=="add", SUBSYSTEM=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}"
ACTION=="add", ENV{USB_IDS}=="12d1:1506", ATTRS{bInterfaceNumber}=="00", RUN+="/usr/bin/systemctl start modem_dialer"

Однако первое правило должно однозначно соответствовать узлу, содержащему права idVendorи idProduct, в противном случае нет гарантии, что оно установит USB_IDSв правильные значения, а второе правило сможет соответствовать. Однако я не знаю ни одного атрибута, который мог бы в целом соответствовать листовым узлам USB. :/

1
16.12.2020, 21:08
2 ответа

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

Если вы используете bash, вы можете использовать вместо нее строку:

kinit x@example.com <<<"$passwd"

Строки Herstring не включаются в set -xвывод, и переменную не нужно экспортировать:

$ bar=abc
+ bar=abc
$ cat <<<"$bar"
+ cat
abc

Но здесь строки создают временные файлы, так что это можно рассматривать как потенциальный источник утечки.

1
18.03.2021, 22:42

Я приведу вам пример с sshpassиспользованием временного fd для использования пароля в качестве аргумента вместо стандартного ввода с использованием set -xон не будет распечатывать пароль:

#Set the password as an environment variable
export password=MyPassword
#Create the file descriptor 3 and link it to /tmp/pwd, you can use one from 3 to 9.
exec 3<> /tmp/pwd
#Copy the content of password  env variable to /tmp/pwd using dd command
dd of=/tmp/pwd <<< "$password" 
#Here using cat and passing it to xargs so stdout will be catched by stdin of xargs, then the password will be available within the second  curly brackets
cat /tmp/pwd  | xargs -I {} sshpass -p {} ssh <user>@<ip>
#Close the file descriptor
exec 3>&-
#Remove the tmp file
rm -f /tmp/pwd

Вы можете адаптировать этот ответ к своим вариантам использования.

1
18.03.2021, 22:42

Теги

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