Как включить SFTP без доступа к оболочке
SSH, Ubuntu | Комментировать запись
SFTP (SSH File Transfer Protocol) – это протокол передачи файлов SSH, который предоставляет безопасный способ передачи файлов между машинами благодаря зашифрованному SSH-соединению. Очевидно, его название похоже на FTP, однако эти протоколы совсем разные, хотя SFTP широко поддерживается современными FTP-клиентами.
Читайте также: Что такое FTP и как с ним работать
SFTP по умолчанию (без дополнительной настройки) доступен на всех серверах с включенным доступом SSH. Он безопасен и довольно прост в использовании, однако у него есть один важный недостаток: в стандартной конфигурации сервер SSH предоставляет доступ для передачи файлов и доступ к оболочке терминала всем пользователям, имеющим учетную запись в системе. Во многих случаях привилегии пользователей рекомендуется строго контролировать: например, вы можете разрешить определенным пользователям выполнять только передачу файлов и запретить им получать терминальный SSH-доступ к серверу.
В этом руководстве вы узнаете, как настроить демон SSH, чтобы ограничить SFTP доступ рамками одного каталога без SSH-доступа и на индивидуальной основе.
Требования
Чтобы следовать этому руководству, вам понадобится предварительно настроенный сервер Ubuntu 20.04. Чтобы получить помощь по настройке, следуйте этому мануалу.
1: Создание нового пользователя
Для начала мы создадим нового пользователя (позже мы предоставим ему доступ к серверу только для передачи файлов). В этом мануале мы назовем этого пользователя 8hostfiles, но вы можете использовать любое имя, которое вам нравится.
sudo adduser 8hostfiles
Вам будет предложено создать пароль для этой учетной записи (обязательно), а затем предоставить системе некоторую информацию о данном пользователе (это опционально, поэтому вы можете нажать Enter, чтобы оставить эти поля пустыми).
Итак, вы создали нового пользователя, которому теперь можно предоставить доступ, ограниченный одним каталогом. В следующем разделе мы создадим каталог для передачи файлов и настроим все необходимые разрешения.
2: Создание каталога
Чтобы ограничить SFTP доступ пользователя одним каталогом, вы сначала должны убедиться, что выбранный вами каталог соответствует требованиям SSH к доступу, а они очень специфичны.
В частности, этот каталог и все каталоги, которые находятся выше него в дереве файловой системы, должны принадлежать root, и никакие другие пользователи не должны иметь права на их изменение. Следовательно, предоставить ограниченный доступ к домашнему каталогу пользователя невозможно, потому что домашние каталоги принадлежат их пользователям, а не root.
Примечание: Некоторые версии OpenSSH не имеют таких строгих требований к структуре каталогов и привилегиям, но большинство современных дистрибутивов Linux (включая Ubuntu 20.04) – имеют.
Есть несколько способов обойти эту проблему. В данном руководстве мы предлагаем создать /var/sftp/uploads и использовать его в качестве целевого каталога для загрузки. Каталог /var/sftp будет принадлежать пользователю root и не будет доступен для записи другим пользователям; подкаталог /var/sftp/uploads будет принадлежать пользователю 8hostfiles, так что он сможет загружать в него файлы.
Сначала создайте эти каталоги:
sudo mkdir -p /var/sftp/uploads
Передайте права на /var/sftp пользователю root:
sudo chown root:root /var/sftp
Предоставьте root права на запись в этом каталоге, а другим пользователям – права только на чтение и выполнение:
sudo chmod 755 /var/sftp
Измените владельца каталога uploads – передайте его только что созданному вами пользователю (обязательно укажите правильное имя вашего пользователя):
sudo chown 8hostfiles:8hostfiles /var/sftp/uploads
Теперь, когда структура каталогов готова, пора настроить сам SSH-сервер.
3: Ограничение доступа
На этом этапе мы изменим конфигурацию сервера SSH, чтобы запретить пользователю 8hostfiles доступ к терминалу, но разрешить ему доступ для передачи файлов.
Откройте конфигурационный файл SSH-сервера с помощью nano или другого текстового редактора:
sudo nano /etc/ssh/sshd_config
Прокрутите файл до самого конца и добавьте следующие конфигурации:
Match User 8hostfiles ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Вот что делает каждая директива из вышеприведенного фрагмента:
- Match User позволяет серверу SSH применять следующие команды только к конкретному пользователю. Здесь мы указываем 8hostfiles (опять же, не забудьте обновить имя пользователя, если у вас оно отличается).
- ForceCommand internal-sftp запускает SFTP-сервер при входе в систему, запрещая доступ к оболочке.
- PasswordAuthentication yes разрешает парольную аутентификацию для этого пользователя.
- ChrootDirectory /var/sftp/ гарантирует, что пользователь не сможет получить доступ к другим каталогам, кроме /var/sftp.
- Директивы AllowAgentForwarding no, AllowTcpForwarding no. и X11Forwarding no отключают переадресацию портов, туннелирование и переадресацию X11 для этого пользователя.
Этот набор команд, начиная с Match User, вы можете скопировать и повторить для разных пользователей. Только при этом обязательно измените имя пользователя в строке Match User.
Примечание: Вы можете пропустить строку PasswordAuthentication yes и настроить доступ по ключам SSH – это повысит безопасность системы. Если вам подходит этот вариант, обязательно сделайте это, прежде чем отключать доступ к оболочке для пользователя. На следующем этапе мы протестируем конфигурацию с помощью локального SSH-подключения с парольным доступом, но если вы настроите SSH-ключи, вам понадобится доступ к компьютеру, на котором есть пара ключей вашего пользователя.
Добавив эти строки, сохраните и закройте файл. В nano вы можете сделать это, нажав Ctrl+X, затем Y и Enter.
Чтобы применить изменения к вашей конфигурации, перезапустите сервис:
sudo systemctl restart sshd
Теперь ваш SSH-сервер поддерживает ограничения доступа для пользователя 8hostfiles. Остался последний шаг – протестировать конфигурацию и убедиться, что она работает должным образом.
4: Тестирование настройки
Давайте убедимся в том, что наш новый пользователь 8hostfiles может только передавать файлы. Как упоминалось ранее, SFTP используется для передачи файлов между машинами. Чтобы проверить нашу настройку, мы можем передать файл между локальным компьютером и сервером.
Сначала попробуйте войти на свой сервер как пользователь, созданный вами в разделе 1. Из-за настроек, которые вы добавили в конфигурации SSH, это будет невозможно:
ssh 8hostfiles@your_server_ip
Прежде чем вернуться к исходной командной строке, вы получите следующее сообщение:
This service allows sftp connections only. Connection to your_server_ip closed.
Это означает, что пользователь 8hostfiles больше не может получить доступ к оболочке сервера с помощью SSH.
Теперь мы проверим, может ли пользователь получить доступ к SFTP для передачи файлов:
sftp 8hostfiles@your_server_ip
Вместо сообщения об ошибке эта команда сгенерирует сообщение об успешном входе в систему с интерактивной командной строкой:
Connected to your_server_ip sftp>
Вы можете просмотреть содержимое каталога, используя команду ls в командной строке:
ls
Эта команда покажет каталог uploads, созданный в предыдущем разделе, и вернет вас в командную строку sftp>:
uploads
Чтобы убедиться, что пользователь действительно ограничен этим каталогом и не может получить доступ к другим каталогам системы, вы можете попробовать подняться по дереву каталогов:
cd ..
Эта команда не выдаст ошибку, а просто отобразит содержимое каталога, как и предыдущая команда, – а это доказывает, что пользователь не смог перейти в родительский каталог.
Итак, мы убедились, что ограничения работают должным образом. Наш новый пользователь 8hostfiles может получить доступ к серверу только по протоколу SFTP, только для передачи файлов и не имеет доступа к полной оболочке.
Заключение
Вы ограничили доступ пользователя протоколом SFTP и одним каталогом на сервере, отняв у него полный доступ к оболочке. В этом руководстве для краткости и простоты используется только один каталог и один пользователь, однако вы легко можете распространить этот подход на нескольких пользователей и несколько каталогов.
Сервер SSH позволяет реализовать даже более сложные схемы конфигурации, включая ограничение доступа сразу для групп, для нескольких пользователей и даже для определенных IP-адресов. Дополнительные примеры и параметры конфигурации с объяснениями возможных директив вы найдете здесь.
Tags: SFTP, SSH, Ubuntu 20.04