Перевод: Анна Давыдова
Источник: n0where.net
IronSSH — сплошная безопасная передача файлов
Альтернатива sftp и scp, которая хранит файлы в зашифрованном виде после их загрузки и позволяет обмениваться файлами с использованием криптографических инструментов.
Скачать IronSSH
Данный проект является ответвлением openssh/openssh-portable проекта от OpenSSH. Хотя большая часть проекта не изменилась, были добавлены некоторые специальные коррективы для создания новых исполняемых файлов, которые обеспечивают сплошную защиту при передаче файлов на удаленные серверы.
Не смотря на то, что sftp и scp используют ssh для сохранения безопасности файлов, когда они передаются через сеть, как только они попадают на удаленный сервер, они больше не находятся в безопасности. ironsftp исполняемый файл предоставляет дополнительную защиту. Когда вы помещаете файл на сервер с помощью ironsftp, файл шифруется перед его загрузкой, и остается зашифрованным на сервере. Когда вы получаете файл с сервера, сначала он скачивается, а потом раскодируется. Так что файл остается в безопасности до тех пор, пока не достигнет того места, где вы захотите использовать его – вашей локальной машины.
Расширение .iron используется для определения безопасного файла. Если вы запустите ironsftp и поместите put foo.c на сервер, файл сначала будет зашифрован и записан в foo.c.iron, затем этот закодированный файл будет записан на удаленный сервер. Когда вы получите get foo.c.iron с сервера, если, конечно, этот файл можно скачать, ironsftp расшифрует файл и запишет foo.c на вашу локальную машину. Для удобства, если вы получаете get foo.c, но этот файл не доступен на данном севере, ironsftp попытается скачать и расшифровать foo.c.iron.
Вся процедура остается такой же, как и sftp, но только в данном случае ваши файлы защищены на удаленном сервере.
Управление ключом
Для того чтобы использовать ironsftp, вы должны обладать RSA ключом в ~/.ssh/id_rsa файле на вашей локальной машине. Когда вы запускаете ironsftp в первый раз, он прочитает ваши общедоступные и конфиденциальные RSA ключи (возможно, даже попросит вас ввести идентификационную фразу для конфиденциального ключа), а затем копирует их в новые файлы ключей в ~/.ssh/ironcore/. Ключ RSA используется для подписания зашифрованных файлов. ironsftp также генерирует пару ключей Curve25519 – этот ключ хранится в том же месте и используется для шифрования данных. Эти новые конфиденциальные ключи заблокированы с помощью идентификационной фразы, которая генерируется путем использования вашего приватного ssh RSA для подписания некоторых данных. Таким образом, если ваш ssh ключ заблокирован с помощью идентификационной фразы, то ваши ironcore ключи также заблокированы. Разблокирование ssh ключа требуется для разблокировки ironcore ключей.
Когда вы используете ironsftp для подключения к серверу, информация вашего общедоступного ключа загружается в ~/.ironpubkey. Таким образом, это предоставляет удобный механизм для других пользователей, подключающихся к серверу, чтобы найти ваши общедоступные ключи ironcore. В частности, если другой пользователь подключился к серверу, использую ironsftp, он может использовать информацию о вашем общедоступном ключе, для безопасного обмена файлами с вами, как описано в следующем разделе.
Безопасный обмен
Вы также можете поделиться этими безопасными файлами с другими пользователями. Когда вы подключаетесь к серверу, по умолчанию, каждый файл, который вы загружаете на этот сервер, будет зашифрован таким образом, что только вы сможете прочитать его. Однако, если другие пользователи на этом сервере подключились к нему, используя ironsftp, информация об их общедоступном ключе будет доступна на ~<login>/.ironpubkey. Вы можете использовать новые ironsftp команды для добавления получателей, чтобы любые последующие файлы, которые вы загружаете в этом сеансе, будут зашифрованы для этих пользователей также как и для вас. Например, предположим, что вы вошли как gumby:
% ironsftp BigServer Connected to BigServer. ironsftp> showrcpt Currently registered recipients: gumby ironsftp> addrcpt pokey Added login pokey to the recipient list ironsftp> addrcpt mrhand Unable to retrieve public keys for user mrhand. ironsftp> showrcpt Currently registered recipients: gumby pokey ironsftp> put foo Uploading foo to /home/gumby/foo.iron ironsftp>
Файл foo.iron на сервере зашифрован таким образом, что вы и pokey могут извлечь и расшифровать его. Предположим, что pokey делает следующее:
% ironsftp BigServer Connected to BigServer. ironsftp> get foo Fetching /home/pokey/foo.iron to foo.iron Data was encrypted to user gumby Message was signed by user gumby, key ID 1234567890ABCDEF.
Файл foo.c.iron будет расшифрован автоматически, и соответственно будет создан foo. Если какой-либо пользователь, кроме gumby или pokey, скачает файл, он получит сообщение примерно следующего содержания:
ironsftp> get foo Fetching /private/tmp/sftp.c.iron to sftp.c.iron WARNING: The file "foo" is encrypted, but access is not granted to you, so the unencrypted contents cannot be retrieved.
У пользователя по-прежнему foo.iron будет находиться в текущей директории, но он будет не читаемым.
Совместимость GnuPG
Ключи, используемые ironsftp, хранятся в том же формате, что использует GnuPG – все общедоступные ключи находятся в ~/.ssh/ironcore/pubring.gpg, и соответствующие секретные ключи находятся в личных файлах, а именно в ~/.ssh/ironcore/private-keys-v1.d. Все файлы, зашифрованные с помощью ironsftp, также могут читаться и gpg. (Поскольку мы используем криптографию эллиптических кривых для шифрования данных, вам понадобится версия 2.1.7 gpg или выше, которая, в свою очередь, требует версию libgcrypt 1.7 или более новую). Если вы используете современную версию gpg, для расшифровки файла, закодированного ironsftp, вы можете использовать что-то вроде этого:
gpg --homedir ~/.ssh/ironcore -d --output foo foo.iron
Установка IronSSH
RedHat, CentOS, Debian и Ubuntu
IronSFTP требует OpenSSL 1.0.2 или более новую. Это означает, что он будет работать только на более новых операционных системах, включая RedHat Enterprise 7; CentOS 7; Fedora 23, 24; Debian Stretchy; и Ubuntu Wily, Xenial, Yakkety. Пакеты для этих операционных систем размещаются на packagecloud.io. Чтобы установить пакеты deb и rpm:
- Добавьте packagcloud.io репозиторий
- Для Debian и Ubuntu: sudo apt-get install ironssh.
Для RedHat и CentOS: sudo yum install ironssh.
MacOS
IronSFTP может быть установлен пользователями Homebrew, используя эту команду: brew install ironcorelabs/ironcore/ironssh.
Установка из исходников
Для установки из исходника, убедитесь, что у вас есть версия OpenSSL 1.0.2 или более новая, затем следуйте этим инструкциям, которые изменяются по мере необходимости, чтобы определить местонахождение зависимостей:
> git clone git@github.com:IronCoreLabs/ironssh.git > cd ironssh > autoreconf > ./configure --with-ssl-dir=/usr/local/opt/openssl > make && make install