Перейти к содержанию

Настройка SFTP через дефолтный SSHD

Самый банальный способ, который:

  1. Работает без необходимости устанавливать различные sftp сервера (например mysecureshell)
  2. Умеет работать с PAM-модулями (привет доменная авторизация)

Создаем пользователя и группу

  1. Создаем пользователя, который будет иметь доступ к SFTP. Будем делать пользователя fuser:
    sudo useradd fuser
    
  2. Задаём ему пароль:
    sudo passwd fuser 
    
  3. Делаем группу sftpusers. В этой группе будут находиться все пользователи, которые будут иметь доступ к каталогам нашего sftp сервера:
    sudo groupadd ftpusers
    
  4. Добавляем нашего пользователя в группу:
    sudo usermod -G ftpusers fuser
    

Настраиваем каталог

  1. Создаем каталог по пути /var/sftp/shared:
    sudo mkdir -p /var/sftp/shared
    

Важно

Почему нужно создавать каталог именно так?

Чуть ниже мы будем давать доступ к /var/sftp. У пользователя будет виден только каталог shared. Для chroot важно, чтобы он имел доступ к корневому каталогу.

  1. Выдаем доступы на группу и на чтение с записью:
    sudo chown root:ftpusers /var/sftp/shared
    sudo chmod 770 /var/sftp/shared
    

Настраиваем SFTP-сервер

  1. Открываем файл на редактирование /etc/ssh/sshd_config любимым редактором
  2. Добавляем в него следующие строчки:

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

    Разберемся, что делает каждая из строчек:

    • Match User fuser - следующие строчки будут применены для юзера fuser
    • ForceCommand internal-sftp - подключаем юзера через SFTP, доступ в шелл отключается
    • ChrootDirectory /var/sftp - ограничиваем доступ пользователя только в рамках папки /var/sftp
    • PermitTunnel no - запрещаем делать тонелли
    • AllowAgentForwarding no - запрещаем agent forwarding
    • AllowTcpForwarding no - запрещаем перенаправлять tcp пакеты
    • X11Forwarding no - запрещаем форвардить графические приложения
  3. Сохраняем файл

  4. Рестартуем сервис: systemctl restart sshd

Траблшутинг

В случае чего имеет смысл включить дебаг в /etc/ssh/sshd_config и посмотреть логи. Как правило, в логах всё написано.
Сам лог зачастую находится в /var/log/sshd или /var/log/auth.log