1

Тема: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Всем привет. Сегодня опять пытался разобраться с vsftpd-ext на кинетик.

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

Что сделано:
Создан пользователь с неотключенным шелом. Пользюк рабочий, т.к. по ssh заходит.
Есть рабочий конфиг с дебиана.


# Общие настройки
dirmessage_enable=no
download_enable=yes
write_enable=yes
dirlist_enable=yes
hide_ids=yes
local_enable=yes
local_umask=022
chmod_enable=no
#chroot_local_user=yes
#chroot_list_enable=NO
check_shell=no
user_config_dir=/opt/etc/vsftpd/ftpuser
#passwd_file=/var/vsftpd.passwd
listen=yes


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

connect_from_port_20=YES
#background=no
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
xferlog_enable=YES
xferlog_file=/opt/var/log/xferlog.log
#xferlog_std_format=YES
#dual_log_enable=YES
#syslog_enable=YES
#vsftpd_log_file=/opt/var/log/vsftpd.log
#log_ftp_protocol=YES

Содержимое файла test1 из каталога opt/etc/vsftpd/ftpuser


local_root=/media/DISK_A1/1
#anon_write_enable=yes
#anon_upload_enable=YES
max_per_ip=0

В итоге, к серверу коннект идет, ввожу имя пользователя/пароль и ничего. Он повторно просит ввести логин с паролем. Соответственно никуда не пускает.

Повторю, что на дебиане это работает. Может кто сможет помочь, т.к. пока не настрою с zyxware не смогу перейти.

Отредактировано dexter (2014-11-11 18:01:07)

2

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter, а может правильнее поставить Entware? Там можно настоящих юзверей создавать и их же завести в vsftpd. У меня на дебиане (VPS сервак) так:

....
ftpuser1:x:1000:1000::/var/www:/usr/sbin/nologin
ftpuser2:x:1001:1002::/var/www2:/usr/sbin/nologin 

Это в /etc/passwd

....
userlist_file=/etc/vsftpd.userlist
userlist_enable=YES
userlist_deny=NO 
....

Это в /etc/vsftpd.conf
И

ftpuser1
ftpuser2 

В /etc/vsftpd.userlist

Юзвери попадают в свои домашние папки, прописанные в passwd.

3

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Zyxmon,  что я могу сказать. На дебиане работает, а на кинетике не хочет ни в какую. Не проходит авторизация. Он лог-то не пишет даже.

4

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Посмотрите еще на форуме Олега. Может там, что полезное.

5

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

А это выдает телнет "500 OOPS: vsftpd: refusing to run with writable root inside chroot()"

То, что по этой ошибке гуглится и если эти строки добавлять в конфиг, то  vsftpd перестает запускаться.
Пробовал "write_enable=no" выдает ту же самую ошибку.

Отредактировано dexter (2014-11-12 20:51:35)

6

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

Вод выхлоп:

Я в нем ничего "полезного" не вижу.

7

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Zyxmon :
dexter :

Вод выхлоп:

Я в нем ничего "полезного" не вижу.

Да, там и правда нет ничего полезного. Все, что нужно выдал телнет. Но теми средствами, что в нете предлагают, это не лечится.

8

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Zyxmon,  нет никаких мыслей или возможности пересобрать пакет. Или собрать под zyxware я б оттестировал.

9

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter, я бегло смотрел патчи - ничего криминального.

10

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Zyxmon,  я выше написал, что выдает телнет при попытке подключиться "500 OOPS: vsftpd: refusing to run with writable root inside chroot()".

Из интернетов выяснил, что лечится это путем добавления "allow_writeable_chroot=YES" в конфиг, но если это добавить в конфиг vsftpd entware он просто перестает запускаться. Похоже надо патчить.

Это так же не помогает "allow_writable_root=YES" не стартует и все.

Отредактировано dexter (2014-11-14 21:38:47)

11

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

он просто перестает запускаться. Похоже надо патчить.

Вот тут может быть и нужен strace.

12

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Вот вывод strace

~ # strace vsftpd
execve("/opt/sbin/vsftpd", ["vsftpd"], [/* 15 vars */]) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x2aaaf000
stat("/opt/etc/ld.so.cache", {st_mode=S_IFREG|0777, st_size=580, ...}) = 0
open("/opt/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
mmap(NULL, 580, PROT_READ, MAP_SHARED, 3, 0) = 0x2aab0000
close(3)                                = 0
open("/opt/lib/libcrypt.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0777, st_size=11144, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x2aab1000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0000\4\0\0004\0\0\0"..., 4096) = 4096
mmap(NULL, 147456, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aac0000
mmap(0x2aac0000, 9840, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aac0000
mmap(0x2aad2000, 1716, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2000) = 0x2aad2000
mmap(0x2aad3000, 67904, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aad3000
close(3)                                = 0
munmap(0x2aab1000, 4096)                = 0
open("/opt/lib/libc.so.0", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0777, st_size=689564, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x2aab1000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\320\262\0\0004\0\0\0"..., 4096) = 4096
mmap(NULL, 729088, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aae4000
mmap(0x2aae4000, 633868, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aae4000
mmap(0x2ab8e000, 8040, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x9a000) = 0x2ab8e000
mmap(0x2ab90000, 20908, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab90000
close(3)                                = 0
munmap(0x2aab1000, 4096)                = 0
open("/opt/lib/libc.so.0", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0777, st_size=689564, ...}) = 0
close(3)                                = 0
munmap(0x2aab0000, 580)                 = 0
stat("/opt/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0777, st_size=31696, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x2aab0000
set_thread_area(0x2aab72d0)             = 0
mprotect(0x2ab8e000, 4096, PROT_READ)   = 0
mprotect(0x2aabe000, 4096, PROT_READ)   = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
brk(0)                                  = 0x439000
brk(0x43a000)                           = 0x43a000
stat64("/opt/etc/vsftpd/vsftpd.conf", {st_mode=S_IFREG|0777, st_size=1363, ...}) = 0
open("/opt/etc/vsftpd/vsftpd.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0777, st_size=1363, ...}) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aab1000
mprotect(0x2aab3000, 4096, PROT_NONE)   = 0
mprotect(0x2aab1000, 4096, PROT_NONE)   = 0
read(3, "# \320\236\320\261\321\211\320\270\320\265 \320\275\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\n"..., 1363) = 1363
mprotect(0x2aab1000, 4096, PROT_READ)   = 0
munmap(0x2aab1000, 12288)               = 0
close(3)                                = 0
stat64("/opt/etc/vsftpd/vsftpd.conf", {st_mode=S_IFREG|0777, st_size=1363, ...}) = 0
getuid()                                = 0
fcntl64(0, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(0, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
write(0, "500 OOPS: ", 10500 OOPS: )              = 10
write(0, "unrecognised variable in config "..., 57unrecognised variable in config file: allow_writable_root) = 57
write(0, "\r\n", 2
)                     = 2
exit_group(2)                           = ?
+++ exited with 2 +++

Собственно, что я и говорил "57unrecognised variable in config file: allow_writable_root) = 57". Не понимает он этих строк в конфиге.

13

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter, а с "allow_writeable_chroot=YES" - аналогично? Именно это, как Вы написали лечит.

14

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

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

А как же userlist_file=/etc/vsftpd.userlist?


dexter :

Zyxmon,  я выше написал, что выдает телнет при попытке подключиться "500 OOPS: vsftpd: refusing to run with writable root inside chroot()".

Совершенно справедливо говорит. Раз у вас несколько пользователей, почему вы им дали право на изменение домашней папки? Давайте разберёмся. Vsftpd запускается от рута и ждёт подключений. После ввода допустимых учётных данных vsftpd порождает дочерний процесс от имени этого пользователя, дочерний процесс с помощью chroot изолируется в свою домашнюю «песочницу» после проверки сан.условий. Выше песочницы возможности записи быть не должно.

dexter :

Zyxmon,  нет никаких мыслей или возможности пересобрать пакет. Или собрать под zyxware я б оттестировал.

Нечего пересобирать, просто не выполнены условия конфигурирования пакета. Директива "allow_writeable_chroot=YES", которую вы нагуглили, насколько помню, применима лишь в vsftpd, но не применима к vsftpd-ext.

PS Я сам старательно наступал на все перечисленные в теме грабли, пока не сконфигурировал vsftpd-ext правильно. К сожалению, готового рецепта для себя на будущее я не оставил.

Отредактировано ryzhov_al (2014-11-15 15:15:27)

Со всеми вытекающими...

15

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Zyxmon, и с с "allow_writeable_chroot=YES" тоже самое.
ryzhov_al, дело в том, что если эту конфигурацию перекинуть на дебиант, там все отлично начинает работать если закомментировать "#chroot_local_user=yes, #chroot_list_enable=NO" на кинетике не в какую. Жаль у вас не осталось рабочей конфигурации. В userlist_file=/etc/vsftpd.userlist прописан единственный пользователь "test" под которым пытаюсь попасть на фтп. Этот же юзер "test" есть в системе.

16

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter, ещё есть подозрение, связанное с отсутствием определённых флагов в ядре при порождении дочернего процесса. Выглядело как невнятная ошибка после логина пользователя. Лечилось так. Отлавливалось с помощью strace.

Со всеми вытекающими...

17

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

ryzhov_al,  а можете сказать, что с этим делать? И как это отловить. Если надо вывод strace дам.

18

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

а можете сказать, что с этим делать?

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

Со всеми вытекающими...

19

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

К сожалению моих знаний для этого не достаточно. Может у кого есть свободное время для проверки этой теории?

20

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

А это выдает телнет "500 OOPS: vsftpd: refusing to run with writable root inside chroot()"

То, что по этой ошибке гуглится и если эти строки добавлять в конфиг, то  vsftpd перестает запускаться.

А знаете почему? Потому что большинство приведённых в сети решений относятся к версиям 2.х и уже не актуальны, о чём и написано в FAQ. Сейчас специально проверил на RT-N66U, опция работает. Привожу работоспособный конфиг:

admin@RT-N66U:/# cat /opt/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/opt/var/log/vsftpd.log
idle_session_timeout=300
data_connection_timeout=60
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP..
ls_recurse_enable=YES
listen=YES
chroot_local_user=YES
background=YES
pasv_enable=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/opt/etc/vsftpd/users.list
delay_failed_login=2
delay_successful_login=0
connect_timeout=60
chmod_enable=NO
max_clients=3
max_login_fails=3
max_per_ip=2
check_shell=NO
force_dot_files=NO
lock_upload_files=YES
dirlist_enable=YES
download_enable=YES
delete_failed_uploads=YES
local_root=/tmp/mnt/BACKUP
allow_writeable_chroot=YES

admin@RT-N66U:/# cat /opt/etc/vsftpd/users.list
admin
Со всеми вытекающими...

21

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Вы будете смеяться, но не работает. Таже самая ошибка. Запускается он без проблем.

Мои конфиги:

~ # cat /opt/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/opt/var/log/vsftpd.log
idle_session_timeout=300
data_connection_timeout=60
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP..
ls_recurse_enable=YES
listen=YES
chroot_local_user=YES
background=YES
pasv_enable=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/opt/etc/vsftpd/user.list
delay_failed_login=2
delay_successful_login=0
connect_timeout=60
chmod_enable=NO
max_clients=3
max_login_fails=3
max_per_ip=2
check_shell=NO
force_dot_files=NO
lock_upload_files=YES
dirlist_enable=YES
download_enable=YES
delete_failed_uploads=YES
local_root=/media/DISK_A1/1
allow_writeable_chroot=YES~ #

~ # cat /opt/etc/vsftpd/user.list
test~ #

~ # cat /etc/passwd
root:xxxx:0:0:Root:/opt/root:/opt/bin/ash
nobody:x:99:99:Nobody:/:
test:xxx:1:1:Linux User,,,:/media/DISK_A1/1:/opt/bin/ash

Отредактировано dexter (2014-11-16 18:51:07)

22

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

Вы будете смеяться, но не работает. Таже самая ошибка.

Смеяться вряд ли буду, любопытство сподвигло на установку и тестовую настройку vsftpd-ext. Из винды я использую Total Commander, который отображает консоль ftp-соединения со всеми ответами сервера.

Какая "та же самая" ошибка? Не запускается сервер с руганью на allow_writeable_chroot или получается ошибку 500 OOPS: vsftpd: refusing to run with writable root inside chroot() во время работы? Если второе, то когда ошибка возникает: до или после попытки логина?

Со всеми вытекающими...

23

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Сервер запускается. Пользователя не пускает. При попытке подключения телнетом получаю 500 OOPS: vsftpd: refusing to run with writable root inside chroot().

Он лог не пишет в файл. Старая версия хоть логи писала.

http://album.foto.ru/photos/or/123518/3777470.jpg


Я помню как с poptop'ом ковырялись, что он не хотел с шифрованием работать. Потом его Zyxmon собрал как надо.

Отредактировано dexter (2014-11-16 19:16:57)

24

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

dexter :

Он лог не пишет в файл. Старая версия хоть логи писала.

Вы точно проверяли мой конфиг? Там в т.ч. прописано ведение логов.

Со всеми вытекающими...

25

Re: Entware+GigaII+vsftpd-ext не работает с локальными пользователями

Я его скопировал, подправил путь с "userlist_file=/opt/etc/vsftpd/users.list" на "userlist_file=/opt/etc/vsftpd/user.list" и все.
Он запустился, но ошибка никуда не пропала. В лог файле ни одной строчки.