Во многих учебных пособиях по fetchmail, которые я читал, говорится, что размещение пароля вашей учетной записи электронной почты в виде открытого текста в файле конфигурации безопасно. Однако я предпочитаю безопасность через слои. [*** глупый пример: * если мой терминал включен, и кто-то, подозревающий такую ерунду по электронной почте, скользит по нему и просто набирает «grep -i pass ~ /.*», то, ой, вся моя база принадлежит им! особенно если мой провайдер электронной почты использует openid (или я достаточно туп, чтобы использовать тот же пароль для своего банка)] **.
Теперь с помощью msmtp (в отличие от sendmail) я могу аутентифицироваться с помощью связки ключей OSX. Есть ли бесплатный электронный «граббер» с открытым исходным кодом, который позволяет мне использовать связки ключей (или, по крайней мере, позволяет мне использовать пароль MD5)?
С простой точки зрения утилит, да, вы можете использовать Связку ключей. Я настоятельно рекомендую вам прочитать всю security(1)
страница руководства, на которой есть дополнительные предостережения.
Вы можете ввести пароль с помощью программы Связка ключей или через командную строку:
# WARNING: exposes password in ps(1), history(1), etc.
$ security add-internet-password -a $USER -s pop3.example.com -w 'Mellon!'
Вы можете извлечь это с помощью:
# Note: by default, first use will prompt
$ security find-internet-password -s pop3.example.com -a $USER -g
если ты Всегда позволяют, security(1)
сможет получить эти учетные данные без дополнительных запросов. Это может быть опасно для вашей системы. Однако вы можете выбрать, чтобы он всегда запрашивал пароль перед запуском.
Наконец, используя это, вы можете обернуть свой fetchmail
вызовите скрипт-трамплин, который устанавливает используемый пароль.
user=$USER
server=pop3.example.com
# WARNING: insecure tmpfile creation and usage
# As [DAM][1] mentions, see mkstemp(3)
tmpfile=/tmp/fetchmailrc.$$
password=$(security find-internet-password -s $server -a $USER -g 2>&1 \
| perl -ne '/password: "(\S*)"/ and print $1')
# create temporary fetchmailrc and pass to fetchmail, etc...
cat <<EoF > $tmpfile
poll $server with proto POP3 and options no dns
user $user with pass '$password' is $user here
options keep mda '/usr/bin/procmail -d %T'
EoF
fetchmail -d -f $tmpfile
rm -f $tmpfile
Хотя это действительно достигает поставленной вами цели - не хранить очевидные файлы с паролями, я сделал обратите внимание на риски безопасности все еще присутствует в этой конфигурации, что вам следует учитывать.
Чтобы использовать стандартный imap / smtp / pop3, вам нужен открытый пароль. Поэтому, если вы хотите сохранить это локально, он должен быть в обратимом формате, что не является хорошей новостью для использования Keychain. Однако, если почтовый сервер поддерживает это, вы можете аутентифицироваться с помощью сертификата X.509 и SSL. Этот сертификат может быть с паролем или без него и может храниться в связке ключей Mac OS X.
Что я не могу ответить, так это то, поддерживает ли какое-либо программное обеспечение эту настройку, поскольку я не пользователь Mac. Кроме того, вам также понадобится ваш сервер для поддержки аутентификации X509.
Если связка ключей позволяет снимать пароль в виде открытого текста, то это возможно, но вы не можете использовать пароли MD5 локально, поскольку сервер хочет его в своем собственном формате (обычно в виде открытого текста)
Если вам достаточно получения почты через POP3, обратите внимание на отличную mpop. Он от того же автора, что и msmtp, а также поддерживает связку ключей OSX для хранения учетных данных аутентификации.
Для IMAP4 вы можете использовать очень красивый OfflineIMAP и подключите его к связке ключей OSX, используя Крючок Уильяма Сноу Орвиса для Python.
Я лично предпочитаю эти инструменты, а не fetchmail (например, из-за скорости загрузки, набора функций, конфигурации), но ваш опыт может отличаться.
@medina,
Вместо «tmpfile = / tmp / fetchmailrc. $$» я бы рекомендовал использовать mktemp (1), если он доступен.