Как включить SFTP без доступа к оболочке в CentOS 7

Вступление

SFTP означает S SH Протокол передачи файлов. Как следует из названия, это безопасный способ передачи файлов на сервер с использованием зашифрованного соединения SSH. Несмотря на название, это совершенно другой протокол, чем FTP ( F ile * * T ransfer P rotocol), хотя он широко поддерживается современными FTP-клиентами.

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

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

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер CentOS 7, настроенный с помощью this первоначальное руководство по настройке сервера, включая пользователя без полномочий root.

  • По желанию, текстовый редактор + nano + устанавливается вместе с + yum install nano +. CentOS поставляется с текстовым редактором + vi + по умолчанию, но + nano + может быть более удобным для пользователя.

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

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

sudo adduser

Затем назначьте пароль новому пользователю:

sudo passwd

Введите надежный пароль и повторите его еще раз, чтобы подтвердить его.

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

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

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

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

Есть несколько способов обойти эту проблему собственности. В этом уроке мы создадим и используем + / var / sftp / uploads + в качестве целевого каталога загрузки. + / var / sftp + будет принадлежать * root * и будет недоступен для записи другим пользователям; подкаталог + / var / sftp / uploads + будет принадлежать * sammyfiles *, так что пользователь сможет загружать в него файлы.

Сначала создайте каталоги.

sudo mkdir -p /var/sftp/uploads

Установите владельца + / var / sftp + в * root *.

sudo chown root:root /var/sftp

Предоставьте * root * права на запись в тот же каталог, а другим пользователям предоставьте только права на чтение и выполнение.

sudo chmod 755 /var/sftp

Измените владельца в каталоге + uploads + на * sammyfiles *.

sudo chown sammyfiles:sammyfiles /var/sftp/uploads

Теперь, когда структура каталогов установлена, мы можем настроить сам сервер SSH.

Шаг 3 - Ограничение доступа к одному каталогу

На этом этапе мы изменим конфигурацию сервера SSH, чтобы отключить терминальный доступ для * sammy files *, но разрешить доступ для передачи файлов.

Давайте откроем файл конфигурации сервера SSH с помощью + vi + или вашего любимого текстового редактора (вот https://www.digitalocean.com/community/tutorials/install-and-using-the-vim-text-editor-on- a-cloud-server # модальное редактирование [краткое введение в + vi +])

sudo vi /etc/ssh/sshd_config

Прокрутите до самого конца файла и добавьте следующий фрагмент конфигурации:

/ И т.д. / SSH / sshd_config

. . .

Match User
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Затем сохраните и закройте файл.

Вот что делает каждая из этих директив:

  • + Match User + говорит серверу SSH применять следующие команды только к указанному пользователю. Здесь мы указываем * sammyfiles *.

  • + ForceCommand internal-sftp + заставляет SSH-сервер запускать SFTP-сервер при входе в систему, запрещая доступ к оболочке.

  • + PasswordAuthentication yes + разрешает аутентификацию по паролю для этого пользователя.

  • + ChrootDirectory / var / sftp / + гарантирует, что пользователю не будет разрешен доступ к чему-либо, кроме каталога + / var / sftp +. Вы можете узнать больше о chroot в https://www.digitalocean.com/community/tutorials/how-to-configure-chroot-environments-for-testing-on-an-ubuntu-12-04-vps[this Ubuntu- основанный на chroot учебник.

  • + AllowAgentForwarding no +, + AllowTcpForwarding no +. и + X11 Forwarding no отключил переадресацию портов, туннелирование и пересылку X11 для этого пользователя.

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

Чтобы применить изменения конфигурации, перезапустите службу.

sudo systemctl restart sshd

Теперь вы настроили сервер SSH для ограничения доступа к передаче файлов только для * sammyfiles *. Последний шаг - тестирование конфигурации, чтобы убедиться, что она работает как задумано.

Шаг 4 - Проверка конфигурации

Давайте удостоверимся, что наш новый пользователь * sammyfiles * может только передавать файлы.

Вход на сервер как * sammyfiles * с использованием обычного доступа к оболочке больше невозможен. Давай попробуем:

ssh sammyfiles@localhost

Перед возвратом к исходному приглашению вы увидите следующее сообщение:

Error messageThis service allows sftp connections only.
Connection to localhost closed.

Это означает, что * sammyfiles * больше не может получить доступ к оболочке сервера через SSH.

Далее, давайте проверим, может ли пользователь успешно получить доступ к SFTP для передачи файлов.

sftp sammyfiles@localhost

Вместо сообщения об ошибке эта команда покажет сообщение об успешном входе в систему с интерактивной подсказкой.

SFTP promptConnected to localhost.
sftp>

Вы можете перечислить содержимое каталога, используя + ls + в приглашении:

ls

Это покажет каталог + uploads +, который был создан на предыдущем шаге, и вернет вас в приглашение + sftp> +.

SFTP file list outputuploads

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

cd ..

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

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

Заключение

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

Сервер SSH допускает более сложные схемы конфигурации, включая ограничение доступа к группам или нескольким пользователям одновременно или ограниченный доступ к определенным IP-адресам. Вы можете найти примеры дополнительных параметров конфигурации и объяснение возможных директив в OpenSSH Cookbook. Если у вас возникнут какие-либо проблемы с SSH, вы можете отладить и исправить их с помощью этой серии SSH troubleshoot

Related