| Summary: | vsftpd и chown | ||
|---|---|---|---|
| Product: | ALT Linux Server | Reporter: | Vyacheslav A. Brunev <bv> |
| Component: | bugs | Assignee: | Anton V. Boyarshinov <boyarsh> |
| Status: | CLOSED WORKSFORME | QA Contact: | Andrey Cherepanov <cas> |
| Severity: | normal | ||
| Priority: | P2 | CC: | ldv, vvk |
| Version: | 4.0.1 | ||
| Hardware: | all | ||
| OS: | Linux | ||
|
Description
Vyacheslav A. Brunev
2008-05-15 07:26:17 MSD
Собственно ошибки тут вроде как и нет и вопрос следовало бы задать в sysadmins@. vsftpd для модификации объектов fs использует либо значение nopriv_user (если выполнен анонимный вход), либо делает это от имени конкретного аутентифицировавшегося юзера. А параметры chown_uploads=YES chown_username=ftp будут применены уже _после_ закачки файла. хм... очень сомневаюсь в этом по двум причинам: 1) при смене прав chmod 3777 /var/ftp/upload закачка рвётся с сообщением о получении некорректного значения с сервера (Неверный ответ 'n' полученный от сервера.), но файл создаётся нулевого размера у которого владелец указан именно vsftpd. Если создавать директорию, то всё создается без ошибок, но по прежнему владелец vsftpd (так что вы там говорите о смене пользователя после закачки?), при смене владельца (chown -R vsfpd /var/ftp/upload) на vsftpd получаем вот что: May 20 04:10:37 gate xinetd[31669]: libwrap refused connection to ftp (libwrap=vsftpd) from 213.210.105.5 2) vsftpd запускается суперпользователем и имея все права (777) можно чего нибудь придумать в плане безопасности, а по простому - не безопасно! P.S. этот-же конфиг (только настроенный как демон listen=YES) + самосборный vsftpd абсолютно нормально работает на томже сервере с абсолютно темиже правами, а вот родной альтовский нет :( Парадокс. Именно поэтому и пишу сюда а не в sysadmins т.к. посчитал это багой. P.S.S. если у Вас всё корректно работает - поделитесь опытом, буду признателен. Упс, насчёт nopriv_user я попутал.
> May 20 04:10:37 gate xinetd[31669]: libwrap refused connection to ftp
> (libwrap=vsftpd) from 213.210.105.5
only_from в xinetd?
Вот так всё работает:
# grep ^[^#] /etc/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
local_enable=YES
write_enable=YES
local_umask=002
anon_umask=002
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=vsftpd
chroot_local_user=YES
# pwd
/var/ftp/upload
# ls -ld .
drwxrws--- 2 vsftpd vsftpd 80 May 21 10:22 .
Про то, что с пользователем и тем более группой владельцем - vsftpd работает я и не отрицал, но вопрос был совсем не о том. Вопрос был в том почему не работает если я указываю владельцем пользователя ftp или любого другого и при этом права у этого владельца на соответствующую директорию (каталог) - upload имеются в полном объёме. Предлагаемый Вами способ (смена владельца на vsftpd директории upload) будет работать, но в этом случае не вижу смысла в этих двух строчках Вашего конфига: chown_uploads=YES chown_username=vsftpd т.к.с такой политикой - drwxrws--- 2 vsftpd vsftpd 80 May 21 10:22 всем что ни зальёт аноним и без того будет владеть пользователь и группа vsftpd. Поэтому правильней будет эти строчки Вам вообще убрать из конфига! Так что пока вопрос открыт... (In reply to comment #4) > Про то, что с пользователем и тем более группой владельцем - vsftpd работает я > и > не отрицал, но вопрос был совсем не о том. > Вопрос был в том почему не работает если я указываю владельцем пользователя > ftp а с какой стати vsftpd будет делать setuid ftp? > Предлагаемый Вами способ (смена владельца на vsftpd директории upload) будет > работать, но в этом случае не вижу смысла в этих двух строчках Вашего конфига: > chown_uploads=YES > chown_username=vsftpd У меня тут обычно стоит не vsftpd, для того чтобы ананимусы могли только заливать но не удалять залитое. Ксати права на upload тогда лучше поставить 3770 root:vsftpd > а с какой стати vsftpd будет делать setuid ftp? хм... например с такой: chown_uploads=YES chown_username=ftp > > > Предлагаемый Вами способ (смена владельца на vsftpd директории upload) будет > > работать, но в этом случае не вижу смысла в этих двух строчках Вашего конфига: > > chown_uploads=YES > > chown_username=vsftpd > > У меня тут обычно стоит не vsftpd, для того чтобы ананимусы могли только > заливать но не удалять залитое. Это к делу не относиться. Всё зависит от значения опции - anon_other_write_enable=YES у меня она как видите в YES. > > Ксати права на upload тогда лучше поставить 3770 root:vsftpd Я бы даже сказал 3774 иначе у меня пользователи просто не увидят того чего они записали. У меня пока не решу окончательно эту проблему сейчас сделано так: chmod 3774 /var/ftp/upload тоесть: drwxrwsr-T 8 vsftpd ftpadmin 4096 Май 30 15:40 upload И полностью убрал из конфига строки: chown_uploads=YES chown_username=ftp но это не айс... (In reply to comment #6) > > а с какой стати vsftpd будет делать setuid ftp? > > хм... > например с такой: > chown_uploads=YES > chown_username=ftp man 5 vsftpd.conf /chown_uploads Как-то я неправильно изъясняюсь видимо... или вообще не умею этого делать, но у
меня такое впечатление, что у нас с Вами разговор как у слепого с немым.
Если я где-то не прав так вы подскажите более понятным образом, пока я вообще не
вижу сдвигов, man vsftpd.conf я уже читал достаточно подробно + ознакомился как
это сделано у других и не вижу ошибок с моей стороны.
chown_uploads
If enabled, all anonymously uploaded files will have the ownership
changed
to the user specified in the setting chown_username. This is
useful from
an administrative, and perhaps security, standpoint.
Если включено, то всем анонимно загруженным файлам изменяется право владения на
пользователя, определенного в настройке chown_username. Это полезно с точки
зрения безопасности и для администрирования.
И что нового я познал? Ещё раз повторяю, что мне именно в целях безопасности и
именно более удобного администрирования нужно чтобы всё это также адекватно
работало (т.е. была возможность загружать файлы) при замене не на vsftpd
пользователя, а на простого ftp да и вообще любого другого. Как это работает в
других дистрибутивах.
При этом заметил ещё странную вещь - если не убрать из конфига:
chown_uploads=YES
chown_username=vsftpd
то файлы закаченные в upload имеют права 600 хотя в /etc/vsftpd/conf
есть запись file_open_mode=0777, если закоментировать всё что связано с chown,
то всё встаёт на свои места т.е. файлы имеют нужные права, вот уж чертовщина...
P.S.
file_open_mode
The permissions with which uploaded files are created. Umasks are
applied
on top of this value. You may wish to change to 0777 if you want
uploaded
files to be executable.
Default: 0666
(In reply to comment #8) > chown_uploads > Если включено, то всем анонимно загруженным файлам изменяется право владения на > пользователя, определенного в настройке chown_username. и где тут написано, что vsftpd делает setuid в этого пользователя? > И что нового я познал? Ещё раз повторяю, что мне именно в целях безопасности и > именно более удобного администрирования нужно чтобы всё это также адекватно > работало (т.е. была возможность загружать файлы) при замене не на vsftpd > пользователя, а на простого ftp да и вообще любого другого. Как это работает в > других дистрибутивах. А может в "других дистрибутивах" vsftpd работает как раз от юзера ftp? > При этом заметил ещё странную вещь - если не убрать из конфига: > chown_uploads=YES > chown_username=vsftpd > то файлы закаченные в upload имеют права 600 man 5 vsftpd.conf /anon_umask P.S. я заканчиваю сюда писать, т.к. это не багрепорт а обсуждение "как мне настроить vsftpd" :( (In reply to comment #9) > А может в "других дистрибутивах" vsftpd работает как раз от юзера ftp? > Не уверен. В Debian-е и FreeBSD у меня проблем не возникло, а вот с Альтом что-то не срослось... > > При этом заметил ещё странную вещь - если не убрать из конфига: > > chown_uploads=YES > > chown_username=vsftpd > > то файлы закаченные в upload имеют права 600 > > man 5 vsftpd.conf > /anon_umask Хорошая шутка - смешно :) Маска у меня 022. Печально, но похоже придётся оставаться на самосборном vsftpd :( У меня vsftpd работает таким образом, как вы спрашиваете, с помощью # grep '^[^#]' /etc/vsftpd.conf anonymous_enable=YES write_enable=YES anon_upload_enable=YES chown_uploads=YES chown_username=ftp Убедитесь в том, что у вас свежий vsftpd и актуальный конфиг. Ок. Обновился имеем:
rpm -qa | egrep "(xinetd|vsftpd)"
docs-vsftpd-0.1-alt2
xinetd-2.3.14-alt2
vsftpd-2.0.6-alt1
Чтобы небыло разночтений для теста сделал так как Вы мне предложили + добавил
три строчки в конце (ничего крименального).
Итак:
Настройки:
[root@bv ~]#cat /etc/xinetd.d/vsftpd
# default: off
# description: The vsftpd FTP server.
service ftp
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
nice = 10
rlimit_as = 64M
server = /usr/sbin/vsftpd
# server_args =
}
[root@bv ~]# cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
log_type = SYSLOG authpriv info
log_on_success = PID HOST DURATION
log_on_failure = HOST
instances = 100
per_source = 5
# only_from = 127.0.0.1
}
includedir /etc/xinetd.d
[root@bv ~]# cat /etc/vsftpd.conf
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=ftp
anon_root=/home/ftp
anon_umask=022
file_open_mode=0777
Права на директорию:
[root@bv ~]# ls -la /home/ftp/incoming
итого 0
drwxrwsrwt 2 ftp ftpadmin 27 Июн 2 16:22 .
drwxr-xr-x 5 root root 39 Июн 2 16:22 ..
-rw------- 1 vsftpd ftpadmin 0 Июн 2 16:22 vsftpd.tar.bz2
Здесь видно что vsftpd.tar.bz2 имеет нулевой размер — это в результате
копирования в эту директорию при владельце ftp. При этом в логе закачиваемого
клиента (gFTP), а при закачке клиент очень долго думал, он с сервера не выкидывало:
USER anonymous@192.168.1.10:0
331 Please specify the password.
PASS xxxx
230 Login successful.
SYST
215 UNIX Type: L8
TYPE I
200 Switching to Binary mode.
CWD /incoming
250 Directory successfully changed.
PORT 192,168,1,10,134,173
200 PORT command successful. Consider using PASV.
STOR /incoming/vsftpd.tar.bz2
553 Could not create file.
Загрузка списка файлов каталога /incoming с сервера (LC_TIME=ru_RU.UTF-8)
PORT 192,168,1,10,174,243
200 PORT command successful. Consider using PASV.
LIST -aL
150 Here comes the directory listing.
226 Directory send OK.
Ok. Удаляем закачаный нулевой файл и меняем владельца на vsftpd.
[root@bv ~]# rm -f /home/ftp/incoming/vsftpd.tar.bz2
[root@bv ~]# chown vsftpd /home/ftp/incoming
Пробуем закачать:
USER anonymous@192.168.1.10:0
331 Please specify the password.
PASS xxxx
230 Login successful.
SYST
215 UNIX Type: L8
TYPE I
200 Switching to Binary mode.
PWD
257 "/"
Загрузка списка файлов каталога / с сервера (LC_TIME=ru_RU.UTF-8)
PASV
227 (192,168,1,222,9,181)
LIST -aL
150 Here comes the directory listing.
226 Directory send OK.
CWD /incoming
250 Directory successfully changed.
PWD
257 "/incoming"
Загрузка списка файлов каталога /incoming с сервера (LC_TIME=ru_RU.UTF-8)
PASV
227 (192,168,1,222,9,183)
LIST -aL
150 Here comes the directory listing.
226 Directory send OK.
Локальный каталог успешно изменён на /home/bv/VSFTPD
Загрузка списка файлов каталога /incoming из кэша (LC_TIME=ru_RU.UTF-8)
PASV
227 (192,168,1,222,9,216)
STOR /incoming/vsftpd.tar.bz2
Загрузка списка файлов каталога /incoming с сервера (LC_TIME=ru_RU.UTF-8)
PASV
PORT 192,168,1,10,206,79
Неверный ответ 'n' полученный от сервера.
Отключение от сервера 192.168.1.10
При этом файл залился тоже нулевого размера, но при этом выкинуло с сервера.
[root@bv ftp]# ls -la /home/ftp/incoming/
итого 0
drwxrwsrwt 2 vsftpd ftpadmin 27 Июн 2 16:45 .
drwxr-xr-x 5 root root 39 Июн 2 16:22 ..
-rw------- 1 vsftpd ftpadmin 0 Июн 2 16:45 vsftpd.tar.bz2
Ладно... Меняем в конфигурационном файле vsftpd при этом не меняем владельца
директории, т.е. оставляем chown vsftpd incoming:
chown_username=vsftpd
Теперь заходим заново на сервер (предварительно также вычистив эту директорию) и
пробуем залить тот-же файл:
[root@bv ftp]# ls -la /home/ftp/incoming/
итого 24
drwxrwsrwt 2 vsftpd ftpadmin 27 Июн 2 16:51 .
drwxr-xr-x 5 root root 39 Июн 2 16:22 ..
-rw------- 1 vsftpd ftpadmin 23722 Июн 2 16:51 vsftpd.tar.bz2
И всё прекрасно залилось. Продолжаем... Убираем такие строки из конфига вообще:
chown_uploads=YES
chown_username=vsftpd
Получаем:
[root@bv incoming]# ls -la /home/ftp/incoming/
итого 24
drwxrwsrwt 2 vsftpd ftpadmin 27 Июн 2 16:59 .
drwxr-xr-x 5 root root 39 Июн 2 16:22 ..
-rwxr-xr-x 1 vsftpd ftpadmin 23722 Июн 2 16:59 vsftpd.tar.bz2
Всё залилось, он вот с подменой владельца ну никак....
(In reply to comment #12) > Чтобы небыло разночтений для теста сделал так как Вы мне предложили В моём тесте владельцем каталога upload был root. (In reply to comment #13) > (In reply to comment #12) > > Чтобы небыло разночтений для теста сделал так как Вы мне предложили > > В моём тесте владельцем каталога upload был root. > Это дело не меняет! [root@bv ftp]# ls -la /home/ftp/incoming итого 0 drwxrwsrwt 2 root ftpadmin 27 Июн 3 08:15 . drwxr-xr-x 5 root root 39 Июн 2 16:22 .. -rw------- 1 vsftpd ftpadmin 0 Июн 3 08:15 vsftpd.tar.bz2 Как мы видим якобы залитый (нулевого размера) файл с владельцем vsftpd но никак не ftp. В случае с наследованием GID и закрепляющего бита на директорию ftp-клиент отваливается с ошибкой: Неверный ответ 'n' полученный от сервера. Отключение от сервера 192.168.1.10 При отключении наследования (т.е. chmod 0777 /home/ftp/incoming) отваливается по таймауту и видим всё также нулевой файл: STOR /incoming/vsftpd.tar.bz2 Тайм-аут соединения 192.168.1.10 Отключение от сервера 192.168.1.10 Ошибка: Удалённый сервер отключился после попытки передать файл Невозможно выкачать /home/bv/VSFTPD/vsftpd.tar.bz2 c локальная файловая система Ошибка: Удалённый сервер локальная файловая система отключился. Повторное соединение будет выполнено через 30 секунд. И вы хотите сказать, что баги нет? (In reply to comment #14) > И вы хотите сказать, что баги нет? Я хочу сказать, что я не смог её воспроизвести. Наиболее вероятно, что у вас какая-то локальная специфика. (In reply to comment #15) > (In reply to comment #14) > > И вы хотите сказать, что баги нет? > > Я хочу сказать, что я не смог её воспроизвести. > Наиболее вероятно, что у вас какая-то локальная специфика. Странно конечно. У меня одинаково не работает vsftpd на двух машинах. На одной у меня серверная версия + обновлён из ветки branch (собственно на неё я и хотел всё "правильно" настроить), а на второй - это та на которой работаю, но всё бестолку :( Ну ладно, буду как-то пытаться решить сложившуюся ситуацию. Спасибо всем за терпение и помощь. |