Всё так. Не спорю - варианты взлома хоть и достаточно абсурдны, но реальны.
Немного изменил скрипт:
#!/bin/sh
# Copyright (c) Alexander Kulinich <rulez@rulez.kiev.ua>
# senx John Doe <jdatzmail.ru> for security check :)FILE=~/.ssh/passwords
EMAIL="rulez@rulez.kiev.ua"
FIELDS='a:|r:|f:'
FIELDS_NUM=3
TMP_FILE=/tmp/`echo date | md5`
umask 22
if [ $# -eq 2 ]
then
cat ${FILE} | gpg -d -q 2>/dev/null | \
grep -A ${FIELDS_NUM} -E "$1 |$1$" | \
grep " $2:"
else
if [ $# -eq 1 ]
then
if [ $1 = '-e' ]
then
cat ${FILE} | gpg -d -q > ${TMP_FILE} && \
chmod 600 ${TMP_FILE} && \
${EDITOR} ${TMP_FILE}
cat ${TMP_FILE} | gpg --encrypt --recipient ${EMAIL} > ${FILE}
cat /dev/urandom | tr -cd A-HJ-NP-Za-km-z1-9 | head -c1000 > ${TMP_FILE}
rm -rf ${TMP_FILE}
else
cat ${FILE} | gpg -d -q 2>/dev/null | \
grep -A ${FIELDS_NUM} $1 | grep -E ${FIELDS}
fi
else
echo USAGE: `basename $0` host [user]
fi
fi
И, я не думаю, что на shell врядли получится написать что-то кардинально совершеннее в плане безопасности.
Основная проблемма - надо как-то передавать данные между редактором и gpg.
Пайп не выход - в редактор передать данные с его помощью можно, а забрать - врядли. Разве что редактор умеет выдавать на стандартный вывод отредактированный файл, нигде его не сохраняя. Я таких редакторов не знаю.
В любом случае - я не ставил себе задачей написать универсальную и абсолютно безопастную утилиту, как не ставил задания писать Троянского коня. В моей ситуации данного решения более чем достаточно.
Ну и ещё в свою защиту могу сказать, что редактирование было добавлено лишь для того, чтобы руками не выполнять все те команды, что делаются автоматически - перенаправление вывода в файл, редактирование этого файла, шифрование и удаление его.
PS. Может вы мне подскажете, что за область я хотел осветить? :)