Настройка SFTP доступа

  • 13 851
  • 2
  • 100,00%
  • 5

Если по какой-то причине потребовалось дать удаленный доступ к файлам на компьютер под управлением операционной системы из семейства Linux, то безопаснее всего будет это сделать через SFTP. SFTP обозначает SSH File Transfer Protocol, и не имеет никакого отношения к обычному FTP протоколу, а так же в разы безопаснее. Однако, приступим к настройке.

Опубликованные ниже манипуляции проводились с операционной системой Debian 7.

Создание пользователя для SFTP

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

useradd -m -s /sbin/nologin crazyadmin

-m - указывает необходимость создать домашнюю директорию пользователя в каталоге /home;
-s - задает оболочку пользователя - /sbin/nologin запрещает пользователю использовать shell.
crazyadmin - имя пользователя

Устанавливаем созданному пользователю пароль:

passwd crazyadmin

Если что-то пошло не так, то всегда можно удалить пользователя командой userdel username, например:

userdel crazyadmin

И создадим для нового пользователя папку chroot, о её предназначении будет рассказано ниже.

mkdir /home/crazysadmin/chroot

Настройка сервера SSH

Теперь отправляемся в конфиг SSH - /etc/ssh/sshd_config

Ищем следующую строчку:

Subsystem sftp /usr/lib/openssh/sftp-server

и меняем на

Subsystem sftp internal-sftp

Теперь отправляемся в самый конец конфига, и там дописываем:

Match User crazyadmin
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
        PermitTunnel no
        ForceCommand internal-sftp
        ChrootDirectory %h/chroot

ChrootDirectory - родительский каталог той папки, к которой мы хотим открыть доступ по SFTP. В данном примере используется директория chroot, которая лежит в папке пользователя.

Если на вашем сервере настроен доступ по SSH только через файл ключа, а нужно сделать возможность заходить по паролю, то тогда дописываем еще следующее:

PasswordAuthentication yes
Если на сервере установлен метод авторизации по паролю, а есть желание сделать более надежную авторизацию через файл ключа, то можно воспользоваться данной статьей.

После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:

service ssh restart

Настройка директорий для пользователя SFTP

Отправляемся в директорию /home и там ищем папку свежесозданного пользователя, а в ней папку chroot. Устанавливаем её владельцем пользователя root:

chown root:root /home/crazyadmin/chroot

Устанавливаем нужные права на папку:

chmod 755 /home/crazyadmin
Внимание! Ни в коем случае не следует выставлять ChrootDirectory какие-либо другие права, в таком случае будет выскакивать следующая ошибка: fatal: bad ownership or modes for chroot directory component.

Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:

Допустим нам нужно разрешить доступ к папке /var/www/sysadmin.ru. Создаем в домашнем каталоге пользотвателя /home/crazyadmin папку с названием sysadmin.ru.

mkdir /home/crazyadmin/sysadmin.ru

Теперь смонтируем в эту папку ту директорию, доступ к которой нам нужно обеспечить:

mount --bind /var/www/sysadmin.ru/ /home/crazyadmin/sysadmin.ru/chroot

Выставляем необходимые для редактирования права для нашей директории /var/www/sysadmin.ru:

chmod 777 /var/www/sysadmin.ru
find /var/www/sysadmin.ru -type f -exec chmod 664 {} +
find /var/www/sysadmin.ru -type d -exec chmod 777 {} +

Если в процессе монтирования директории что-то пошло не так, то можно убрать монтирование командой unmount:

umount /home/crazysyadmin/sysadmin.ru

На этом настройка SFTP сервера завершена.

Частые ошибки

  • fatal: bad ownership or modes for chroot directory component - как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
  • No supported authentication methods available (server sent public key) - сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.


Оценить статью

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
(Голосов: 5, Рейтинг: 5,00 из 5,00)

Комментарии:

    • Carambe

    Ребята, подскажите пожалуйста в чем может быть проблема.
    Конфигурация:
    Port 22
    Protocol 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    UsePrivilegeSeparation yes

    KeyRegenerationInterval 3600
    ServerKeyBits 1024

    SyslogFacility AUTH
    LogLevel INFO

    LoginGraceTime 120
    PermitRootLogin no
    StrictModes yes

    RSAAuthentication yes
    PubkeyAuthentication yes

    IgnoreRhosts yes
    RhostsRSAAuthentication no
    HostbasedAuthentication no

    PermitEmptyPasswords no

    ChallengeResponseAuthentication no

    X11Forwarding yes
    X11DisplayOffset 10
    PrintMotd no
    PrintLastLog yes
    TCPKeepAlive yes

    AcceptEnv LANG LC_*

    Subsystem sftp internal-sftp

    UsePAM yes

    Match User testuser
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no
    PermitTunnel no
    ForceCommand internal-sftp
    ChrootDirectory %h/chroot

    (/home/testuser - root:root; /home/testuser/chroot - testuser:testuser)

    1. В параметре MatchUser - работает, только если указывать группу, а не пользователя. Если прописывать параметр MatchGroup - то не работает.
    2. При подключении вижу все корневые папки.

      • Recluse

      В логах есть что-нибудь, какие-нибудь ошибки?

      И как минимум я вижу, что у /home/testuser владельцем должен быть testuser, а у /home/testuser/chroot владельцем должен быть root:root.

Добавить комментарий

Ваш e-mail не будет опубликован.