[ @settings @console @ftp @vsftpd ]
В линуксах есть много ftp-серверов (википедия), но простейшим остаётся «Very Secure FTP Daemon» — vsftpd.
Установить vsftpd
Основные управляющие команды
- systemctl status vsftpd
- systemctl start vsftpd
- systemctl stop vsftpd
- systemctl restart vsftpd
Сделать 'root' владельцем конфиг-файла
Это нужно для безопасности.
Это должно произойти по-умолчанию, но иногда это надо сделать вручную.
su
chown root:root /etc/vsftpd.conf && echo -e "\nDone!"
Сделать бэкап дефолтного конфиг-файла
Позже очень пригодится.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Если случится ой, то всегда можно будет ревертнуться:
sudo cp /etc/vsftpd.conf.bak /etc/vsftpd.conf
Проверить работоспособность
systemctl start vsftpd && systemctl status vsftpd
Подключиться к компьютеру из внешнего источника (со смартфона через Total Commander или «Cx Проводник»).
Если на этом этапе что-то пойдёт не так — надо разбираться.
Настроить сервис «под себя»
sudo mcedit /etc/vsftpd.conf
Настроек у vsftpd множество, что-то чем-то легко и незаметно может перекрыться. Сперва глянуть полный перечень параметров]> с комментариями. Затем грамотный гайд [[https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-debian-10|здесь. Это всё можно будет глянуть позже.
По-умолчанию настройки читаются из файла /etc/vsftpd.conf
Если запустить сервер с параметрами (например: vsftpd -olisten=NO /etc/vsftpd.conf -oftpd_banner=Hello), то параметры из командной строки будут иметь приоритет над содержимым конфиг-файла /etc/vsftpd.conf
Всегда можно запускать vsftpd с разными конфигами:
- vsftpd /etc/vsftpd.conf.with.guests &
- vsftpd /etc/vsftpd.conf.without.guests &
- vsftpd /etc/vsftpd.conf.myPersonalUser &
Общее содержимое файла настроек
В основе достаточно этого:
listen=NO listen_port=21 anonymous_enable=NO local_enable=YES write_enable=YES
Можно то же самое, но с комментариями:
# Run standalone? vsftpd can run either
# from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
# Make sure PORT transfer connections
# from port 20 (ftp-data).
listen_port=21
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
# Uncomment this to allow local users to log in.
local_enable=YES
# Uncomment this to enable any form
# of FTP write command.
write_enable=YES
В любом случае учесть, что:
- в файле настроек нельзя вставлять отступ строк от левого края, сервис остановится с НЕПОНЯТНОЙ ошибкой,
- между строками можно оставлять только один пустой абзац. Два пустых абзаца уже будут ошибкой и vsftpd остановится,
- нельзя вставлять комментарии в конце строки с параметром, вроде listen_ipv6=NO # modified — сервис остановится с ошибкой,
- разумно сохранять файл /etc/vsftpd.conf после каждого изменения и сразу выполнять проверку статуса сервиса:
sudo systemctl restart vsftpd && systemctl status vsftpd
Содержимое моего файла настроек
Я один, логинюсь на ноут через ftp под своим же аккаунтом, поэтому получаю полный доступ ко всей системе и буду терпеть все последствия от вероятного неосторожного удаления чего-либо. Это сойдёт для того чтобы изредка удобно перебрасывать файлы между ноутом и телефоном, но в целом небезопасно.
В принципе может быть достаточно этого конфига:
anonymous_enable=NO dirmessage_enable=YES listen_port=21 listen=YES local_enable=YES pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key secure_chroot_dir=/var/run/vsftpd/empty ssl_enable=NO use_localtime=YES utf8_filesystem=YES write_enable=YES
Можно, но не нужно добавить дополнительные ОЧЕНЬ ГЛОБАЛЬНЫЕ разрешения:
# разрешаем юзерам ПОЛНОСТЬЮ записывать/удалять файлы через ftp, но при этом ограничиваем их их же домашними директориями allow_writeable_chroot=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list chroot_local_user=YES local_root=/home/$USER/ user_sub_token=$USER
Отключить автозагрузку vsftpd
Сервис по-умолчанию запускается при старте ноута и бесконечно работает. Это норм, если ftp будут пользоваться много/часто.
Второй подход: сервер запускается, но постоянно «спит». Каждое явное обращение к нему начинает его «будить» (иногда это занимает какое-то ощутимое время), заставляет отдавать/принимать какие-то данные, затем сервис «засыпает». Надо учесть, что если группа товарищей то и дело будет обращаться к этому сервису, то циклы «заснул - разбудили - заснул - разбудили» могут полностью дестабилизировать процесс контроля продвижения НАТО на восток, hdd будет очень недоволен.
Поэтому вот третий способ: вручную запускать ftp сервер при необходимости, и позже вручную же его полностью гасить (безопасности ради).
Рецепт для гашения автозапуска установленного vsftpd:
- sudo systemctl stop vsftpd && systemctl status vsftpd
- sudo systemctl disable vsftpd.service && systemctl status vsftpd
- reboot (или релогин)
После перезагрузки (через systemctl status vsftpd) можно будет увидеть, что сервис жив, но мертв:
Loaded: loaded (/lib/systemd/system/vsftpd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
А после принудительного старта (sudo systemctl start vsftpd && systemctl status vsftpd) будет видно, что сервис is disabled для автозапуска:
Loaded: loaded (/lib/systemd/system/vsftpd.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-12-12 20:48:51 EET; 8ms ago
Что ещё можно проверить
Глянуть список всех запущенных сервисов в системе:
systemctl list-unit-files --type=service --state=enabled
Проверить, запущен ли vsftpd в системе:
systemctl list-unit-files --type=service --state=enabled | grep vsftpd
Если не запущен, никаких сообщений об этом не выводится.
Проверка всех доступных сервисов в системе и управление ими через systemd — https://linuxhint.com/disable_unnecessary_services_debian_linux/
Сделать симлинк для запуска vsftpd
Как запускать/останавливать vsftpd
- Запуск ftp: sudo systemctl start vsftpd && systemctl status vsftpd
- Перекинуть файлы туда/сюда
- Остановить ftp: sudo systemctl stop vsftpd && systemctl status vsftpd
Можно закатать это в исполняемые sh-файлы.
Как подключиться к ноутбуку с телефона
- На Android надо установить подходящий софт:
- Total Commander с плагином для соединений по ftp.
- Cx Проводник
- DMS Explorer (впрочем, это dlna player)
- Узнать IP ноутбука. В трее тыкнуть по иконке связи левой кнопкой мыши, в списке подключений тыкнуть по рабочему подключению и перейти на вкладку «Сведения» > Адрес IPv4.
- На смартфоне в Total Commander выйти в корень — там будет список установленных плагинов.
- FTP > Создать соединение >
- Имя сервера = IP ноутбука
- Имя пользователя = свой логин на ноутбуке
- Пароль = пароль юзера на ноутбуке
- Кодировка имён файлов = UTF-8
В принципе можно ходить по всем каталогам, создавать/удалять. Безопасности для, файлы можно только копировать, но не перемещать.
Несущественные примеры настроек vsftpd
allow_writeable_chroot=YES anonymous_enable=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list chroot_local_user=YES connect_from_port_20=YES data_connection_timeout=120 dirmessage_enable=YES ftpd_banner=Welcome to FTP service. idle_session_timeout=600 listen_ipv6=NO listen=YES listen_port=21 local_enable=YES local_umask=002 pam_service_name=vsftpd ssl_enable=NO use_localtime=YES utf8_filesystem=YES write_enable=YES
# My
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
secure_chroot_dir=/var/run/vsftpd/empty
# allow users to write # chroot_local_user=YES # chroot_list_enable=YES # chroot_list_file=/etc/vsftpd.chroot_list allow_writeable_chroot=YES # user_sub_token=$USER # local_root=/home/$USER/