Ограничение доступа к оболочке с помощью SFTP в Ubuntu 18.04

SFTP (SSH File Transfer Protocol) – это протокол передачи файлов SSH. Как следует из его названия, это безопасный способ передачи файлов на сервер с использованием зашифрованного SSH-соединения. Несмотря на то, что названия FTP и SFTP очень похожи, SFTP –совершенно другой протокол, хотя он широко поддерживается современными FTP-клиентами.

SFTP доступен по умолчанию без дополнительной настройки на всех серверах, имеющих доступ к SSH. Он безопасен и прост в использовании, но имеет недостаток: в стандартной конфигурации сервер SSH предоставляет доступ к передаче файлов и к оболочке терминала всем системным пользователям с учетной записью.

В некоторых случаях только определенные пользователи должны иметь возможность передавать файлы. Этот мануал поможет настроить SSH-демона и в индивидуальном порядке ограничить пользователей одним каталогом без доступа к SSH.

Требования

Для работы вам понадобится сервер Ubuntu 18.04, настроенный по этому мануалу (включая пользователя с доступом к sudo и брандмауэр).

1: Создание нового пользователя

Для начала создайте нового пользователя, у которого будут только права на передачу файлов. В руководстве пользователь условно зовется 8hostfiles.

sudo adduser 8hostfiles

Вам будет предложено создать пароль для учетной записи, а затем предоставить некоторую информацию о пользователе. Информацию пользователя указывать не обязательно, вы можете нажать Enter, чтобы оставить эти поля пустыми.

Вы создали нового пользователя, которому будет предоставлен доступ к ограниченному каталогу. Далее нужно создать каталог для передачи файлов и настроить необходимые привилегии.

2: Создание каталога для передачи файлов

Чтобы ограничить доступ пользователя к SFTP одним каталогом, сначала нужно убедиться, что каталог соответствует требованиям к привилегиям сервера SSH. Эти привилегии имеют ряд особенностей.

В частности, сам каталог и все каталоги над ним в дереве файловой системы должны принадлежать root, а другие пользователи не должны иметь права на запись в них. Следовательно, невозможно просто предоставить ограниченный доступ к домашнему каталогу пользователя, поскольку домашние каталоги принадлежат собственно пользователям, а не root.

Примечание: В отличие от большинства современных дистрибутивов Linux (включая Ubuntu 18.04), некоторые версии OpenSSH не имеют таких строгих требований к структуре каталогов и правам собственности.

Существует целый ряд способов решения этой проблемы. В этом мануале в качестве целевого каталога загрузки будет использоваться /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 пользователю 8hostfiles.

sudo chown 8hostfiles:8hostfiles /var/sftp/uploads

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:сервер SSH будет запускать SFTP во время логина без доступа к оболочке.
  • PasswordAuthentication yes включает поддержку парольной аутентификации.
  • ChrootDirectory /var/sftp/ блокирует пользователю доступ ко всем каталогам, кроме /var/sftp.
  • AllowAgentForwarding no, AllowTcpForwarding no и X11Forwarding no отключают форвардинг, туннелирование и X11 для указанного пользователя.

Читайте также: Подготовка chroot-окружений для тестирования на сервере Ubuntu 12.04

Этот набор команд, начиная с Match User, можно скопировать и повторить для разных пользователей. Обязательно измените имя пользователя в соответствующей строке.

Примечание: Для повышения безопасности вы можете опустить строку PasswordAuthentication yes и вместо этого настроить доступ к SSH-ключам. Обязательно сделайте это прежде, чем отключить доступ к оболочке для пользователя. Чтобы протестировать настройку, вы должны иметь доступ к  компьютеру с парой ключей.

Перезапустите сервис:

sudo systemctl restart sshd

Теперь SSH-сервер ограничивает доступ к передаче файлов, поддерживая её только для пользователя 8hostfiles.

4: Тестирование конфигурации

Убедитесь, что новый пользователь 8hostfiles может только передавать файлы.

Войти на сервер как 8hostfiles с помощью обычного доступа к оболочке больше невозможно. Проверьте это:

ssh 8hostfiles@localhost
Error message
This service allows sftp connections only.
Connection to localhost closed.

Это значит, что 8hostfiles больше не может использовать обычную оболочку SSH.

Убедитесь, что этот пользователь может использовать SFTP для передачи файлов.

sftp 8hostfiles@localhost

Эта команда должна выполниться успешно.

Connected to localhost.
sftp>

Просмотрите содержимое каталога с помощью ls:

ls

Команда выведет созданный ранее каталог uploads и вернет вас в командную строку sftp>.

uploads

Чтобы убедиться, что пользователь действительно ограничен этим каталогом и не может получить доступ к каталогам высшего порядка, попробуйте перейти в родительский каталог.

cd ..

Эта команда не выдаст ошибку, но запросив содержимое каталога, вы увидите, что пользователь по-прежнему в каталоге sftp и не смог перейти в родительский каталог.

Все ограничения работают правильно.

Недавно созданный пользователь 8hostfiles может получить доступ к серверу только с помощью протокола SFTP для передачи файлов и не имеет доступа к остальной оболочке.

Заключение

Вы ограничили доступ пользователя к SFTP одним каталогом без полного доступа к оболочке. Повторите описанный в руководстве процесс, чтобы расширить настройку до нескольких пользователей и нескольких каталогов.

Сервер SSH поддерживает более сложные схемы конфигурации, включая ограничение доступа к группам или нескольким пользователям одновременно.

Читайте также:

Tags: , , ,