Как настроить Chrooted SFTP в Linux
В этом руководстве объясняется, как настроить Chrooted SFTP в Linux, чтобы ограничить доступ пользователей SSH к домашнему каталогу или к любому конкретному каталогу. Другими словами, мы собираемся заставить пользователей перейти в определенный каталог и установить для их оболочки значение /bin/nologin
или какую-либо другую оболочку, которая запрещает доступ к вход по ssh. После настройки chrooted SFTP пользователи могут получить доступ только к назначенному им домашнему каталогу, но не ко всей файловой системе.
Преимущества Chrooted SFTP
Включение chrooted-доступа по SFTP дает следующие преимущества:
- Разрешите пользователям подключаться только через SFTP, но не разрешайте им подключаться через SSH.
- Ограничьте сеанс пользователя SSH своим домашним каталогом или определенным каталогом по вашему выбору.
- Ограничьте доступ SSH для определенных пользователей и по-прежнему разрешите им передавать файлы между локальными и удаленными системами.
- Запретить пользователю доступ ко всей файловой системе.
Теперь давайте продолжим и настроим Chrooted SFTP, чтобы ограничить пользователей SSH домашним каталогом и/или любым другим каталогом с Chrooted Jail в Linux.
Это руководство официально протестировано на дистрибутивах Debian 11 Bullseye, Ubuntu 20.04 LTS и Ubuntu 18.04 LTS. Однако приведенные ниже шаги должны работать в любых дистрибутивах Linux, поддерживающих openSSH.
Настройка Chrooted SFTP в Linux
Начиная с версии 4.9, в openSSH есть функция подсистема внутреннего sftp , которая разрешает только доступ по SFTP, но не по SSH. Таким образом, пользователи могут иметь доступ только к данным с сервера, но не могут получить к ним доступ через SSH.
Создать каталог Chrooted
Сначала создайте chrooted-каталог с помощью команды:
sudo mkdir /sftp
Сделайте этот каталог полностью принадлежащим пользователю root
с помощью команды:
sudo chown root:root /sftp/
В этом каталоге создайте отдельные каталоги для каждого пользователя, например /sftp/user1
, /sftp/user2
, и /sftp/user3
и т. д.
Для целей этого руководства я собираюсь создать каталог под названием ostechnix
в каталоге /sftp
.
sudo mkdir /sftp/ostechnix
Это каталог, в котором пользователи могут сохранять данные. Кроме того, пользователи не могут выйти за пределы этого каталога. Это похоже на их каталог $HOME.
Создайте группу sftp и назначьте пользователей в эту группу.
Теперь нам нужно создать пользователей, которые смогут получить доступ к chroot-каталогу SFTP.
Создайте группу под названием sftponly
, как показано в следующей команде:
sudo groupadd sftponly
Затем создайте новых пользователей SFTP или назначьте существующих пользователей в группу "sftponly"
, как показано ниже.
Позвольте мне создать нового пользователя, например senthill, и назначить его в группу "sftponly"
. Затем настройте его домашний каталог как /sftp/ostechnix
и оболочку по умолчанию как /sbin/nologin
.
Мы можем сделать это, используя следующую онлайн-команду:
sudo useradd -g sftponly -d /ostechnix -s /sbin/nologin senthil
Установите пароль для вновь созданного пользователя с помощью команды:
sudo passwd senthil
Чтобы изменить существующего пользователя, используйте команду "usermod"
вместо команды "useradd"
, как показано ниже:
sudo usermod -g sftponly -d /ostechnix -s /sbin/nologin senthil
Назначьте правильные разрешения для chrooted-каталога.
Вам необходимо назначить соответствующие разрешения пользователям SFTP для доступа к их домашнему каталогу, как показано ниже.
sudo chown senthil:sftponly /sftp/ostechnix
sudo chmod 700 /sftp/ostechnix/
Другие пользователи SFTP не могут получить доступ к этому каталогу.
Аналогичным образом назначьте соответствующие разрешения всем остальным пользователям SFTP.
Рекомендуемая загрузка - Бесплатная электронная книга: «Изучите Linux за 5 дней»
Настройка chrooted SFTP
Отредактируйте файл /etc/ssh/sshd_config
:
sudo vi /etc/ssh/sshd_config
Найдите и закомментируйте следующие строки (т. е. добавьте перед ними звездочку #, чтобы закомментировать).
#Subsystem sftp /usr/libexec/openssh/sftp-server
В некоторых дистрибутивах, например Ubuntu 18.04 LTS, найдите и закомментируйте следующую строку:
#Subsystem sftp /usr/lib/openssh/sftp-server
Затем добавьте следующие строки в конец файла:
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /sftp/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Настройка chrooted SFTP
Если вы хотите ограничить пользователей каталогом $HOME
, просто замените /sftp
на /home
в приведенном выше коде. Убедитесь, что вы указали правильный путь к каталогу sftp. Нажмите ESC и введите :wq
, чтобы сохранить файл и выйти.
Перезапустите службу ssh
, чтобы обновить изменения.
sudo systemctl restart sshd
Теперь попробуйте подключиться к этой системе по SSH из любой другой системы в сети, используя пользователя sftp (т. е. в нашем случае Senthil).
ssh senthil@192.168.122.181
Вы получите следующее сообщение об ошибке.
senthil@192.168.122.181's password:
This service allows sftp connections only.
Connection to 192.168.122.181 closed.
Здесь 192.168.122.181 — это IP-адрес моей удаленной системы Debian, где я настроил SFTP.
Доступ к удаленной системе можно получить только с помощью sftp, как показано ниже.
$ sftp senthil@192.168.122.181
senthil@192.168.43.2's password:
Connected to 192.168.43.2.
sftp>
Видеть? Пользователь «sentil» может подключиться через sftp, но не через ssh.
Чтобы узнать текущий рабочий каталог, используйте команду 'pwd'
:
sftp> pwd
Remote working directory: /ostechnix
sftp>
Настройка chrooted SFTP в Linux
Основные команды SFTP
Мы можем подключиться, используя альтернативный порт, используя флаг -p
.
sftp -P <port_number> remote_user@remote_host
Чтобы перенести удаленный файл в локальную систему, выполните:
sftp> get /path/remote_file
Мы можем передать локальный файл в удаленную систему с помощью команды:
sftp> put /path/local_file
Чтобы рекурсивно перенести удаленную папку в локальную систему:
sftp> get -R /path/remote_folder
Чтобы отобразить список файлов на локальном компьютере:
sftp> lls
Чтобы отобразить список файлов на удаленном компьютере:
sftp> ls
Более подробную информацию об использовании sftp можно найти на страницах руководства.
man sftp
Заключение
В этом руководстве мы обсудили, как настроить chrooted SFTP в операционных системах Linux, таких как Debian и Ubuntu.
Рекомендуем прочитать:
- Как настроить SFTP-сервер с помощью SFTPGo в Linux
- Как изменить порт FTP по умолчанию на собственный порт
- Установить сервер VSFTPD в Ubuntu
- Безопасный сервер VSFTPD с шифрованием TLS/SSL в Ubuntu
- Пошаговая настройка FTP-сервера в CentOS
- FTP_Manager: простой скрипт для установки и управления FTP-сервером в CentOS