Доступ до сайту по sftp замість звичайного ftp з обмеженням директорії

У мене є веб сервер без можливості віддаленого доступу до нього із зовні, обслуговує кілька сайтів. Він стоїть за фаєрволом, проброшен 80-й порт, для роботи сайтів цього достатньо. Знадобилося надати оперативний доступ сторонніх розробників до вихідних текстів одного з сайтів. У мене несподівано виникли труднощі з цим, довелося повозитися.

Суть проблеми в наступному. Спочатку сервер створювався для внутрішньої роботи над усіма сайтами з локальної мережі. Розмежування з прав доступу не було, працювали з сайтами мало, зрідка щось правили. Згодом розробників взагалі не залишилося, сайти не змінювалися. Все управління йшло через панелі адміністрування сайтами.

В один прекрасний день вирішили оновити один із сайтів. Попросили надати доступ до ісходникам. В принципі, нічого складного, думав за 5-10 хвилин все зроблю. Пішов по простому шляху. Вирішив налаштувати ftp сервер. благо зовсім недавно написав велику статтю на цю тему.

Дуже швидко його настроїв, перевірив зсередини - все відмінно працює. Створив системного користувача, зачрутіл його в каталог з потрібним віртуальним хостом, розставив права як треба. Далі справа за малим. Треба прокинути порт на шлюзі для доступу до сервера.

Мені дуже не сподобалися перспектива колупати незнайомий фаєрвол з купою правил. До того ж не можна було допустити помилку і порушити роботу шлюзу. Але робити нічого, вирішив спробувати. Інформації в інтернеті не дуже багато на цю тему. За тих прикладів, що мені попалися не зміг коректно налаштувати. То в синтаксисі помилка, то просто не працює.

Вирішив не втрачати час на колупання якому немає потреби для мене фаервола і піти іншим шляхом. Природно, подумав відразу на sftp. Там немає таких проблем з кидок портів. Єдине, чого я не робив раніше, так це обмеження доступу по sftp в межах якогось каталогу. Але як виявилося це не складно, завдання легко і швидко вирішується.

Додаємо користувача ssh в chroot директорію

Для початку створимо нового системного користувача без шелла. Взагалі, це не обов'язково робити, можна налаштувати в ssh підключення не системних користувачів. Але я не бачу проблеми з системним користувачем. У моєму випадку для одного користувача немає сенсу морочитися з якимись додатковими настройками. Додаємо користувача:

Зберігаємо і перезапускаємо ssh. У випадку з centos 6 команда така:

Налагодження підключення sftp з обмеженням доступу за межами конкретної папки закінчена.

Помилка ssh bad ownership or modes for chroot directory

Можна пробувати підключатися через sftp клієнт. Я в даному випадку вважаю за краще користуватися безкоштовним WinSCP. Швидше за все ви не підключіться і отримаєте помилку в лог файлі / var / log / secure:

Помилка виникає, якщо власник необхідної папки НЕ root і права доступу на запис є у кого-то ще, крім власника. Такий ось нюанс. У цьому є певна незручність, але в даному випадку особисто мені це не завадило. Робимо власником каталогу /var/www/site.ru рута, у решти прибираємо права на запис в нього. Далі в цьому каталозі дві папки - одна з логами веб сервера для віртуального хоста, інша з кодами сайту. На ці папки може бути будь-який власник і права доступу. Так що підключився користувач зможе без проблем працювати з вихідними кодами сайту.

висновок

На зміну ftp приходить sftp. Я давно користуюся цим для доступу до окремих файлів на сервері. Але є великий мінус - швидкість по sftp низька. Коли доводиться качати щось об'ємне, починаєш сумувати. Це потрібно враховувати. Для роботи з кодами сайтів існуючої швидкості цілком достатньо. Для передачі об'ємних файлів потрібно шукати інші варіанти підключення, той же ftp, або через vpn cifs або nfs.

Під час налаштування доступу до певної папки для певного користувача по SFTP виникли проблеми:
1. Чомусь доступ працює тільки на читання. При завантаженні файлів отримую помилку «Upload failed: Permission denied (3 / -31)». Якщо змінити власника цієї папки на нового користувача або змінити дозволи папки на 775 або 777, то з'єднання по SFTP вже не встановлюється - отримую помилку «Failure initializing sftp session: Unable to startup channel».
2. У SFTP клієнта були збережені обрані на сервері папки. Чомусь доступ працює і до них теж! Тобто обмеження доступу до конкретної директорії не працює.
У мене CentOS 7. У чому можуть бути причини помилки і як можна виправити?

1. Повторював настройку так само як у мене? Я вже не пам'ятаю нюансів, але те, що написано, працює на 100%, так як я статтю по реальному наприклад писав.
2. Збережені папки на клієнті ніяк не можуть впливати на доступ. Потрібно дивитися настройки сервера. Такого бути не повинно.

Схожі статті