mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-18 22:02:41 +00:00
113 lines
No EOL
6.1 KiB
Markdown
113 lines
No EOL
6.1 KiB
Markdown
# Організація гостьового сервера FTP
|
||
|
||
Постало [завдання](https://devzone.org.ua/topic/restavratsiia-ukrayinskykh-veb-arkhiviv) десь зберігати дампи україномовних сайтів у сирому HTML. Розгортати повноцінний Git хостинг поки не хочу, зокрема й тому що при кожному апдейті там будуть оновлюватись хеші файлів, це не дуже доречно. Утім, хочеться якось "розподілити" дані між користувачами.
|
||
|
||
Для цієї мети, вирішив підняти старий добрий публічний сервер FTP (для локальної мережі) з анонімним доступом до сервера в активному та пасивному режимах. Доступ до файлів тут в режимі _read-only_, я додаю їх від користувача по окремому потоку SSH.
|
||
|
||
Нижче описані кроки з налаштувань, щоб наступного не лазити по закладкам, може комусь стане в нагоді.
|
||
|
||
``` bash
|
||
apt install vsftpd
|
||
```
|
||
|
||
## Налаштування
|
||
|
||
* В системі Fedora, файл конфігурації знаходиться за адресою `/etc/vsftpd/vsftpd.conf`
|
||
* В Debian - це `/etc/vsftpd.conf`
|
||
|
||
``` vsftpd.conf
|
||
# дозволити підключення в анонімному режимі
|
||
anonymous_enable=YES
|
||
|
||
# заборонити логін локальних користувачів
|
||
local_enable=NO
|
||
|
||
# заборонити запис (додаю файли через SSH)
|
||
write_enable=NO
|
||
|
||
# маска, я її лишив здається стандартною
|
||
local_umask=022
|
||
|
||
# дозволити отримання списку директорій (для зручності навігації)
|
||
dirmessage_enable=YES
|
||
|
||
# вимкнув, щоб отримувати журнали в файл (див. vsftpd_log_file)
|
||
xferlog_std_format=NO
|
||
|
||
# вимкнув IPv4, оскільки я користуюсь тільки IPv6 (Yggdrasil/Mycelium)
|
||
listen=NO
|
||
listen_ipv6=YES
|
||
|
||
# в мене не стандартна локація на примонтованому пристрої
|
||
anon_root=/path/to/public
|
||
|
||
# дозволив відображення "прихованих" файлів що починаються з крапки
|
||
force_dot_files=YES
|
||
|
||
# увімкнув пасивний режим явно та вказав діапазон портів для iptables
|
||
# про активний і пасивний режими, конструктивно тут: https://vps.ua/wiki/ukr/ftp-mode/
|
||
pasv_enable=YES
|
||
pasv_min_port=10000
|
||
pasv_max_port=10100
|
||
|
||
# можна також обмежити конективність для певних конфігурацій
|
||
# pasv_address=
|
||
# pasv_addr_resolve=NO
|
||
# connect_from_port_20=YES
|
||
|
||
# файл журналів
|
||
vsftpd_log_file=/var/log/vsftpd.log
|
||
```
|
||
* інші опції я лишив як є, але це актуально лише для моєї версії vsftdp - будьте уважні!
|
||
|
||
## Фаєрвол
|
||
|
||
Тепер важливо відкрити потрібні порти. Так як я не використовую режим SSL, мені потрібно дозволити тільки порти `20`, `21` і `10000-10100` (`pasv_min_port` і `pasv_max_port` відповідно).
|
||
|
||
На Fedora, я досі не навчився користуватись новомодним _firewalld_ через командний рядок, тому зробив це через GUI [Firewall](https://firewalld.org) (_firewall-config_). Тут важливо додати ці правила до групи Permanent щоб вони не злетіли після ребуту.
|
||
|
||
В Debian, для перманентної зміни `iptables`, я користуюсь `ufw`:
|
||
|
||
``` bash
|
||
ufw allow 20/tcp
|
||
ufw allow 21/tcp
|
||
ufw allow 10000:10100/tcp
|
||
```
|
||
|
||
### Альтернативні мережі
|
||
|
||
Якщо потрібно дозволити підключення тільки для користувачів Yggdrasil:
|
||
|
||
``` bash
|
||
ufw allow from 0200::/7 port 20 proto tcp
|
||
ufw allow from 0200::/7 port 21 proto tcp
|
||
ufw allow from 0200::/7 port 10000:10100 proto tcp
|
||
```
|
||
* для Mycelium вказуємо `0400::/7`
|
||
|
||
#### Мульти-мережний режим
|
||
|
||
Я особисто використовую правила без `from` (дозволяю підключення звідусіль) оскільки в мене крутиться декілька IPv6 мереж і якщо правильно не забіндити сервер на одній з них - можливі помилки підключення в пасивному режимі. Якщо не вдається підключитись через таймаут - дивіться `/var/log/ufw.log` і спробуйте тимчасово викнути фаєрвол взагалі, щоб перевірити чи справа дійсно в ньому (`ufw disable`).
|
||
|
||
## Нотатки
|
||
|
||
### Монтування теки до публічного кореня FTP
|
||
|
||
Сервер vsftpd не підтримує символічні посилання, утім, в Linux це обмеження можна обійти монтуванням з аргументом `--bind`:
|
||
|
||
``` bash
|
||
mount --bind /path/to/destination /path/to/ftp/destination
|
||
```
|
||
|
||
Відмонтувати:
|
||
|
||
``` bash
|
||
umount /path/to/ftp/destination
|
||
```
|
||
* відключення відбудеться після того, як останній процес (клієнт) завершить читання/запис
|
||
|
||
## Запуск
|
||
|
||
* `systemctl restart vsftpd` - застосовуємо конфігурацію перезапуском сервера
|
||
* `systemctl enable vsftpd` - автозапуск сервера при старті системи
|
||
* `systemctl status vsftpd` - перевіряємо статус, після чого можна підключатися |