За счет того, что система 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
и проверять работу сервера.