Вступление
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