Как настроить ограниченный SFTP-сервер в Ubuntu?

81

Я хотел бы знать, как настроить учетные записи пользователей root, sudo, sftp, для которых не требуется аутентификация с открытым ключом при входе в систему. Я также хотел бы знать, как настроить домашние каталоги пользователей sftp only, где они не может получить доступ к верхним уровням других каталогов.

Юя Кобаяши
источник

Ответы:

91

Лучший ресурс, который поможет вам начать настройку службы ssh на хост-компьютере с использованием Ubuntu, - это OpenSSH Server . Это позволит вам использовать SSH File Transfer Protocol (также Secure File Transfer Protocol или SFTP) для доступа, передачи и управления файлами по SSH с клиентского компьютера.

Обзор решения

  • В Ubuntu вы можете настроить OpenSSH serverна хост-компьютере, а затем пользователь может использовать sshдля подключения от клиента к серверу хоста, используя только имя пользователя и пароль. Обратите внимание, однако, что аутентификация с открытым ключом рекомендуется,

«Убедитесь, что у вас есть надежный пароль перед установкой SSH-сервера (вы можете вообще отключить пароли

  • Учетные записи администраторов, созданные на хосте, будут иметь права sudo, а учетные записи стандартных пользователей, созданные на хосте, - нет.

Установите и настройте сервер OpenSSH на хосте

Чтобы установить сервер OpenSSH на хосте:

sudo apt-get install openssh-server

Дайте вашему хосту статический IP-адрес, чтобы вы могли надежно подключиться к нему:

nm-connection-editor

Чтобы настроить сервер OpenSSH , «сначала сделайте резервную копию файла sshd_config, скопировав его в домашний каталог или сделав копию только для чтения в / etc / ssh, выполнив:»

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

«После создания резервной копии sshd_configфайла вы можете вносить изменения в любом текстовом редакторе, например:»

sudo -H gedit /etc/ssh/sshd_config

Чтобы изменения вступили в силу, необходимо перезапустить службу ssh на хосте.

sudo service ssh restart

Рассмотрим следующие меры безопасности

  • Не включайте переадресацию портов на вашем маршрутизаторе: когда посторонний просит ваш маршрутизатор подключить постороннего к порту 22 и т. Д., Ваш маршрутизатор не будет соответствовать, если вы не включили переадресацию портов
  • Отключить root-логин: закомментировать PermitRootLogin without-password; добавить PermitRootLogin noв Хост/etc/ssh/sshd_config
  • Выберите нестандартный порт SSH: закомментируйте Port 22; добавить Port <new-port-number>в Хост/etc/ssh/sshd_config
  • Разрешить только локальные подключения: Добавить ListenAddress 192.168.0.10
  • Разрешить определенных пользователей на определенных портах: добавить AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>или AllowUsers <username>@111.222.333.*к хостам/etc/ssh/sshd_config
  • Разрешить только соединения с ключом RSA (без пароля): добавьте содержимое ~/.ssh/id_rsa.pubкаждого клиента в качестве новой строки хостов ~/.ssh/authorized_keys. Затем добавьте PasswordAuthentication noв Хост/etc/ssh/sshd_config
  • Медленные попытки взлома злоумышленников: используйте ufw (несложный межсетевой экран) на хосте, чтобы ограничить количество входящих соединений до 10 в минуту: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Дополнительные идеи см. В разделе Обеспечение безопасности доступа SSH.

Если вы чувствуете, что должны, включите PasswordAuthenticationв вашем sshd_configфайле

Найдите строку с фразой PasswordAuthenticationи заставьте ее читать:

PasswordAuthentication yes

Сохраните новый sshd_configфайл и перезапустите sshслужбу хоста :

sudo service ssh restart

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

Обратите внимание на порт, который sshслужба хоста прослушивает в sshd_configфайле, и настройте маршрутизатор для пересылки трафика TCP / UDP, направленного на этот порт, на IP-адрес вашего сервера OpenSSH.

Подключитесь к хосту и войдите через командную строку или терминал

  • Чтобы открыть терминал оболочки SFTP как <username>на хосте, откройте терминал на клиенте и введите следующую команду, заменив 123.123.1.23его IP-адресом хоста:

    sftp <username>@123.123.1.23
    
    • Если вы изменили номер порта, который прослушивает сервер OpenSSH хоста, выполните:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Чтобы открыть терминал оболочки SSH как <username>на хосте, откройте терминал на клиенте и введите следующую команду, заменив 123.123.1.23его IP-адресом хоста:

    ssh <username>@123.123.1.23
    
    • Если вы изменили номер порта, который прослушивает сервер OpenSSH хоста, выполните:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Подключитесь к хосту и войдите в систему через файловый менеджер с графическим интерфейсом (например, Nautilus) для более наглядного доступа к SFTP для передачи файлов

  1. Откройте Nautilus на клиенте
  2. Выберите «Файл»> «Подключиться к серверу».
  3. Тип: SSH
  4. Сервер: введите IP-адрес хоста
  5. Порт: номер порта, указанный в sshd_configфайле хоста
  6. Имя пользователя: имя пользователя
  7. Пароль: пароль

введите описание изображения здесь

В 14.04:

  1. Откройте Nautilus на клиенте
  2. Подключиться к серверу
  3. Введите: `ssh @ 123.123.1.23:

Создание стандартных учетных записей пользователей на узле с ограниченными правами доступа к файлам за пределами их домашней папки

Надлежащие разрешения на доступ к файлам на хосте гарантируют, что каждый стандартный пользователь (без привилегий sudo), который вы создаете на хосте, будет владельцем своего /home/new_userкаталога, но у него будут ограниченные разрешения с остальной частью структуры каталога.

  • Ограниченные разрешения не обязательно означают, что они не могут просматривать имена файлов и структуру каталогов.

Надеюсь, это полезно!

JTD
источник
9
Мне кажется, что ответ, хотя и выглядит очень всеобъемлющим, на самом деле не отвечает на самую трудную часть вопроса ОП: «где они не могут получить доступ к другим каталогам верхнего уровня». Если реализовано, как указано выше, пользователь сможет прочитать подавляющее большинство структуры каталогов.
ostergaard
2
Чтобы расширить комментарий @ ajostergaard, это создает обычного пользователя Unix и предоставляет им доступ по SSH и SFTP. Обычный пользователь Unix (не root) может по-прежнему иметь доступ и просматривать очень большое количество конфиденциальных файлов, таких как конфигурация веб-сервера и многое другое. Это определенно небезопасно и определенно не соответствует ограничению, требуемому ФП.
Саймон Вудсайд
50

Шаг 1: Установите пакет OpenSSH, если он не установлен

sudo apt-get install openssh-server

Шаг 2: Создайте отдельную группу для пользователей SFTP.

sudo addgroup ftpaccess

Шаг 3: отредактируйте /etc/ssh/sshd_configфайл и внесите изменения, как показано ниже. Найдите и прокомментируйте ниже строки.

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

и добавьте эти строки в конец файла.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Шаг 4: Перезапустите службу sshd.

sudo service ssh restart

Шаг 5: Добавьте пользователя с группой ftpaccess и создайте пароль.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Шаг 6: Изменить разрешение домашнего каталога.

sudo chown root:root /home/paul

Шаг 7: Создайте каталог внутри дома для загрузки и измените разрешение с группой.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

Вот и все .

Обратитесь: Настройка SFTP на Ubuntu

ytgmuabm
источник
Это, кажется, правильный ответ. Я не проверял это, но, по крайней мере, упомянул главную трудность, ограничивающую путь просмотра.
Мухаммед Нурельдин
Я проверил его, и он был слишком разрешительным, поскольку по умолчанию разрешения для домашней папки были 755. Я сделал sudo chmod 711это для домашней папки, и она позволила мне перейти только по ftp в папку www. Пока
выглядит
0

Denyhosts - это еще один инструмент, помимо упомянутого jtd, на который вы, возможно, захотите взглянуть. Он может автоматически блокировать повторные попытки подключения к вашему SSH-серверу. Доступно для установки в репозитории Ubuntu.

firefly2442
источник
Пакет Денихостс доступен только для ясных (10.04LTS) и точных (12.04LTS). packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
Denyhosts больше не доступен в репозиториях Ubuntu, хотя его можно установить другим способом, но он давно не обновлялся. Таким образом, не стоит использовать Denyhosts.
Файзан Акрам Дар
0

Ограничить доступ к пользователю

Здесь мы только позволим пользователю выполнять передачу файлов и отключим доступ к терминалу.

Для этого добавьте следующие коды внизу файла конфигурации.

$ sudo nano /etc/ssh/sshd_config

Теперь файл откроется и вставьте код.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Замените filemgна ваше имя пользователя. Затем сохраните и закройте файл.

Вот и все.

Ссылка: Как использовать SFTP в Ubuntu 16.04

Аймал
источник