Понадобилось моей жене сохранить изображения и видеозаписи, сделанные с помощью её телефона, вне этого самого телефона — на жёсткий диск. Так как компьютер в квартире только один, да и тот мой, встала задача: насколько возможно упростить как саму передачу, так и просмотр, удаление файлов. Нужно это было для того, чтобы жена могла это делать самостоятельно и, желательно, со своего телефона. Ведь я не особо хочу сам этим периодически заниматься, а уж тем более не хочется передавать управление своим ПК для этих нужд, ведь тогда не получится играть в игры и смотреть ютубчик после работки.
Было найдено решение достаточно простое: поднять FTP-сервер и с помощью FTP-клиента передавать файлы с iPhone на компьютер. Но со своей спецификой: мне хотелось это сделать как можно проще для себя, поэтому инструкция не универсальна.
Создать пользователя для подключения по FTP в Linux
На пятом году совместной жизни я всё же снизошёл до того, чтобы выделить пользователя для своей жены. Пока не предполагается, что она будет из-под него логиниться и сидеть вконтактике, но пусть будет. Создаём нового пользователя с домашней папкой и назначаем ему пароль:
# useradd -m ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ПАРОЛЬ
Теперь можно удалить файлы, которые создаются автоматически скриптами для нового пользователя:
# cd /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/
# rm -rf .bash_history .bashrc .bash_profile
После подключения к сервису пользователь будет видеть свою домашнюю папку, соответственно, загруженные файлы будут находиться по пути /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.
FTP-сервер на Linux для передачи данных с iPhone
В качестве сервера я выбрал vsftpd, он очень простой и его конфигурация под мои нужды минимальна. Устанавливаем демон в ArchLinux:
# pacman -S vsftpd
Или Ubuntu/Debian:
# apt-get install vsftpd
Конфигурационный файл /etc/vsftpd.conf у меня получился такой:
# запрещаем подключения для анонимных пользователей
anonymous_enable=NO
# разрешаем подключения для пользователей системы
# (для подключения мы создали пользователя ранее)
local_enable=YES
# разрешаем запись
write_enable=YES
# не пишем логи
xferlog_enable=NO
# ограничиваем область видимости для локальных
# пользователей их домашней директорией, чтобы они не могли
# исследовать всю файловую систему
chroot_local_user=YES
chroot_list_enable=YES
allow_writeable_chroot=YES
# в этом файле храниться список пользователей,
# для которых актуально ограничение
chroot_list_file=/etc/vsftpd.chroot_list
# разрешаем логин только для пользователей, перечисленных в файле
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
# ждём подключения по IPv4
listen=YES
# как вариант, можно ждать подключения по IPv6
# listen_ipv6=YES
# но, к сожалению, не одновременно
# нужно для работы демона в systemd
pam_service_name=vsftpd
# https://ozi-blog.ru/vsftpd-failed-to-retrieve-directory-listing/
seccomp_sandbox=NO
В целом, отличия от стандартного конфигурационного файла: ограничить видимость для нашего пользователя только домашней папкой и разрешить подключаться только ему, ну и разрешить создание, удаление файлов.
Добавим нашего пользователя в файлы, указанные в конфигурационном:
# echo ИМЯ_ПОЛЬЗОВАТЕЛЯ > etc/vsftpd.chroot_list
# echo ИМЯ_ПОЛЬЗОВАТЕЛЯ > /etc/vsftpd.user_list
Теперь можно запустить FTP-сервер для передачи данных с iPhone:
# systemctl start vsftpd
И проверить, всё ли запустилось:
# systemctl status vsftpd
Должна быть зелёненькая строка статуса, примерно как на изображении ниже.
Если всё хорошо, то вводим в консоле:
# ifconfig
Узнаём свой ip-адрес и пытаемся локально подключиться через FTP-клиент, к примеру, FileZilla, используя имя пользователя и пароль, созданные ранее. Если, опять же, всё хорошо, то включаем vsftpd для автозагрузки:
# systemctl enable vsftpd
Если же по какой-то причине у вас не получается запустить vsftpd, то я бы посоветовал откатить конфигурационный файл, переустановив пакет (бекапа же мы не сделали). Затем, добавляя по одной-две строчки в /etc/vsftpd.conf, пробовать его перезапускать и проверять статус:
# systemctl restart vsftpd
# systemctl status vsftpd
FTP-клиент для iPhone
Настройка FTP-сервера для передачи данных с iPhone у меня заняла где-то 30 минут. Ещё часа 2 я искал FTP-клиент. Лучше даже не пробовать вводить в App Store запрос «FTP client», там или всё платное (а я парень хозяйственный, и такое не подходит), или не рабочее, или позволяет только скачать файлы, но не загружать их.
Рекомендую зайти немного с другого конца и поискать файловый менеджер с поддержкой FTP. Я вот нашёл ES File Explorer — он позволяет сохранить FTP-сервер для переподключений, просматривать, скачивать, загружать и удалять с него файлы. Но это случилось только после двух часов мучений и заигрываний с всевозможными FTP-клиентами. Вполне вероятно, есть файловый менеджер и лучше, просто я до него не дошёл.
Как это работает
- Настраиваете видимость устройств в своём роутере. В идеале, все видят всех. Я уже делал это когда-то для модема MT-PON-AT-4 от ByFly. Тут для каждого роутера своя инструкция, в моём текущем, к примеру, всё работает из коробки.
- Подключаете компьютер к сети роутера, скорее всего это уже сделано. Узнаёте ip-адрес компьютера с помощью команды ifconfig (советую назначить для MAC-адреса сетевой карты компьютера постоянный ip-адрес).
- Подключаете телефон к Wi-Fi сети роутера.
- Открываете FTP-клиент на iPhone и подключаетесь к серверу, указав ip-адрес, имя пользователя и пароль, полученные/назначенные ранее.
- Скачиваете/загружаете/удаляете файлы на своём FTP-сервере и жёстком диске через телефон.