6
8月
2020
10:36

Передача больших файлов со смартфона на ПК под Linux

6 8月 2020 10:36

Задача: загрузить фотографии по Wi-Fi со смартфона на персональный компьютер под управлением Linux.

К сожалению, решение передачи файлов с помощью программы ShareIt не подходит - нет клиента для Linux, есть лишь эмуляция.
Вариант с "облаками" (disk.yandex.ru, Диск Google, Облако Mail.ru) не рассматривал по причине накладных расходов - передача на сторонний сервер через Интернет, а затем загрузка с него же. Bluetooth не подходит - слишком медленный. Выбрал проверенный вариант с FTP.

Порядок действий:

  1. на компьютере поднял FTP сервер proftpd:

sudo apt-get install proftpd

Изменил конфигурационный файл ProFTPd следующим образом:

sudo nano /etc/proftpd.conf

Include /etc/proftpd/modules.conf
UseIPv6 off
IdentLookups off
ServerName "имя_моего_компьютера"
ServerType standalone
DeferWelcome off

MultilineRFC2228 on
DefaultServer on
ShowSymlinks off

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"

DefaultRoot /home/vladimir/ftp #имя корневого каталога ftp

<Directory /home/vladimir/ftp> # корневой каталог ftp
Umask 022 022
AllowOverwrite off
<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>
DenyAll
</Limit>
</Directory>

<Directory> /home/vladimir/ftp/upload/> # подкаталог "upload" - для записи, чтения, удаления
Umask 022 022
AllowOverwrite on
<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>
AllowAll
</Limit>
</Directory>

AllowStoreRestart on

Port 21 # стандартный порт, но можно изменить его на свой

<IfModule mod_dynmasq.c>
</IfModule>

MaxInstances 8

User proftpd
Group nogroup

Umask 022 022
AllowOverwrite on

TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

<Limit LOGIN>
AllowUser vladimir2 # дополнительный логин для ftp
DenyALL # для остальных вход запрещён
</Limit>

UserAlias ftp vladimir2 # логин ftp как псевдоним пользователя vladimir2

Include /etc/proftpd/conf.d/

  • также, изменил файл shells, добавил nologin
    При выполнении sudo nano /etc/shells добавил последнюю строку

# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/sbin/nologin

  • изменил пароль пользователя ftp:

    sudo passwd ftp

  • проверил конфигурацию службы:

    sudo /etc/init.d/proftpd check-config

  • запустил службу proftpd:

    sudo /etc/init.d/proftpd start

  • проверил с клиента, что подключение к серверу работает:

    ftp my_IP-address

ввёл имя пользователя ftp" и и пароль пользователя ftp, вошёл в каталог - всё в порядке.

  1. на телефоне под Android установил Файловый менеджер с Google PlayMarket: FileManager.
    Ещё один мощный FTP клиент - AndFTP
  2. оба устройства - ПК и смартфон подключены к одной и той же локальной сети (через Wi-Fi или провод - не важно).
  3. Подключился со смартфона через «Файловый менеджер» - иконка «Удаленные службы» к FTP-серверу по его IP-адресу (ввёл логин и пароль) и передал файлы на компьютер.

Выгрузка файлов с ПК не телефон (добавление от 01.10.2021):

Если в файле конфигурации включить ограничения, передать файлы с ПК на смартфон будет нельзя.
Ограничение чтения и удаления файлов из папки "upload" на FTP выглядит следующим образом:

<Directory /home/vladimir/ftp/upload/>
<Limit READ DELE>
DenyAll
</Limit>

Вначале я использовал данные директивы, но затем удалил из файла proftpd.conf, т.к. часто бывает нужно и загружать с ПК на телефон. Теперь работает и загрузка и выгрузка на FTP.

Решение проблем с доступом - дополнение от 04.10.2021

После подключения по FTP невозможно создать файл или каталог на сервере FTP

Данную проблему встретил в операционной системе Sparky Linux (вариант Debian).

Симптомы:
На ПК под управлением Debian, после подключения к серверу FTP со смартфона невозможно создать ни файл, ни каталог, чтобы выгрузить файлы со смартфона на ПК. При этом FTP-клиент пишет ошибку на экране "Доступ запрещен" или "Файл не найден".

Основные ошибки и решения проблем:
1. Проблемы с путями

  • Проверьте, что пути в файле proftpd.conf к каталогу "public" или "upload" совпадают с реальными путями, названием папок на компьютере пользователя (например, /home/vladimir/ftp/upload и т.д.).

2. Некорректные права доступа (нет права записи и создания)

  • Выполните команду в консоли:

    sudo chmod -R 0775 /home/user/ftp

где user - имя рабочей папки для учётной записи пользователя. Эта команда означает, что Владелец (Owner) и группа в которую он входит может читать, писать и выполнять файлы в каталогах ftp.

3. Назначение "Владельца" каталога
Проблема встречается в ОС Debian.

  • Выполните команду в терминале:

    sudo chown -R ftp:users /home/user/ftp

где ftp - учётная запись, под которой работает proftpd, users - группа "все пользователи".

либо, для более сильного ограничения прав:

sudo chown -R user:user /home/user/ftp

Примечание: по умолчанию владелец user:user
где user - Ваше имя пользователя и группа.

При запуске proftpd в Debian с файлом конфигурации от Ubuntu возникает ошибка

Необходимо удалить в конфигурационном файле (sudo nano /etc/proftpd.conf) строку:
IdentLookups off

Проблемы с сервисом proftpd в Linux Mint 21 "Vanessa" и их решение (23.08.2022)

При переходе на Linux Mint 21 "Vanessa" возникла первая проблема - программа установки указала на несовместимый с Mint 21 пакет "proftpd".
Вынужден был его удалить перед обновлением с помощью "mint-update":

sudo apt-get remove proftpd

После успешного перехода на LM 22, попытался установить программу, тут возникла вторая проблема - ошибки установки proftpd:

fatal: LoadModule: error loading module 'mod_tls.c'

Решение проблемы:

sudo nano /etc/proftpd/modules.conf

Закомментировать многие модули. Я оставил лишь несколько штук. Вот файл modules.conf после отключения в нём строк:

ModulePath /usr/lib/proftpd
ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *
LoadModule mod_ctrls_admin.c
LoadModule mod_load.c
LoadModule mod_dynmasq.c
LoadModule mod_exec.c
LoadModule mod_ratio.c
LoadModule mod_site_misc.c
LoadModule mod_facl.c
LoadModule mod_unique_id.c
LoadModule mod_copy.c
LoadModule mod_deflate.c
LoadModule mod_ifversion.c
LoadModule mod_ifsession.c

Затем, в главном конфигурационном файле prpftpd закомментировал строчку с именем "IdentLookups" :

sudo nano /etc/proftpd/proftpd.conf

# If set on you can experience a longer connection delay in many cases.
#IdentLookups off

Последний штрих - удалил маску systemd со службы proftpd

sudo systemctl unmask proftpd.service

Теперь установка службы прошла без проблем:

sudo apt-get install proftpd

Включение и запуск сервиса proftpd также без "происшествий":

systemctl enable proftpd.service
systemctl start proftpd.service
systemctl status proftpd.service

Возникающие ошибки отслеживал при помощи команды journalctl -xeu :

journalctl -xeu proftpd.service

Вывод: передача данных со смартфона на ПК с использованием proftpd работает и в Linux Mint 22.

Проверка - подключение со смартфона при помощи программы "Файловый менеджер+" - Удалённые - FTP по ip-адресу ПК с известными именем пользователя и паролем выполнена. Каталог был прочитан и файлы переданы.


Ссылки:

Загрузить конфигурационный файл proftpd.conf:
proftpd.conf.zip - Linux Mint
proftpd_debian.zip - Debian



相关出版物