Як налаштувати обмежений SFTP-сервер на Ubuntu?


81

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

Відповіді:


91

Найкращий ресурс, який допоможе вам почати налаштовувати службу ssh на хост-машині за допомогою Ubuntu - OpenSSH Server . Це дозволить вам використовувати протокол передачі файлів SSH (також захищений протокол передачі файлів або 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 на Host, щоб ці зміни набули чинності

sudo service ssh restart

Розглянемо наступні заходи безпеки

  • Не вмикайте переадресацію портів на маршрутизаторі: коли сторонній користувач просить ваш маршрутизатор підключити сторонніх осіб до порту 22 тощо, ваш маршрутизатор не виконує вимоги, якщо ви не включили переадресацію портів
  • Вимкнути логін із коренем: коментувати 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 (непростий брандмауер) на Host, щоб обмежити вхідні з'єднання до 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-сервера.

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

  • Щоб відкрити термінал оболонки SFTP як <username>на Host, відкрийте термінал на клієнті та введіть таку команду, замінивши 123.123.1.23IP-адресу хоста:

    sftp <username>@123.123.1.23
    
    • Якщо ви змінили номер порту, який слухає сервер OpenSSH хоста, зробіть:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Щоб відкрити термінал оболонки SSH як <username>на Host, відкрийте термінал на клієнті та введіть таку команду, замінивши 123.123.1.23IP-адресу хоста:

    ssh <username>@123.123.1.23
    
    • Якщо ви змінили номер порту, який слухає сервер OpenSSH хоста, зробіть:

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

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

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

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

У 14.04:

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

Створіть стандартні облікові записи користувачів на хості з обмеженими дозволами на файли поза їх домашньою папкою

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

  • Обмежені дозволи не обов'язково означають, що вони не можуть переглядати назви файлів та структуру каталогів.

Сподіваюся, що це корисно!


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


Це здається правильною відповіддю. Я не перевіряв це, але принаймні згадував про основні труднощі, обмежуючи шлях перегляду.
Мухаммед Нурелдін

Я перевірив це, і це було занадто дозволено, через те, що за замовчуванням до домашньої папки було 755. Я робив це sudo chmod 711на домашній папці, і це дозволило мені перейти лише до папки www. Поки здається, що добре, але, можливо, інші можуть
задзвонити

0

Denyhosts - це ще один інструмент, окрім згаданих компанією "jtd", про який ви можете поглянути. Він може автоматично блокувати повторні спроби підключення до вашого SSH-сервера. Він доступний для встановлення в сховищах Ubuntu.


Заборона на упаковці доступна лише для легких (10.04LTS) та точних (12.04LTS). packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB

Denyhosts більше не доступний у сховищах Ubuntu, хоча він все ще може бути встановлений іншим методом, але він давно не оновлювався. Таким чином, не розумно використовувати Denyhosts.
Faizan Akram Dar

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.