дурак однажды запросил пароль, используемый и для IMAP и для smtp

Вместо того, чтобы писать обертку оболочки и породить новый awk экземпляр для каждого файла, Вы обрабатываете, можно сделать это в awk непосредственно. Если у Вас уже есть awk сценарий, можно получить доступ к текущему файлу с помощью переменной ИМЕНИ ФАЙЛА. Так, если Вы работаете awk 'some commands' file1 file2, можно сказать, работаете ли Вы с file1 или file2 с помощью ИМЕНИ ФАЙЛА. Можно также использовать > на print/printf в awk. Так, если у Вас есть awk сценарий как

/pattern/{ print $1,$3 }

Вы могли легко сделать

/pattern/{ print $1,$3 > FILENAME".processed" }

или используйте FNR=1 сказать, когда Вы находитесь в новом файле и создаете переменную, чтобы сделать более сложное управление на имени файла. Как замена a .in расширение с .out, как в

sauer@humpy:/tmp$ grep . file*.in
file1.in:a
file1.in:b
file2.in:c
sauer@humpy:/tmp$ awk 'FNR=1{out=FILENAME;sub("\.in$",".out",out)} {print "processed"$0 > out}' file*.in
sauer@humpy:/tmp$ grep . file*.out
file1.out:processeda
file1.out:processedb
file2.out:processedc

Я использую grep . показать имя файла и содержание нескольких файлов здесь, который является также забавным приемом. Но важная вещь устанавливает значение out переменная к измененной версии FILENAME когда FNR изменения в 1 (таким образом, мы находимся на строке 1 из файла), и затем перенаправляющий всю печать к out. Обратите внимание, что это мягко опасно, в том отказе соответствовать расширению не приведет ни к какой замене, ведя к перезаписи Ваших входных файлов. Так, было бы хорошо добавить в отказоустойчивой проверке для проверки этого out != FILENAME или что-то как этот также. Это оставляют как осуществление для читателя.;)

При необходимости в файле, содержащем список имен файлов является самым легким просто выполнить его как

awkscript $(< /path/to/filename_list_file )

Который берет содержание filename_list_file и помещает его на командную строку.

3
28.10.2015, 05:05
1 ответ

хотя я не думаю, что безопасно считывать пароль в переменную окружения,*
мне нравится, как Аарон Топонсе (приписывает ему:https://pthree.org/2012/01/07/encrypted-mutt-imap-smtp-passwords/):

Таким образом, вы можете использовать несколько учетных записей с одним и тем же паролем -файл (, но да, не рекомендуется использовать один и тот же пароль для разных учетных записей)


Только самое необходимое(объяснение смотрите по ссылке выше):

First, I created a ~/.mutt/passwords file. The file is in plain text. Before encrypting it, here are its contents:

set imap_pass="password"
set smtp_pass="password"

I then encrypt that file with the following command:

% gpg -r your.email@example.com -e ~/.mutt/passwords
% ls ~/.mutt/passwords*
/home/user/.mutt/passwords /home/user/.mutt/passwords.gpg
% shred ~/.mutt/passwords
% rm ~/.mutt/passwords

The last two commands are to ensure that the temporary file you created for encryption is securely wiped from the disk using the GNU Shred utility. Now, you should only have an encrypted binary data file that contains your passwords. All that is left is to configure Mutt to decrypt them when starting up. You can set that easily in your Muttrc:

source "gpg -d ~/.mutt/passwords.gpg |"

обновление:
*дело не в переменной окружения -, дело в памяти:
цитата:Mutt должен хранить пароль где-то в памяти, и он использует параметр, который вы можете запросить для этого. Это не переменная окружения, это память дураков. Любой, у кого есть к нему доступ, может получить этот пароль. В стандартной системе Linux это каждая программа, работающая под вашим пользователем. С sysctl kernel.yama.ptrace _scope = 1 никакая другая программа не может получить доступ к самой памяти. Но если злоумышленник может запустить код от имени вашего пользователя (, что он может сделать, если скомпрометирует любую программу ), тогда он может просто перехватить пароль, когда вы запустите gpg.

0
27.01.2020, 21:43

Теги

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