Разрешить SFTP, но запретить SSH?


94

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

Я хочу дать своим «клиентам» право управлять своими файлами на сервере. Я ненавижу FTP, поскольку он небезопасен и, по моему мнению, устарел.

Поэтому я хотел бы разрешить моим пользователям подключаться через SFTP, но не разрешать им подключаться через SSH. (Я знаю, я знаю, SFTP использует SSH). Но мне было просто интересно, возможно ли это?

Поэтому мне не нужно было устанавливать FTP-сервер на сервере, и все было бы здорово!

Ответы:


121

Начиная с версии 4.9 OpenSSH (недоступно в centos 5.x, но функция ChrootDirectory была перенесена обратно) имеет internal-sftpподсистему:

Subsystem sftp internal-sftp

А затем заблокировать другое использование:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Добавьте своих пользователей в sftponlyгруппу. Вы должны изменить домашний каталог пользователя /из-за chroot и /home/userдолжен принадлежать root. Я также установил бы /bin/falseв качестве оболочки пользователя.


Вау! Супер классный! Я проверю это и вернусь сюда, чтобы проверить. Большое спасибо!
Томми Б.

+1 за вещь ChrootDirectory!
Кайл Ходжсон

1
После этого мой sftponly пользователь не может получить доступ по ssh и может подключиться по sftp. Однако он не может увидеть ни одного файла! Несмотря на то, что эти файлы имеют разрешение для этого пользователя. :-(
Эмилио Николас

3
Если вы хотите сделать это и найти запись в вашем sshd_config с уже существующим "/ usr / lib / openssh / sftp-server", проверьте здесь: serverfault.com/questions/660160/… - internal-sftp is "более новый , лучше и проще "
Xosofox

19

Существует оболочка, которая делает это. Это может также chroot .


Это было бы здорово, если вам нужны как пользователи SFTP, так и пользователи SSH. Вы просто заменяете оболочку в / etc / passwd для тех, кто ограничен только SFTP.
Драгос

4

Checkout rssh, который является поддельной оболочкой, которая позволяет sftp, но запрещает ssh

Подробнее о RSSH

http://www.pizzashack.org/rssh/

Обороты

http://pkgs.repoforge.org/rssh/

Вы можете настроить rssh, чтобы разрешить / запретить различные варианты поведения, такие как sft, scp и т. Д.


Приятно. Это самый простой способ настройки, вообще не касаясь sshd_config. Просто измените оболочку в файле passwd и готово.
Томофуми

2

Вы можете изменить / etc / passwd и дать этому пользователю поддельную оболочку, чтобы он не мог использовать ssh.


11
Вы проверяли это?
Сплаттне

8
Когда я пытаюсь установить оболочку, /bin/falseни ssh, ни sftp не работают
Брэд Мейс,

2
/ bin / false запрещает вход в систему любого типа, это неправильный подход. Принятый ответ от Роба Ваутерса: как ограничивать пользователей только SFTP, а не менять оболочку. Если вы захотите поменять оболочку, то хорошая идея @ Stone's asnwer.
Jwbensley

1
Итак, КАКУЮ оболочку следует использовать при условии, что / bin / bash неприемлем, а / bin / false или / sbin / nologin запрещают доступ?
Путник

1

Я использую метод указания пользовательской оболочки как / bin / false, как уже упоминалось. Однако вы должны убедиться, что / bin / shell находится в / etc / shells. Тогда это работает ssh = no ftp = ok.

Я также использую vsftpd и добавляю этот
chroot_local_user = YES в /etc/vsftpd/vsftpd.conf, чтобы ftp-пользователи не могли видеть дату, отличную от их собственной.

Преимущество этих простых изменений - не надоедает конфигурация конфигурации ssh для каждого пользователя.


1

Не забудьте найти строку UsePAM yesи прокомментировать ее:

#UsePAM yes

Без отключения этого ваш SSH-сервер зависнет при перезагрузке / перезапуске. Поскольку вам не нужны необычные функции PAM, это нормально.


0

Настройка ssh для включения только sftp для некоторых выбранных пользователей - это хорошая идея, и она работает правильно при условии, что вы устанавливаете либо, scponlyлибо rssh.

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

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

Простой способ обеспечить функционирование «ftp» с правильно работающей тюрьмой, поддержку SSL / TLS для безопасных транзакций и входа в систему - это использовать «старый, но работающий» VSFTPD, который устанавливается быстро и чисто и предлагает всю конфигурируемость по мере необходимости и, наконец, последний но не в последнюю очередь: это работает!

Маурицио.


0

К сожалению, все ответы вводят в заблуждение: пожалуйста, сделайте следующее:

  1. Сначала создайте пользователя sftp и группу sftp

  2. Создайте отдельный каталог как root для файлов SFTP: sudo mkdir -p /home/sftpdir

  3. Имейте проверенный файл sshd_config, который разрешает SSH через порт 22, но также и SFTP на случайном порту по соображениям безопасности
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Перезапустите и проверьте состояние службы sshd.

    sudo service sshd перезапустить

    сервисный sshd статус

  2. Создайте файл оболочки. Добавить выполнение, чтобы отобразить уведомление

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Эта учетная запись ограничена только доступом SFTP."' | sudo tee -a / bin / sftponly

  3. Дать разрешения на выполнение и добавить в файл оболочки

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. наконец, проверьте, и вы не сможете подключиться.

  5. Шаблон для использования клиента SFTP с ключом SSH и базовым многословием:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.