- Что дальше
- Монтирование удаленной папки через авторизацию на основе SSH-ключа
- Подключение удаленной файловой системы на постоянной основе
- Введение
- 1 — настраиваем ssh сервер
- 2- создаем директорию для ключей
- 3 — добавляем на целевую машину открытый ключ
- Самый простой способ монтирования удаленной файловой системы
- Вход по ssh ключу для локальных администраторов windows
- Генерируем ключи ssh
- Двухфакторная аутентификация
- Изменения конфигурации sshd
- Использование ssh bastion host
- Как настроить sshfs под linux
- Как настроить sshfs под windows
- Монтирование удаленной папки в /mnt/sample5
- Монтирование удаленной файловой системы
- Монтирование удаленной файловой системы в windows
- Настраиваем целевую машину
- Настройка
- Настройка openssh в windows для авторизации по ключам
- Настройка pam для двухфакторной аутентификации
- Настройка ssh для двухфакторной аутентификации
- Настройка ssh для использования сертификатов
- Особенности и выявление ошибок
- Примеры шаблонов сертификатов
- Проcмотр логов
- Проверка работоспособности
- Проверяем работу
- Продолжение следует
- Сертификаты
- Создание ssh-ключей под linux
- Создание каталога для монтирования
- Создание ключа ca
- Тестируем
- Требования
- Установка sshfs
- Установка sshfs в ubuntu и debian
- Установка sshfs в windows
- Установка sshfs на centos
- Установка sshfs на macos
- Установка google-authenticator
- Частые проблемы при использовании sshfs
- Заключение
- Вместо выводов
- Рекомендуемые статьи по теме:
- Вывод
Что дальше
Мы добавили в документацию
, где более подробно рассматриваются все параметры и переменные.
Если есть вопросы — не стесняйтесь задавать.
Монтирование удаленной папки через авторизацию на основе SSH-ключа
Если у вас настроен безопасный доступ на удаленный сервер с помощью SSH-ключа, то подключить удаленную папку возможно даже без ввода пароля.
Подключение удаленной файловой системы на постоянной основе
В некоторых случаях, удобный вариант — это монтирование удаленной папки на постоянной основе, т.е. чтобы при каждой загрузке ОС, она была уже подключена и готова к работе. Все настройки требуется проводить под пользователем root, для входа с правами root, выполним:
sudo –i
На следующем этапе вам необходимо сгенерировать пару SSH-ключей (см. инструкцию выше) и сохранить их в папке /root/.ssh/id_rsa. После этого следует выполнить тестовую проверку монтирования:
sshfs 194.58.121.225:/ /mnt/sample5
Если в ручном режиме монтирование удалось, размонтируем удаленную папку:
umount /mnt/sample5
Сейчас приступим к редактированию файла /etc/fstab с помощью редакторов Nano или Vim:
nano /etc/fstab
Впишем в самом конце файла следующую строку (приведен базовый синтаксис команды):
root@194.58.121.225:/ /mnt/sample5 fuse.sshfs defaults 0 0
Затем потребуется проверить, происходит ли монтирование из файла /etc/fstab:
mount –av
Если подключение удаленной папки прошло успешно, то опять размонтируем ее и выполним перезагрузку системы. После перезагрузки нужно проверить точку монтирования командой:
df -h | grep mnt
Стоит отметить, что основной синтаксис вышеприведенной команды работает только для пользователя с правами root. В ОС Linux не рекомендуется постоянно работать под root по соображениям безопасности. Поэтому лучше сразу настроить /etc/fstab таким образом, чтобы любой пользователь смог работать с удаленной директорией на постоянной основе.В таком случае, вам стоит прописать команду в /etc/fstab с дополнительными параметрами:
Введение
Началось все с того, что потребовалось быстро и легко управлять доступом
ко множеству машин, используя возможности самого sshd,
а если что-то не получится перейти к более сложным решениям, таким как
kerberos,
sssd,
freeipa.
Прежде чем перейти к описанию настройки, я хочу рассказать и показать
как работает доверенные сертификаты в sshd. Как и в SSL/TLS,
вам потребуется создать публичный и приватный ключи CA (Центра Сертификации).
Затем подписать публичные ключи для сервера и клиентских машин.
На текущий момент подписывать другие CA невозможно, это одно из отличий от SSL/TLS.
После этого необходимо перенастроить sshd,
предоставить подписанные ключи клиентам, и можно начинать работать
по данной схеме. Какие возможности дает такая конфигурация, спросите вы?
- Можно запретить использование неподписанных ключей для всех учетных записей.
- Управление доступом осуществляется через удобно-читаемые заданные роли (principals).
- Подписанные сертификаты могут иметь ограничение по времени действия.
- Подписанные сертификаты можно отзывать в любой момент времени.
Первый пункт будет необходим, когда необходимо запретить пользователям создавать
посторонние ключи, тем самым делигировать управление.
Второй решает поставленную задачу.
Последние два пункта являются необходимым условием в процессах
автоматизации управления ключами доступа.
Таким образом, у нас имеется почти все необходимое для создания автоматической
системы управления ключами доступа по SSH. Перед тем, как приступить
к перенастройке своего sshd следует проверить необходимые требования.
1 — настраиваем ssh сервер
sudo nano /etc/ssh/sshd_config2- создаем директорию для ключей
в домашней директории пользователя создаем директорию
.ssh
3 — добавляем на целевую машину открытый ключ
В созданной директории .ssh нам необходимо создать файл с отрытым ключом
Самый простой способ монтирования удаленной файловой системы
Если у вас мало опыта работы с терминалом Линукс, то подключить удаленный сервер можно с помощью специальных настроек в графической оболочке ОС. Для этого необходимо зайти в файловый менеджер и выбрать опцию « Другие места»:
- Внизу, в строке «Подключиться к серверу», выбрать протокол SSH, ввести адрес вашего сервера в формате: ssh://X.X.X.X;
- В появившемся диалоговом окне ввести данные для доступа на сервер (имя пользователя и пароль);
- Нажать кнопку «Подключиться».
Вход по ssh ключу для локальных администраторов windows
В OpenSSH используются особые настройки доступа по ключам для пользователей с правами локального администратора Windows.
Генерируем ключи ssh
для этого существует утилита ssh-keygen
Двухфакторная
аутентификация
Не так то
и просто преодолеть два различных метода проверки пользователя, особенно когда
не знаешь паролей. Первый уровень – это обычно пароль, а второй – токен из приложения, установленного на телефоне, SMS с уникальным кодом,
отпечаток пальца или голос.
Изменения конфигурации sshd
Осталось изменить конфигурацию для sshd. Вносим следующие изменения
в файле /etc/ssh/sshd_config.
Поясню вкратце:
Теперь подробнее о каждом в отдельности.
Формат файла RevokedKeys я пока не могу описать. Он заполняется
только через команду ssh-keygen.
Описание того, как добавлять недействительные сертификаты я расскажу
в третьей статье.
Использование
ssh
bastion host
Еще один
способ повысить безопасность SSH – принудительно использовать bastion-хост – ssh-шлюз, служащий единственной точкой входа
в инфраструктуру. Уменьшение вероятности любой потенциальной поверхности атаки
за счет использования файерволов позволяет лучше следить за тем, кто к чему
обращается.
Переход к
использованию такого метода не должен быть трудной задачей, особенно если вы уже
применяете сертификаты. Все настройки совершаются через локальный конфиг:
~/.ssh/config.
Как настроить sshfs под linux
Выполним настройки sshfs на локальной машине под операционной системой Ubuntu 20.04 1 LTS. Удаленная файловая система находится на сервере под управлением Ubuntu 18.04 LTS. Все форматы команд будем описывать для ОС на базе Debian/Ubuntu. Если у вас другие ОС, то адаптируйте наши инструкции, согласно пользовательской документации для этих ОС.
Как настроить sshfs под windows
Подключить удаленную папку по sshfs возможно и под ОС Windows, правда с помощью специальных программ и утилит. На специализированных форумах можно встретить рекомендации по использованию утилиты win-sshfs вместе с библиотеками Docan. Однако, эта утилита не всегда совместима с новыми версиями библиотек, может нестабильно работать под Windows 10.
Монтирование удаленной папки в /mnt/sample5
После настройки авторизации на сервере по SSH-ключу, приступим к монтированию удаленной файловой системы в нашу локальную папку, для этого выполним в терминале:
sudo sshfs root@ X.X.X.X:/ /mnt/sample5 -o allow_other,default_permissions,IdentityFile=~/.ssh/id_rsa
Примечание: в некоторых случаях необходимо прописывать полный путь к папке с ключами вместо ~/.ssh/id_rsa.
Результат монтирования можно увидеть в локальной папке /mnt/sample5 или проверить точку монтирования, как мы это делали в предыдущих пунктах нашей статьи.
Монтирование удаленной файловой системы
Следующие инструкции применимы для всех дистрибутивов Linux и macOS.
Чтобы смонтировать удаленный каталог, пользователь SSH должен иметь доступ к нему. Команда монтирования SSHFS имеет следующий вид:
Монтирование удаленной файловой системы в windows
Пользователи Windows могут использовать проводник Windows для сопоставления сетевого диска с удаленным каталогом на сервере SSH.
Откройте проводник Windows, щелкните правой кнопкой мыши «Этот компьютер» и выберите «Подключить сетевой диск». Выберите диск для монтирования и в поле «Папка» введите удаленного пользователя, сервер и путь в следующем формате:
Для более подробной информации обратитесь к руководству по SSHFS-Win .
Настраиваем целевую машину
Настраиваем машину на которую будем выполнять вход по ключу, тут необходимо выполнить 3 действия:
1) Настроить SSH сервер
2) Создать директорию для ключей в домашней директории пользователя
3) Положить на машину открытый ключ
Настройка
Замечание. Необходимые действия по подписыванию сертификатов можно производить
как на своей рабочей машине, так и прямо на удаленном сервере. Как и в случае
SSL/TLS, приватный ключ CA должен храниться в целостности и сохранности, вдали
от посторонних глаз.
Публичный ключ CA может понадобиться клиентским машинам,
но я пока не сталкивался с подобным (не смотря на то, что в Интернет говорят
обратное).
Я описываю все действия, которые выполняются непосредственно
на удаленном сервере из под пользователя root.
Настройка openssh в windows для авторизации по ключам
Теперь открытый ключ, который вы сгенерировали на клиенте, нужно скопировать на ваш SSH сервер (в этом примере это удаленный компьютер с Windows 10 1903 и настроенной службой OpenSSH).
Настройка
pam для двухфакторной аутентификации
Чтобы
заставить систему использовать коды OTP (one-time password), нужно
отредактировать конфиг PAM sshd. Добавьте следующую строку в конец файла /etc/pam.d/sshd:
auth required pam_google_authenticator.so nulloknullok
в конце строки означает, что пользователям, у которых еще не настроен
второй фактор, все равно будет разрешено войти в систему, чтобы они могли его
настроить. После того как все настроено, обязательно удалите nullok.
В
завершение, измените методы аутентификации по умолчанию, чтобы SSH не
запрашивал у пользователей пароль, если они не представляют двухфакторный
токен. Эти изменения также вносятся в файл /etc/pam.d/sshd:
Настройка
ssh для двухфакторной аутентификации
Для того
чтобы сервер требовал использования такой аутентификации, внесем несколько
изменений в /etc/ssh/sshd_config:
На этом
этапе вы должны перезапустить sshd с помощью systemctl restart sshd. Убедитесь,
что вы оставили SSH-соединение открытым, чтобы при необходимости исправить ошибки. Перезапуск SSH оставит существующие соединения активными, но если есть проблема с конфигурацией, новые соединения могут быть запрещены.
Настройка
ssh для использования сертификатов
Нужно указать серверу, чтобы он использовал новый сертификат. Скопируйте три сгенерированных файла на сервер в каталог /etc/ssh,
установите разрешения и добавьте в файл /etc/ssh/sshd_config следующую строку:
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pubОсобенности и выявление ошибок
Во-первых, следует обратить внимание на экранирование специальных символов
(например, “/”, “@”),
когда задаете имя роли с помощью команды ssh-keygen.
Это зависит от используемого шелла.
Файл AuthorizedPrincipalsFile содержит имена как есть,
т.е. без экранирования.
Во-вторых, если по каким-либо причинам, вас не пускает на сервер,
то сперва надо убедиться что права на файлы и директории
у клиента и сервера выставленны корректно. На директорию 0700,
на файлы 0600.
Если вы забудете добавить имя роли или укажете его отличным от того, что
указали при подписывании клиентского сертификата, то sshd сообщит вам об этом
в логе:
И главное, указывать публичный ключ клиента нигде больше не следует!
Ни в каких файлах. Вообще.
Просто отдали подписанный сертификат обратно клиенту и на этом дело сделано.
Примеры шаблонов сертификатов
Внесём несколько изменений в дефолтный шаблон.
Запрещаем переадресацию агента и портовЕсли пользователи подключаются к внутренним хостам через хост-бастион, то хорошо бы запретить перенаправление портов по соображениям безопасности. Вы же не хотите, чтобы юзеры перенаправили трафик с продакшн-сервера MySQL на свой localhost.
Проcмотр логов
Если вы
посмотрите в журнал sshd сервера, запустив journalctl -u sshd, то увидите имя используемого для аутентификации сертификата, а также данные центра сертификации:
sshd[14543]: Accepted publickey for tatooine from 1.2.3.4 port 53734 ssh2: RSA-CERT ID palpatine@proglib.io (serial 0) CA RSA SHA256:tltbnMalWg skhm VlGLd2xHiVPozyuOPl34WypdEO0Проверка работоспособности
Я использую openssh как в качестве сервера, так и в качестве клиента. Поэтому
в нем практически ничего не надо настраивать. В частности, если вы делали как
было описано выше, то в директории /home/test/.ssh будут файлы
со следующими именами:
Также не забудем перезапустить sshd:
Или, если у вас дистрибутив Fedora, RHEL/Centos 6 , Arch Linux или иной, работающий
с systemd:
Осталось зайти на сервер как обычно:
Проверяем работу
На рабочей машине, если мы работаем под именем
Продолжение следует
Это был лишь первый этап по конфигурации sshd с использованием
доверенных сертификатов. Мы рассмотрели какие возможности
перед нами открываются и настроили базовую конфигурацию sshd.
В следующей статье
будут рассмотренны случаи, где данная конфигурация будет полезна
и в чем отличие от обычных сертификатов в плане управления и использования.
Сертификаты
Вы наверняка согласитесь с тем, что аутентификация с открытым ключом лучше, чем использование
паролей. Не приходится вводить пароль, никто его не взломает и не подсмотрит через плечо.
Следующий
уровень секьюрности после ключей – SSH-сертификаты, которые поддерживаются с OpenSSH
5.4, выпущенного ещё в 2021 году.
С помощью
SSH-сертификатов вы создаете центр сертификации (CA), а затем используете его
для выдачи и криптографической подписи, которая аутентифицирует пользователей.
Вы можете создать пару ключей, например, с помощью команды ssh-keygen:
$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in host_ca.
Your public key has been saved in host_ca.pub.
The key fingerprint is:
SHA256:tltbnMalWg skhm VlGLd2xHiVPozyuOPl34WypdEO0 host_ca
The key's randomart image is:
---[RSA 4096]----
| o.|
| . ..o|
| o.o. |
| o o.= E|
| S o o=o |
| .... = .|
| ..=. %.o.o|
| *o Oo=. .|
| .oo=ooo ..|
----[SHA256]-----
$ ls -l
total 8
-rw-------. 1 gus gus 3381 Mar 19 14:30 host_ca
-rw-r--r--. 1 gus gus 737 Mar 19 14:30 host_ca.pubФайл
host_ca является закрытым ключом центра сертификации хоста и должен храниться в
защищенном месте. Не выдавайте его никому, не копируйте куда-либо и убедитесь,
что как можно меньше людей имеют к нему доступ. В идеале он «живет» на
машине, которая не допускает прямого доступа, и все сертификаты выдаются автоматически.
Рекомендуется использовать два отдельных CA – один для
подписания сертификатов хостов, другой для пользователей. Одни и те же процессы не будут добавлять и хосты, и юзеров. А если закрытый
ключ скомпрометируют, нужно будет лишь пересоздать сертификаты для хостов
или пользователей, а не оба сразу.
Создание ssh-ключей под linux
Чтобы создать пару SSH-ключей (приватный и публичный) под Ubuntu выполним следующую операцию:
ssh-keygen
Примечание: У вас должен быть установлен пакет openssh.
Затем сохраните файл с ключами в директории «по умолчанию», просто нажав клавишу Enter. Для дополнительной безопасности ключа будет предложено ввести кодовое слово, если эта опция вам не нужна, смело пропускайте данный шаг. На скриншоте ниже показан процесс генерации ключей в папку «по умолчанию», где они будут сохранены.
В результате, создана пара ключей: приватный ключ — id_rsa, публичный ключ — id_rsa.pub. Для просмотра файла с вашим публичным ключом примените команду:
cat ~/.ssh/id_rsa.pub
Для добавления ключа на удаленный сервер выполните следующую команду:
ssh-copy-id root@X.X.X.X
В итоге, ваш ключ успешно добавлен на сервер. Проверить подключение к удаленному серверу с помощью SSH-ключа можно будет таким образом:
ssh root@X.X.X.X
Примечание: Под Windows SSH-ключи можно сгенерировать с помощью программы PuTTY.
Создание каталога для монтирования
На следующем этапе, создадим точку монтирования на нашем компьютере. Именно в эту папку мы будем монтировать удаленную файловую систему.
sudo mkdir /mnt/sample5
На данный момент наш каталог пустой
Создание ключа ca
Следующая команда сгенерирует приватный /etc/ssh/ca и публичный
/etc/ssh/ca.pub ключи центра сертификации.
Тестируем
Подключаемся
к bastion-у и видим приглашение:
Требования
Данный функционал будет работать только, если версия openssh равна 5.6 или выше.
Например, Debian Squeeze имеет версию 5.5 и описанный ниже функционал работать
не будет (как у клиента, так и на сервера).
Чтобы узнать версию ssh достаточно выполнить:
Установка sshfs
Пакеты SSHFS доступны для всех основных операционных систем, и установка довольно проста.
Установка sshfs в ubuntu и debian
SSHFS доступен из репозиториев Ubuntu и Debian по умолчанию. Обновите индекс пакетов и установите клиент sshfs, набрав:
sudo apt updatesudo apt install sshfs
Установка sshfs в windows
Пользователям Windows необходимо установить два пакета, WinFsp и SSHFS-Win.
Установка sshfs на centos
В CentOS и других производных Red Hat для установки sshfs выполните следующую команду:
sudo yum install sshfsУстановка sshfs на macos
Пользователи macOS могут установить клиент SSHFS, загрузив пакеты FUSE и SSHFS с сайта osxfuse или через Homebrew:
brew cask install osxfusebrew install sshfs
Установка
google-authenticator
В
системах на базе RHEL/CentOS можно установить модуль google-authenticator из
репозитория EPEL:
Частые проблемы при использовании sshfs
SSHFS просто настраивается и удобен в использовании. Однако, встречаются и технические проблемы при настройке sshfs и в процессе работы с ним. Перечислим наиболее распространенные:
- Качество канала и скорость соединения. Даже при небольших сбоях, могут происходить зависания, в результате чего удаленная папка будет недоступна и размонтировать ее с помощью команд будет невозможно. В этом случае, может помочь только перезагрузка ОС.
- Проблемы с информационной безопасностью. Несмотря на использование безопасного протокола SSH, все равно могут появиться уязвимости и угрозы ИБ.
- Проблемы в настройке SSHFS под Linux на постоянной основе. У пользователей, как правило, различные версии и разновидности ОС Линукс, поэтому команды для прописывания в файле /etc/fstab не всегда правильно работают у всех пользователей, у некоторых они требуют прописывания дополнительных параметров и настроек.
Заключение
Приведенные методы дают практические примеры нескольких способов, с помощью которых вы
можете повысить безопасность своей инфраструктуры SSH, предоставляя пользователям
возможность гибко продолжать использовать инструменты, с которыми они знакомы.
Вместо выводов
SSHFS хорошее решение, если Вам нужно быстро и относительно не сложно реализовать постоянный доступ к файлам на удаленном сервере. Это удобное решение для веб-разработчиков, для совместной работы с файлами или если вы работаете удаленно. В зависимости от объема данных, которые будут храниться на сервере, под такую задачу можно использовать виртуальный сервер или арендовать выделенный сервер.
Специалисты поддержки FREEhost.UA помогут с настройкой, если опыта в администрировании серверов у вас недостаточно.
Рекомендуемые статьи по теме:
Вывод
Из этого руководства вы узнали, как использовать SSHFS для монтирования удаленного каталога через SSH. Это может быть полезно, когда вы хотите взаимодействовать с удаленными файлами с помощью приложений на локальном компьютере.
Для получения полного списка опций sshfs введите man sshfs свой терминал.
