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