Стаття також доступна російською (перейти до перегляду).
Вступ
- Чому SFTP потрібно використовувати. У чому його перевага перед FTP
- У чому різниця між SFTP та FTPS
- Використання SFTP, основні команди
Відомі мережеві протоколи передачі даних та їх «безпечні» аналоги, наприклад, такі як FTP, FTPS чи SCP мають значні недоліки, як у плані безпеки, так і обмеження функціональності. І тому, постійно йде пошук та розробка більш досконалих протоколів та методів роботи з мережевими даними. Одним із таких «сучасних» варіантів мережевого протоколу є SFTP, котрий має розширену функціональність та деякі переваги у захисті даних, що передаються по мережі. Розглянемо особливості вказаного механізму та продемонструємо його використання на практиці.
Як працювати з SFTP через програму WinSCP читайте за посиланням.
Чому SFTP потрібно використовувати. У чому його перевага перед FTP
Протокол SFTP (SSH File Transfer Protocol) розроблявся, насамперед, як підсистема та розширення до SSH-2 (Secure Shell). Саме це і обумовило подальший розвиток його функціональностей та можливостей. Так, він завжди працює понад безпечного каналу передачі даних, і тому вихідними положеннями є те, що сервер вже аутентифікував клієнта і що йому доступні дані користувача. Тобто, сам він не забезпечує автентифікацію та безпеку, а використовує можливості протоколу базового рівня, а саме SSH. Це звільняє його від «зайвого тягаря» і дає можливість обслуговувати інші напрямки, зокрема, роботу з віддаленою файловою системою. І тому, цей механізм вважається проміжною ланкою між засобами передачі даних та засобами керування віддаленими файловими системами.
Така будова, зокрема, дозволяє пов`язувати файли, що завантажуються, з їх основними атрибутами, наприклад, відмітками часу. У цьому полягає його універсальність у порівнянні із іншими подібними механізмами, наприклад, FTP чи FTPS, котрі орієнтовані лише на забезпечення передачі даних.
SFTP шифрує не тільки управляючі команди, але й дані, що передаються. Це унеможливлює перехоплення конфіденційної інформації користувача – паролів та інших даних. Що ж стосується стандартного FTP, то тут дані взагалі не шифруються, а передаються по мережі відкритим текстом. Це дозволяє зловмисникам за допомогою певних втручань викрадати дані. Зокрема, найбільш часто ними застосовуються приховані атаки типу bounce attacks, spoof-атаки, sniffing та деякі інші.
Як варіант підвищення рівня безпеки при роботі з FTP, почали використовувати механізм тунелювання FTP-сесій через SSH-з`єднання. При такому підході вдається захистити лише канал з управляючими командами, а канали з даними, як і раніше, залишаються незахищеними. Тобто, тут відсутній цілісний захист, а лише частковий.
SFTP менш залежний від платформи, ніж той же SCP, і тому його сервери вже зараз доступні для більшості існуючих платформ. Він є двохстороннім, що дозволяє переривати передачу файлів, не завершуючи сеанс, на відміну від інших засобів. Однак, швидкість передачі даних з-за цього є меншою, ніж у SCP.
Стосовно функціональності, SFTP та FTP мають деякі спільні риси, зокрема, це східний набір команд для керування передачею за технологією «клієнт-сервер».
У чому різниця між SFTP та FTPS
У порівнянні з SFTP, протокол FTPS має принципово відмінну будову та принципи функціонування. Він є розширенням FTP.
FTPS (File Transfer Protocol + SSL) є ще однією спробою підвищити рівень захисту даних. Тут додаються можливості криптографічного кодування даних за допомогою механізму SSL (Secure Sockets Layer). Це підвищує транспортний рівень безпеки та захист сокетів. Завдяки цьому стає можливим забезпечити автентифікацію ключів обміну та використання симетричного шифрування для забезпечення певного рівня конфіденційності інформації, що передається.
SSL не залежить від будь-якого прикладного протоколу та надає певний безпечний канал передачі. По суті, SSL виконує фільтруючі функції між FTP, тобто клієнтом, та протоколом транспортного рівня TCP/IP. Тобто, він працює в багатошаровому середовищі, що сприяє безпеці обміну інформацією. Безпечне з`єднання тут відкрите лише для цільових користувачів. Він здатний виконати автентифікацію серверу ще до початку роботи протоколу FTP. На даний момент механізм є SSL застарілим, а підтримується його більш «сучасна» версія - TLS (Transport Layer Security).
Таким чином, FTPS не є самостійним протоколом, а лише комбінацією FTP та механізму кодування SSL/TLS, що дозволяє утворити певний двосторонній фільтр між клієнтом та «транспортом» у багатошаровому середовищі. На відміну від нього, SFTP є відносно незалежним протоколом, котрий завжди працює понад захищеного каналу передачі, насамперед, SSH та об`єднує у собі можливості засобів передачі даних та управління файловою системою.
Використання SFTP, основні команди
На нашій локальній та віддаленій машинах встановлена OS Ubuntu 20.04. Перед початком роботи необхідно встановити або перевірити існуючий зв`язок із віддаленим сервером за допомогою стандартних засобів SSH. Рекомендуємо одразу ж налагодити автентифікацію за допомогою відкритих SSH-ключів, що є набагато надійнішим, ніж автентифікація за паролем. Введемо у терміналі:
$ ssh alexandr75001@176.9.11.135
Після підтвердження згоди на встановлення зв`язку, наш хост буде занесено до списку довірених хостів, як показано нижче.
Після повторного введення команди з`єднання, віддалений хост запросить пароль доступу для користувача alexandr75001, оскільки у нас налаштована автентифікація за паролем.
Після введення паролю, нам надано доступ до віддаленої машини, тобто зв`язок перевірено.
Для повернення назад, введемо відповідну команду:
$ exit
Тепер спробуємо встановити сеанс SFTP. Для цього введемо у терміналі:
$ sftp alexandr75001@176.9.11.135
Після введення паролю, сеанс відкривається і у командній строчці бачимо запрошення типу «sftp>»
За замовченням, для з`єднання використовується порт 22. Але, якщо б ми працювали з іншим портом SSH, котрий налаштовується, то у команді ми повинні були б його вказати. Її формат у цьому випадку буде наступним:
$ sftp -oPort=N alexandr75001@176.9.11.135
де N – номер порту, який нам потрібний для з`єднання, наприклад, N=21.
Перед початком роботи, бажано ознайомитися зі списком доступних команд SFTP. Для цього можна скористатися можливостями вбудованої довідкової допомоги. Введемо:
$ help
Замість команди help можна також скористатися символом «?». Як можна переконатися, більшість команд мають ту ж функціональність, що і засоби оболонки SSH. Однак, на відміну від останніх, вони не повністю відповідають синтаксису оболонки та є менш функціональними. Треба мати це на увазі, працюючи з ними.
Після цього протестуємо відомі можливості SFTP, стосовно навігації по файловій системі. Ми можемо вільно переміщуватися по файловій ієрархії віддаленої системи за допомогою низки простих команд. Насамперед, з`ясуємо у якому каталозі ми знаходимося:
$ pwd
Наша віддалена директорія: /var/www/alexandr75001/data.
Тепер переглянемо вміст поточної директорії віддаленого хоста:
$ ls
Тут ми бачимо кілька каталогів та два файли – filedump.sql та t4.jpg. Тепер, за допомогою додаткових параметрів команди ls переглянемо метадані файлів та каталогів директорії:
$ ls –la
Можна переконатися, що це дає змогу отримати досить ґрунтовну інформацію по файловій системі, зокрема, що до встановлених дозволів, розміру, дати створення об`єктів та інших даних.
Перехід до іншої директорії віддаленої машини відбувається за допомогою аналогічної команди оболонки. Скористаємось нею для переходу до logs:
$ cd logs
Переглянемо вміст каталогу logs:
$ ls
Можуть виникати ситуації, коли необхідно переглянути характеристики локальної файлової системи, не перериваючи при цьому поточний сеанс SFTP. Для цього передбачено використання символу «l». Достатньо лише додавати його попереду команди. Наприклад, з`ясуємо яка наша поточна директорія на локальній машині. Для цього введемо у терміналі:
$ lpwd
Як бачимо, ми знаходимося у каталозі /root. Переглянемо його вміст:
$ lls
На даний момент у ньому знаходиться лише директорія snap.
Ми могли б змінити поточну директорію за допомогою команди lcd, але поки що не будемо цього робити.
Для завантаження файлів з віддаленого хоста можна скористатися наступною командою:
$ get aventa-studio.com.access.log.0.gz
При цьому, за замовченням файл копіюється з тією ж назвою, без змін. Але, якщо нам потрібно змінити його назву, тоді достатньо лише додати її у кінці команди. Наприклад, скопіюємо той самий файл, але вже з назвою file1:
$ get aventa-studio.com.access.log.0.gz file1
Команда виконана успішно. Перевіримо це:
$ lls
Бачимо, що у нашій локальній директорії з`явилося два нових файли, і один з них із ім`ям file1.
Так само ми можемо передати файли з локальної машини на віддалену. Скопіюємо наш файл file1 до поточної директорії на віддаленій машині:
$ put file1
Як бачимо, завантаження успішно відбулось.
Тепер перевіримо вільне місце на віддаленому хості:
$ df –h
Отримали гарний результат. Однак, слід зазначити, що відсутня локальна версія вказаної команди. Це можна обійти за допомогою символу «!». Достатньо лише його набрати – і ми в локальній системі. Продемонструємо це:
$ !
Дійсно, ми повернулися. А тепер вже можна перевірити вільне місце:
$ df -h
Усе гаразд. Для повернення до попереднього сеансу, достатньо скористатися добре відомим засобом:
$exit
Тепер ми знову «на зв'язку» з віддаленим хостом.
SFTP дозволяє виконувати деякі види обслуговування віддаленої файлової системи, зокрема, змінювати власників ресурсів та встановлювати дозволи. Наприклад, для зміни власника файлу достатньо використати наступний формат команди:
$ chown user_ID name_file
Тут user_ID – ідентифікатор користувача системи, name_file – ім`я файлу, для котрого змінюється власник. Але, не має можливості за допомогою інтерфейсу програмного засобу визначити ідентифікатор потрібного користувача. І тому, необхідно скористатися іншим шляхом для визначення user_ID. Це стосується копіювання на локальну машину файлівpasswd та group у випадку зміни групи. Продемонструємо це:
$ get /etc/passwd
$ !less passwd
Значення user_ID для кожного з файлів знаходиться у третьому стовпчику після двокрапки. Саме його і потрібно використати для зміни власника.
У випадку зі зміною групи, використовується наступна команда:
chgrp group_ID name_file
Ситуація та ж сама, і тому знайдемо потрібні значення group_ID за допомогою наступних засобів:
$ get /etc/group
$ !less group
У третьому стовпчику після двокрапки можна продивитися потрібні значення group_ID.
Також можна встановлювати дозволи для файлів у віддаленій системі. Для прикладу, зробимо це для нашого файлу із ім’ям file1:
$ chmod 777 file1
Переглянемо результат:
$ ls –la
Команда спрацювала.
Локальної версіі chmod не існує, але ми можемо встановити локальну маску, для того, щоб всі файли, котрі ми копіюємо на локаль мали наперед задані дозволення. Продемонструємо це:
$ lumask 022
Тепер всі файли, котрі завантажуються на локаль будуть мати права доступу 644.
Для створення каталогів також існують відповідні засоби. Для віддаленої системи:
$ mkdir new
Для локального хоста:
$ lmkdir new
Перевіримо успішність виконання:
$ lls
Так, каталог на локальній машині успішно створено.
Не знаєте, де розмістити свій проект? Стовпи хмарних технологій виявилися дуже дорогими? Пропонуємо для Вас віртуальний виділений сервер із розміщенням в Україні чи Польщі.. Невисока вартість, широкий вибір шаблонів ОС та додаткового програмного забезпечення для створення сервера, цілодобова технічна підтримка, безкоштовне місце для зберігання резервних копій.
Підписуйтесь на наш телеграм–канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
Дата: 14.03.2023 Автор: Олександр
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus