Дозволити 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-сервером", перевірте тут: serverfault.com/questions/660160/… - Internal -sftp є "новішим" , краще та простіше »
Xosofox

19

Існує оболонка scponly , що робить це. Це може також хротуватись .


Це було б чудово, якщо вам потрібні як користувачі SFTP, так і SSH. Ви просто замінюєте оболонку в / etc / passwd на ті, які обмежені лише SFTP.
Драгос

4

Checkout rssh - це підроблена оболонка, яка дозволяє sftp, але заперечує ssh

Більше про RSSH

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

RPM

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

Ви можете налаштувати rssh, щоб дозволити / заперечити різні поведінки, такі як sft, scp тощо.


Приємно. Це найпростіший спосіб налаштування, не торкаючись sshd_config взагалі. Просто поміняйте оболонку в файл passwd і зробіть.
Томофумі

2

Ви можете змінити / etc / passwd і надати цьому користувачу підроблену оболонку, щоб він не міг використовувати ssh.


11
Ви це тестували?
splattne

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

2
/ bin / false - це забороняти будь-який тип входу, це не правильний підхід. Прийнята відповідь від Rob Wouters 'полягає в тому, як ви повинні обмежувати користувачів лише SFTP, а не змінюючи оболонку. Якщо ви хотіли змінити оболонку @ asnwer Стоун, це буде хорошою ідеєю.
jwbensley

1
Отже, ЩО слід використовувати оболонку, якщо / bin / bash неприйнятна, а / bin / false або / sbin / nologin забороняють доступ?
Путник

1

Я використовую метод визначення оболонки користувача як / bin / false, як згадувалося. Однак ви повинні переконатися, що / bin / shell знаходиться в / etc / shell. Тоді він працює ssh = no ftp = добре.

Я також використовую vsftpd і додаю цей
chroot_local_user = ТАК у /etc/vsftpd/vsftpd.conf, щоб ftp-ers не бачив дату, іншу, ніж свою.

Перевагою цих простих змін є не дратівлива конфігурація для налаштування 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. Створіть окремий каталог як корінь для файлів 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. Створіть файл Shell. Додати виконання, щоб повторити повідомлення про сповіщення

    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 / тощо / оболонки

  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.