Я создал нового пользователя (foo
), и когда он входит в систему через ftp, он не может редактировать файлы в каталоге, к которому у него есть доступ.
В каталоге он может авторизоваться ls -l
дает мне:
-rw-rw-r-- 1 root www-pub 6427 Nov 17 04:21 index.html
Пользователь принадлежит к группе www-pub
. Вот результат cat /etc/group
чтобы продемонстрировать, что он действительно находится в этой группе:
...
www-pub:x:1001:ftpuser,www-data,foo
foo:x:1002:
* отредактируйте права доступа к содержащему каталогу:
drwxrwsr-x 5 root www-pub 4096 Nov 17 02:53 thecontainingdir
и тот, что выше:
drwxrwsr-x 49 root www-pub 4096 Nov 16 02:40 thenextdirup
Итак, поскольку он может войти в систему через ftp, и поскольку файл, который ему нужно отредактировать, имеет правильные разрешения, чтобы позволить группе www-pub
читает и записывает файл, а он является членом этой группы, почему он не может его редактировать (или загружать что-либо)?
Только когда я меняю файл на 777
он может отредактировать это. Как будто его НЕ в группе ... но он есть! В чем дело?
Вкратце, v3.2.5 vsftpd не будет работать с записываемым корнем внутри chroot (), поэтому вам нужно либо сделать корневую папку пользователя недоступной для записи, либо перейти на новую версию (и установить некоторые настройки conf), либо перейти на более старую версию. версия.
Хорошо, проблема возникла из-за того, что я использовал vsftpd версии 2.3.5 (последний пакет, доступный для моего сервера). Эта версия vsftpd требует, чтобы домашний каталог пользователя ftp НЕ имел прав записи. Да, Вы прочли это правильно. Итак, в моем случае я хотел, чтобы пользователь мог подключиться к корневому веб-серверу по ftp и начать редактирование. Не могу этого сделать. Мне пришлось создать другой каталог над корневым веб-каталогом, сделать его домашним каталогом пользователя, сделать его недоступным для записи, а затем пользователь мог бы войти по ftp, перейти к корневому веб-каталогу и отредактировать / загрузить, как ожидалось.
В моем случае это решение отстой, поскольку у меня есть несколько пользователей, работающих на разной глубине в нескольких виртуальных каталогах, но, по крайней мере, оно работает (и я использую перезапись, чтобы люди не запутались). Теперь мне нужно всегда следить за тем, чтобы вокруг всего, что я хочу назначить конкретному пользователю, есть каталог-оболочка.
Основные предложения, которые я нашел в Интернете:
add `allow_writeable_chroot=YES` to your conf file
(это не только не сработало, но и вызвало проблемы с перезапуском демона. Я подозреваю, что это работает, ЕСЛИ у вас более поздняя версия (3.0+) vsftpd)
перейти на предыдущую версию vsftpd
(Я удалил текущую версию и начал пытаться заставить старую версию работать с моим сервером, но столкнулся с таким количеством отсутствующих и неудачных зависимостей, что отказался от них. Другим онлайн-пользователям повезло вернуться к версии 2.3.2 или до версии 3. x, если вы можете скомпилировать свой собственный)
Некоторые другие предлагаемые решения, предложенные одним из разработчиков vsftpd, которые я нашел в Интернете:
Определите опцию local_root = в файле конфигурации. должен быть / home или другим путем к каталогу с папками пользователей. Таким образом, vsftpd переходит в корневой каталог / home.
(для меня это не сработает, потому что у меня не может быть единственного локального корня)
Определите опцию passwd_chroot_enable = yes в файле конфигурации и измените домашний каталог пользователя в файле / etc / passwd с «/ home / user» на «/home/./user» (без кавычек). Таким образом, vsftpd переходит в корневой каталог / home.
(это просто не будет работать на моем сервере.)
Загрузите исходники vsftpd-ext, скомпилируйте и перезапишите существующие двоичные файлы vsftpd или возьмите его из репозиториев и добавьте в файл конфигурации
option allow_writeable_root = yes.
(Я не могу скомпилировать на этом сервере.)