За счет того, что система entware многопользовательская у нас есть возможность настроить vsftpd из прошивки кинетика на работу с локальными пользователями.Здесь показан пример для трех пользователей, которые имеют доступ в разные каталоги и разные права на них. В примере используется файловая система NTFS. Можно и на EXT, но там сложнее разбираться с правами на запись для пользователей.

Отключаем ftp сервер в прошивке если он был включен. Создаем структуру каталогов нашего сервера. В моем примере это:

/media/DISK_A1/ftp/

В каталоге 'ftp' я создал два подкаталога по именам пользователей.

/media/DISK_A1/ftp/user-1
/media/DISK_A1/ftp/user-2

Затем создаем пользователей в entware. Не создавайте пользователя 'ftp' это связано с внутренней работой самого vsftpd.

Делается это командой

adduser <имя пользователя>

В моем примере используются три пользователя с именами

user-1
user-2
user-3

Система попросит ввести пароль для пользователя. Вводим и жмем enter. Повторить это нужно столько раз сколько вы хотите завести юзеров на свой сервер.

После этого идем в

/media/DISK_A1/system/etc

Находим там файлы passwd, открываем их и отключаем шелл пользователям фтп сервера. Этот шаг можно пропустить, но тогда эти пользователи смогут заходить по ssh на кинетик под своим паролем. Если шелл отключаем то находим строки с нашими пользователями

user-1:$1$t2kiAPb/$Tb0Ahk5kEmtx2uohEA373/:1:1:Linux User,,,:/opt/home/user-1:/opt/bin/ash
user-2:$1$Sr50YJz1$BFA0nTrkJ6CuEqYeugNEf0:2:2:Linux User,,,:/opt/home/user-2:/opt/bin/ash
user-3:$1$VkKKtjzi$uNITTYi1ckMZLAaRVQ9l51:4:4:Linux User,,,:/opt/home/user-3:/opt/bin/ash

и меняем в самом конце строки 'ash' на 'false'. Выглядеть будет так

user-1:$1$t2kiAPb/$Tb0Ahk5kEmtx2uohEA373/:1:1:Linux User,,,:/opt/home/user-1:/opt/bin/false
user-2:$1$Sr50YJz1$BFA0nTrkJ6CuEqYeugNEf0:2:2:Linux User,,,:/opt/home/user-2:/opt/bin/false
user-3:$1$VkKKtjzi$uNITTYi1ckMZLAaRVQ9l51:4:4:Linux User,,,:/opt/home/user-3:/opt/bin/false

Ещё раз обращаю внимание, что изменять надо только тех пользователей которые будут для фтп сервера.

Устанавливаем chroot командой

opkg install coreutils-chroot

Затем идем в

/opt/etc

и создаем там файл 'vsftpd.conf' с содержимым

# Общие настройки
dirmessage_enable=no
download_enable=yes
write_enable=yes
dirlist_enable=yes
hide_ids=yes
ftpd_banner=Welcome to FTP service.
local_enable=yes
local_umask=022
chmod_enable=no
chroot_local_user=yes
chroot_list_enable=NO
check_shell=no
userlist_file=/opt/etc/vsftpd/vsftpd.userlist
userlist_enable=YES
userlist_deny=NO
user_config_dir=/opt/etc/vsftpd/ftpuser
listen=yes


# Слушаем порт
listen_port=21

connect_from_port_20=YES
max_clients=10
idle_session_timeout=300

#Запрет созданий директорий в корневом каталоге
#protect_writable_root=no

utf8=yes
ascii_upload_enable=YES
ascii_download_enable=YES
port_enable=yes
port_promiscuous=no
use_sendfile=no

# Отключение анонимного пользователя

anonymous_enable=no
#anon_allow_writable_root=yes
#anon_world_readable_only=yes
anon_umask=022

tcp_wrappers=NO
tilde_user_enable=yes

# Включение пассивного режима

pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50050
pasv_promiscuous=no

# Логирование
syslog_enable=yes

В данном конфиге анонимный доступ отключен.

Здесь же создадим каталог 'vsftpd'. В каталоге

/opt/etc/vsftpd

Создаем файл 'vsftpd.userlist' и каталог «ftpuser» Приводим файл 'vsftpd.userlist' к виду

user-1
user-2
user-3

т.е. мы в нем перечисляем логины тех пользователей которым разрешен доступ к нашему серверу.

Далее идем в каталог

/opt/etc/vsftpd/ftpuser

и создаем там по файлу на каждого пользователя. Данные файлы будут содержать набор параметров, что можно данному пользователю и где находится его домашний каталог. Название файла должно быть равно имени пользователя. Мой пример для трех пользователей. Поэтому я создал три файла

user-1 с содержимым

local_root=/media/DISK_A1/ftp/user-1
max_per_ip=0

У этого пользователя будет домашняя папка

/media/DISK_A1/ftp/user-1 

на флешке и в нее он сможет записывать и удалять файлы, т.к. это разрешено в общем конфиге

user-2 с содержимым

local_root=/media/DISK_A1/ftp/user-2
write_enable=no
max_per_ip=0

У этого пользователя будет домашняя папка

/media/DISK_A1/ftp/user-2 

на флешке и с нее он сможет только скачивать файлы файлы, т.к. в конфиге есть параметр

write_enable=no

user-3 с содержимым

local_root=/media/DISK_A1
max_per_ip=0

У этого пользователя будет домашняя папка

/media/DISK_A1

Он будет иметь полный доступ ко все флешке.

Т.к. в конфиге присутствует опция

chroot_local_user=yes

Пользователи

user-1
user-2

не смогут перейти выше по структуре каталогов.

После того как все это проделано, осталось создать скрипт запуска и запустить наш сервер. Для этого идем в

/opt/etc/init.d

и создаем скрип запуска с содержимым

#!/bin/sh


ENABLED=yes
PROCS=vsftpd
ARGS="/opt/etc/vsftpd.conf"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/init.d/rc.func

Для упрощения процесса я скопировал скрипт

S50dropbear

Заменил в нем содержимое и переименовал его в

S25vsftpd

Так же нужно создать правила IPTABLES.

Файл лежит в каталоге

/opt/etc/init.d/firewall.sh

Если его там нет то создаем пустой файл и делаем его исполняемым или копируем любой другой скрипт и меняем в нем содержимое на

#!/bin/sh

#Для ФТП
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 50000:50050 -j ACCEPT

Теперь можно запустить наш сервер командой

/opt/etc/init.d/S25vsftpd

и проверять работу сервера.