Home » Linux » CentOS » Установка и настройка vsftpd на CentOS 7

Установка и настройка vsftpd на CentOS 7

Меня попросили в разделе с заказами написать статью на тему ftp сервера. Я планировал ее написать ранее, но все откладывал, а теперь решил сделать это. В качестве примера я возьму ftp сервер — vsftpd, систему — CentOS 7. Рассмотрю несколько разных вариантов настройки — простой и более сложный.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

Введение

По моим наблюдениям, популярность ftp серверов с каждым годом падает. Сам я очень редко им пользуюсь и на свои сервера чаще всего не устанавливаю. Так как я работаю с серверами, к которым имею доступ по ssh, необходимости в ftp нет, использую SFTP.

Серьезную конкуренцию ftp создали облачные сервисы для хранения файлов. Чтобы кому-то передать файл, достаточно его расшарить на облачном хранилище и отправить человеку ссылку.

Тем не менее, в некоторых случаях может понадобиться ftp сервер. Доступ к такому серверу часто дают тогда, когда нужно, чтобы к вам кто-то что-то закачал большого объема. Так же ftp доступ дают некоторые хостинг компании, когда вы у них заказываете сервер для бэкапов. Например, ihor, которым я постоянно пользуюсь, предлагает услугу пространство для бэкапа именно по протоколу ftp.

Так что хоть ftp и потерял популярность, но не перестал быть актуальным. Рассмотрим настройку ftp сервера на примере vsftpd. Сделаем несколько конфигураций:

  1. Самая быстрая и простая. В качестве пользователей ftp будут системные пользователи.
  2. Более сложная конфигурация, где пользователи будут виртуальные, хранить их будем в отдельном файле.
  3. Вариант с виртуальными пользователями, но хранить мы их будем в mysql базе.

Работать будем на следующем сервере:

Настройка ftp на Centos 7

Простая настройка ftp в CentOS 7

Если у вас уже есть готовый сервер, то сразу приступайте к установке vsftpd. Если нет, то рекомендую две подходящие статьи для предварительной подготовки: подробная установка centos 7 и базовая настройка сервера.

Начинаем традиционно с обновления системы:

# yum -y update

Устанавливаем vsftpd:

# yum -y install vsftpd

Переходим к настройке. Я использую следующую схему работы ftp сервера с системными пользователями. Пользователю root разрешаю ходить по всему серверу. Всем остальным пользователям только в свои домашние директории. Анонимных пользователей отключаю.

Очистим каталог /etc/vsftpd, нам ничего не нужно из того, что там есть по-умолчанию. Можете сохранить куда-нибудь оригинальный конфиг, нам он не понадобится.

# rm -rf /etc/vsftpd/*

Открываем конфиг сервера /etc/vsftpd/vsftpd.conf

# mcedit /etc/vsftpd/vsftpd.conf

и приводим его к следующему виду vsftpd.conf. Не вывожу файл сюда, чтобы не растягивать страницу, конфигов в статье будет много. В файле даны подробные комментарии к каждому параметру.

Создаем необходимых пользователей, файлы и каталоги для установленной конфигурации. Добавим тестового пользователя ftp в систему:

# useradd -s /sbin/nologin ftp-user
# passwd ftp-user

Пользователя создаем без оболочки. Тут сразу можно указать в качестве домашней директории необходимый каталог, в котором будет работать пользователь. Я специально этого не делаю, чтобы продемонстрировать работу пользовательских настроек в отдельном файле. Пользователь будет создан со стандартным домашним каталогом в /home, но при работе по ftp он будет направлен в другой каталог, который мы ему укажем через файл пользовательских настроек vsftpd.

Создаем каталог для персональных настроек пользователей:

# mkdir /etc/vsftpd/users

В каталоге можно будет создать отдельно файлы с именами пользователей и передать им персональные параметры. Для примера создадим файл с именем пользователя ftp-user и укажем его домашний каталог:

# touch /etc/vsftpd/users/ftp-user
# echo 'local_root=/ftp/ftp-user/' >> /etc/vsftpd/users/ftp-user

Не забываем создать этот каталог и назначить ему владельца:

# mkdir /ftp && chmod 0777 /ftp
# mkdir /ftp/ftp-user && chown ftp-user. /ftp/ftp-user/

Создаем файл c пользователями, которым можно выходить за пределы домашнего каталога:

# touch /etc/vsftpd/chroot_list

Добавляем туда рута:

# echo 'root' >> /etc/vsftpd/chroot_list

Создаем файл со списком пользователей ftp, которым разрешен доступ к серверу:

# touch /etc/vsftpd/user_list
# echo 'root' >> /etc/vsftpd/user_list && echo 'ftp-user' >> /etc/vsftpd/user_list

Этим списком мы можем ограничить доступ к ftp серверу системных пользователей, которым туда ходить не нужно. Осталось только создать файл для логов:

# touch /var/log/vsftpd.log && chmod 600 /var/log/vsftpd.log

Все готово для работы. Добавляем vsftpd в автозагрузку и запускаем:

# systemctl enable vsftpd
# systemctl start vsftpd

Проверяем, запустился ли он:

# netstat -tulnp | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 19505/vsftpd

Все в порядке, можно подключаться клиентом.

Прежде чем начнете проверять подключение, убедитесь, что у вас настроен firewall. Либо выключите его, либо настройте для разрешения подключений по ftp. Узнать как правильно настроить iptables для работы ftp сервера можно в отдельной статье, посвященной настройке iptables. Там есть все необходимые пояснения и примеры.

Я зашел пользователем root и смог прогуляться по всей файловой системе.

Подключение к vsftpd серверу

Пользователь ftp-user ограничен своим домашним каталогом, указанном в индивидуальном файле с параметрами. Выйти за его пределы он не может. В лог файле отражены все действия пользователей на сервере: загрузка и скачивание файлов.

Обращаю внимание, что это мой опыт работы с vsftpd. Давать доступ системному руту по ftp ко всей файловой системе весьма опасно, нужно пользоваться осторожно. Я уже точно не помню, зачем я так делал, остались заметки с давних времен. Рассматривайте это просто как демонстрацию возможностей и используйте эти функции так, как вам нужно.

Настройка vsftpd с виртуальными пользователями

Рассмотрим вариант, когда пользователи ftp сервера не должны пересекаться с локальными. В данном примере будут работать только виртуальные пользователи. Я мельком проверил, можно ли настроить и тех и других, оказалось, что можно. Но там надо аккуратно с правами разбираться и со списками разрешенных пользователей. Я решил, что не буду описывать эту ситуацию, так как не очень представлю, когда она может пригодиться. Если кому-то надо, то на базе этой статьи он сам сможет разобраться.

Чтобы авторизовать виртуальных пользователей, установим дополнительный пакет compat-db:

# yum -y install compat-db

На всякий случай сохраните оригинальный pam.d файл, если захотите снова вернуться к системным пользователям:

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.orig

Нужно изменить pam файл /etc/pam.d/vsftpd, приведя его к следующему виду:

# mcedit /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
session required pam_loginuid.so
# mcedit /etc/vsftpd/vsftpd.conf

Рисуем следующий конфиг для vsftpd vsftpd.conf Создаем файл с виртуальными пользователями:

# touch /etc/vsftpd/virt_users

Добавляем туда в первую строку имя пользователя, во вторую его пароль. В конце не забудьте перейти на новую строку, это важно. Файл должен быть примерно таким:

ftp-virt1
password1
ftp-virt2
password2

Сохраняем файл и генерируем локальное хранилище учеток:

# db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db

У вас должен появиться файл virt_users.db.

Нужно создать каталоги для этих пользователей:

# mkdir /ftp/ftp-virt1 /ftp/ftp-virt2

Для папки /ftp надо назначить соответствующего владельца, от которого ftp сервер будет пускать виртуальных пользователей:

# chown -R ftp. /ftp

На этом настройка виртуальных пользователей ftp закончена. Перезапускаем vsftpd и пробуем залогиниться:

# systemctl restart vsftpd

Я набросал небольшой скрипт, чтобы было удобно добавлять новых пользователей, предлагаю воспользоваться:

# mcedit /etc/vsftpd/add_virt_user.sh
#!/bin/sh

echo -n "Enter name of virtual user: "
read virtuser

echo -n "Enter password: "
read virtpass

mkdir /ftp/$virtuser
chown ftp. /ftp/$virtuser
touch /etc/vsftpd/users/$virtuser

echo "$virtuser" >> /etc/vsftpd/virt_users
echo "$virtpass" >> /etc/vsftpd/virt_users

db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db

Делаете файл исполняемым и запускаете:

# chmod 0700 /etc/vsftpd/add_virt_user.sh
# /etc/vsftpd/add_virt_user.sh
Enter name of virtual user: ftp-virt2
Enter password: 123456

Все, пользователь добавлен, можно сразу им заходить. Вот так легко и просто настраиваются виртуальные пользователи в vsftpd. Рассмотрим теперь третий вариант, когда эти пользователи хранятся в mysql базе.

Хранение vsftpd пользователей в mysql

Настройка не отличается от предыдущего раздела. Конфиг один в один совпадает. Изменится только файл в pam.d. Но перед тем, как его изменить, выполним подготовительные настройки. Первым делом нам понадобится mariadb, устанавливаем ее:

# yum install -y mariadb mariadb-server

Запускаем и добавляем ее в автозагрузку:

# systemctl start mariadb
# systemctl enable mariadb.service

Выполняем скрипт первоначальной настройки mysql:

# /usr/bin/mysql_secure_installation

Подробнее о настройке mysql рассказано в статье про настройку web сервера на centos. Если вам в будущем понадобится веб сервер, можете сразу его настроить, а заодно поставить phpmyadmin, дальнейшие действия проще будет выполнить там. Но я сейчас не буду на этом останавливаться, сделаем все в консоли.

Подключаемся к mysql:

# mysql -u root -p

Создаем пользователя и базу данных для хранения учетных записей пользователей ftp:

> CREATE DATABASE vsftpd;
> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '12345';
> FLUSH PRIVILEGES;
vsftpdимя пользователя и базы
12345пароль пользователя

Создаем таблицу учеток:

> USE vsftpd;
> CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (`username`)
) ENGINE = MYISAM ;
Обратите внимание на кавычки при копировании. Если будут ошибки в синтаксисе mysql, вам нужно будет их удалить и проставить заново.

Создадим сразу одного пользователя:

> INSERT INTO accounts (username, pass) VALUES('ftp-mysql', md5('123'));
ftp-mysqlимя пользователя
123пароль

Список пользователей можно посмотреть с помощью команды:

> select * from accounts;
+----+-----------+----------------------------------+
| id | username | pass |
+----+-----------+----------------------------------+
| 1 | ftp-mysql | 202cb962ac59075b964b07152d234b70 |
+----+-----------+----------------------------------+
1 row in set (0.01 sec)

Выходим из консоли mysql и создаем каталог для нового пользователя:

# mkdir /ftp/ftp-mysql && chown ftp. /ftp/ftp-mysql

Для авторизации пользователей vsftpd через mysql нам необходимо установить pam_mysql. Тут я столкнулся серьезной проблемой. Во-первых, в стандартном репозитории его нет. Раньше он был в репозитории epel, но начиная с 7-й версии его оттуда убрали. Причина в том, что он очень старый, 2008-го года или еще раньше, если я не ошибаюсь. С тех пор он не обновляется. В centos решили, что этот модуль уже не нужен, он морально устарел, а хранить учетные записи в mysql плохая идея. В тренде сейчас ldap, надо там хранить учетки. В принципе, это разумно. Но отказываться от привычной mysql все равно не хочется.

Мне пришлось прилично загуглиться в буржунет и найти там информацию. Я узнал, что для CentOS 7 подойдет вот эта версия pam_mysql-0.7-0.16.rc1.fc20.x86_64.rpm. Было очень много битых ссылок, но все же я нашел рабочую. На всякий случай сохраняю ее у себя. Так что ставим модуль pam_mysql для centos 7 с моего сайта:

# rpm -Uvh //serveradmin.ru/files/pam_mysql-0.7-0.16.rc1.fc20.x86_64.rpm

Теперь редактируем файл /etc/pam.d/vsftpd. В интернете много примеров конфигурации. Опытным путем собрал рабочий вариант:

# mcedit /etc/pam.d/vsftpd

session optional pam_keyinit.so force revoke
auth required pam_mysql.so user=vsftpd passwd=12345 host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3
account required pam_mysql.so user=vsftpd passwd=12345 host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=3

Сохраняем файл, перезапускаем на всякий случай vsftpd и пробуем зайти свежесозданным пользователем.

# systemctl restart vsftpd

У меня все получилось. Если будут какие-то проблемы, то смотрите в первую очередь на работу mysql_pam в логе /var/log/audit/auditlog. У меня были такие ошибки, когда я настраивал авторизацию и она не работала:

type=USER_AUTH msg=audit(1459442408.756:724): pid=21483 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication grantors=? acct="ftp-mysql" exe="/usr/sbin/vsftpd" hostname=192.168.1.100 addr=192.168.1.100 terminal=ftp res=failed'

После правильной настройки, появились такие записи:

type=CRED_ACQ msg=audit(1459442810.698:735): pid=21564 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:setcred grantors=pam_mysql acct="ftp-mysql" exe="/usr/sbin/vsftpd" hostname=192.168.1.100 addr=192.168.1.100 terminal=ftp res=success'

В логе /var/log/secure тоже может быть полезная информация. У меня было так:

Mar 31 19:39:44 vsftpd[21475]: pam_mysql - MySQL error(Unknown column 'passwd' in 'field list')

С пробелами в строках была путаница, пока не исправил, не работало ничего. Но потом все заработало.

На этом у меня сегодня все. Можно скрипт набросать для удобного добавления пользователей в базу, но мне уже лениво. Может кто-нибудь другой в комментариях поделится.

Заключение

Мы подробно рассмотрели вопрос использования vsftpd сервера с различной настройкой учетных записей. По мне удобнее всего работать с виртуальными пользователями в локальной не mysql базе. Но если используется какая-нибудь панель управления сервером, то удобно засунуть всех пользователей в базу.

Когда я настраивал публичный хостинг, то использовал самописные скрипты для создания каталогов виртуальных хостов, добавления настроек в апач и создание пользователей ftp с доступом к своим сайтам.  Там без ftp не обойтись, так как его постоянно просят веб мастера. В планах есть написать статью на эту тему, но пока руки не доходят.

Помогла статья? Есть возможность отблагодарить автора

Видео

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

42 комментария

  1. Аватар

    Здравствуйте!
    Сделал всё, как написано в первой части статьи — «Простая настройка ftp в CentOS 7»
    Вот что выдаёт:
    ———————————————————————
    [root@localhost vsftpd]# service vsftpd start
    Redirecting to /bin/systemctl start vsftpd.service
    Job for vsftpd.service failed because the control process exited with error code. See «systemctl status vsftpd.service» and «journalctl -xe» for details.
    [root@localhost vsftpd]# systemctl status vsftpd.service
    ● vsftpd.service — Vsftpd ftp daemon
    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since Thu 2016-06-16 23:51:06 EEST; 53s ago
    Process: 2176 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)

    Jun 16 23:51:06 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon…
    Jun 16 23:51:06 localhost.localdomain systemd[1]: vsftpd.service: control process exited, code=exited status=2
    Jun 16 23:51:06 localhost.localdomain systemd[1]: Failed to start Vsftpd ftp daemon.
    Jun 16 23:51:06 localhost.localdomain systemd[1]: Unit vsftpd.service entered failed state.
    Jun 16 23:51:06 localhost.localdomain systemd[1]: vsftpd.service failed.
    ———————————————————————

    Подскажите, в какую сторону копать…

    • Zerox

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

  2. Аватар

    Тоже самое выдал

    • Аватар

      у меня было тоже самое, но после того как я в ручную сделал copy/paste из предоставленного автором файла в свой файл настроек(через putty), то почти все заработало, а почти потому, что нужно настроить se linux, я его просто отключил
      П.С. Автор спасибо за твои работы, не раз выручали

  3. Аватар

    Всё сделал копипастом (первую часть, мне больше и не надо для стягивания архива), попробовал зайти рутом через Yummy FTP Pro, пишет неверный пароль… как он может быть неверным еcли я с ним сижу в SSH и делаю FTP? )))
    ftp-user тоже на свою папку пишет неверный пароль
    Что я не так сделал?

  4. Аватар
    Карен Григорьевич

    В iptables попробуй добавить правило на открытие 21 порта tcp. Мне помогло =)

  5. Аватар

    Здравствуйте, стал поклонником вашего сайта, сначала rsync’у у Вас учился, теперь FTP. Вроде все просто, главная проблема в том что если указываю домашний каталог пользователя «от имени которого подключается виртуальный пользователь» — вижу структуру папок, могу удалять, создавать, копировать и пр… Если указываю другую папку в файле /etc/vsftpd/users/ftproot то подключаюсь, а структуры нет, и ничего скопировать не могу, хотя вижу что папка подключилась та.
    Все конфиги копировать не буду чтобы не растягивать.
    /etc/vsftpd/vsftpd.conf

    # Разрешить подключаться виртуальным пользователям
    guest_enable=YES

    # Системный пользователь от имени котрого подключаются виртуальные
    guest_username=admroot

    # Виртуальные пользователи имеют те же привелегии, что и локальные
    virtual_use_local_privs=YES

    # Автоматическое назначение домашнего каталога для виртуальных пользователей
    #user_sub_token=$USER
    #local_root=/ftp/$USER
    # Запрещает подключение анонимных пользователей
    anonymous_enable=NO

    # Каталог, куда будут попадать анонимные пользователи, если они разрешены
    #anon_root=/ftp

    # Разрешает вход для локальных пользователей
    local_enable=YES

    # Разрешены команды на запись и изменение
    write_enable=YES
    # Включение специальных ftp команд, некоторые клиенты без этого могут зависать
    async_abor_enable=YES

    # Локальные пользователи по-умолчанию не могут выходить за пределы своего домашнего каталога
    chroot_local_user=YES

    # Разрешить список пользователей, которые могут выходить за пределы домашнего каталога
    chroot_list_enable=YES

    # Список пользователей, которым разрешен выход из домашнего каталога
    chroot_list_file=/etc/vsftpd/chroot_list

    # Разрешить запись в корень chroot каталога пользователя
    allow_writeable_chroot=YES

    # Директория с настройками пользователей
    user_config_dir=/etc/vsftpd/users

    # Маска прав доступа к создаваемым файлам
    local_umask=022

    # Порты для пассивного режима работы
    pasv_min_port=54988
    pasv_max_port=55000

    /etc/vsftpd/users/admroot
    local_root=/media/CentOS7_Disk2/BackUp/
    /etc/vsftpd/users/ftproot
    local_root=/media/CentOS7_Disk2/BackUp/

    /etc/vsftpd/chroot_list
    ftproot
    admroot

    Подключаюсь под пользователем ftproot, если в файле /etc/vsftpd/users/ftproot — /home/admroot/ — все видится, если /media/CentOS7_Disk2/BackUp/ — пустая папка.
    разрешения вроде похожи:
    /home/admroot/
    total 60
    drwx——. 15 admroot admroot 4096 May 31 08:19 .
    drwxr-xr-x. 3 root root 21 Jun 5 06:16 ..
    -rw——-. 1 admroot admroot 22685 Jun 5 12:20 .bash_history
    -rw-r—r—. 1 admroot admroot 18 Dec 6 23:19 .bash_logout
    -rw-r—r—. 1 admroot admroot 193 Dec 6 23:19 .bash_profile
    -rw-r—r—. 1 admroot admroot 231 Dec 6 23:19 .bashrc
    drwxrwxr-x. 10 admroot admroot 193 May 23 04:16 .cache
    drwxrwxr-x. 17 admroot admroot 4096 May 25 11:42 .config
    drwxr-xr-x. 2 admroot admroot 6 Jun 6 03:12 Desktop
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Documents
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Downloads
    -rw——-. 1 admroot admroot 16 May 23 03:33 .esd_auth
    -rw——-. 1 admroot admroot 2178 May 31 03:03 .ICEauthority
    -rw——-. 1 admroot admroot 35 May 26 11:25 .lesshst
    drwx——. 3 admroot admroot 19 May 23 03:33 .local
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Music
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Pictures
    drwxr-xr-x. 3 admroot admroot 39 Jun 5 11:08 Public
    drwx——. 2 admroot admroot 125 Jun 1 10:10 .ssh
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Templates
    drwxr-xr-x. 2 admroot admroot 6 May 23 03:33 Videos
    -rw——-. 1 admroot admroot 573 May 31 08:19 .viminfo
    drwx——. 2 admroot admroot 35 May 23 03:33 .vnc

    /media/CentOS7_Disk2/BackUp/
    total 16
    drwxrwxrwx. 3 admroot admroot 4096 Jun 5 11:34 .
    drwxr-xr-x. 7 root root 4096 Jun 5 05:21 ..
    drwxrwxrwx. 3 admroot admroot 4096 Jun 5 11:37 df
    -rwxrwxrwx. 1 admroot admroot 5 Jun 5 11:34 er.conf

    Подскажите пожалуйста.

    • Аватар

      При этом я вижу структуру файлов, могу зайти даже в корневые каталоги /etc/ /dev/ и пр. но папки которым сам назначал права и владельца нет

  6. Аватар

    Может будет кому полезно:
    При подключении на клиенте появлялась ошибка «500 OOPS: failed to open vsftpd log file» или что-то похожее. Файл действительно был пуст, права -rw——-., юзер root, группа root.
    Остановил vsftpd, удалил лог-файл, запустил vsftpd. После этого подключение прошло успешно. Лог-файл, указанный в конфиге, появился сам, видимых отличий в правах доступа к нему я не нашёл, логи в него пишутся.

  7. Аватар

    Неужели этот мега безопасный фтпсервер не умеет банить айпи при неверном логине\пароле?

    • Zerox

      Это не задача ftp сервера. Если нужен бан по ip, то это без проблем настраивается с помощью iptables+fail2ban. Для анализа нужно брать лог файл /var/log/vsftpd.log.

      • Аватар

        Ага, спасибо, так и сделал. Просто видел возможность банить прямо из фтп на proftd.
        Кстати, как насчёт веб морды для vsftpd? Есть что-то вменяемое? Webmin модуль устарел не выйдя из беты. А это баженное весьма https://github.com/Tvel/VsftpdWeb

  8. Аватар
    Владимир

    Тестирую первый способ с системным пользователями. Захотелось мне включит анонимуса и столкнулся с такимответм сервера «500 OOPS: vsftpd: refusing to run with writable root inside chroot() » Пните меня в сторону правильного решения сей задачи!

    • Zerox

      Эта ошибка неплохо гуглится. Вариантов может быть много. Сходу мне приходит в голову мысль о том, что анонимус чрутится в директорию, к которой у него нет доступа.

      • Аватар
        Владимир

        Ну, когда я оставляю закоментированой строку «anon_root=/ftp» ошибка исчезает и анонимуса кидает вкаталог «/var/ftp» и он там только гость

        • Zerox

          А права на папку /ftp какие? Для доступа анонимусов надо сделать ей права 777 и проверить.

          • Аватар
            Владимир

            Так в том то и дело что проверил и перепроверил права на папку. /то первое что я сделал перед тем как написать. И ls -l показывает что на /ftp стоит «drwxrwxrwx»

    • Аватар

      Получилось разобраться?

  9. Аватар
    Владимир

    Протестировал виртуальных пользователей. Это так задумано что пользователи созданные с помощью скрипта не могут ничего создать у себя в папке или скрипт недоделанный? Ладно если бы все пользователи юзали один каталог задумка была бы интересной, а так…

    • Аватар
      Владимир

      Сорян. Сам накосячил)) Все норм!

    • Аватар
      Владимир

      Спасибо за полезную статью. Конфигурация с виртуальными пользователями понравилась. Как найду «железо», на котором подниматься будет, пойдет в бой!

  10. Аватар

    Респект, очень помогло!

    Однако надо бы добавить про настройку firewalld, например
    sudo firewall-cmd —permanent —zone=public —add-port=21/tcp
    sudo firewall-cmd —permanent —zone=public —add-port=49000-55000/tcp

    Ато пришлось потом гуглить почему не удается получить список каталогов, то ли прав не хватало, то ли из-за simlink

  11. Аватар
    Александр

    Всё сделал по инструкции:
    Job for vsftpd.service failed because the control process exited with error code. See «systemctl status vsftpd.service» and «journalctl -xe» for details.

    Где смотреть эти логи? Где находятся эти файлы?
    Не работает….

    • Zerox

      Написано же где смотреть:
      systemctl status vsftpd.service
      journalctl -xe

      • Аватар
        Александр

        Пояснение классное! Нет слов просто….
        Пользуйтесь лучше офф. документацией, а не подобными «записками», тогда всё будет работать!

        • Zerox

          Не понял, в чем проблема? Эти команды и выводят логи, где можно увидеть проблему. Откройте документацию по systemd и там будут эти же команды для просмотра логов запущенных сервисов.

          А вообще, я не настаиваю. Если вам кажется официальная документация более понятной и удобной, используйте ее.

          Искать проблему в других, а не в себе — дурная привычка. Статья рабочая и по ней многие настроили, в том числе и я.

  12. Аватар

    Не работает, все делал по шагам по первому варианту… service start не работает…
    Подскажите, что не так?

    vsftpd.service — Vsftpd ftp daemon
    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since Mon 2018-02-12 12:44:30 CET; 1min 39s ago
    Process: 1265 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=1/FAILURE)

  13. Аватар

    tcp_wrappers is set to YES but no tcp wrapper support compiled in

  14. Аватар

    Здравствуйте!

    Всё сделал по инструкции. При запуске так же, как у некоторых, выбивало ошибку, настроил в итоге файл конфигурации по примеру с другого сайта. Получил в итоге всего 5 строк, но всё запустилось без ошибок.
    Но появилась другая проблема: не могу через Total Commander подключиться к серверу — ошибка 530. Пытался её решить, но так и не получилось.
    Вообще, стоит задача иметь доступ к виртуальному серверу на хостинге для редактирования файлов сайта и заливки на него кучи фото для товаров, которые я подключаю с CSV-файла. Подключать фотки для каждого товара в отдельности, когда я эти товары могу сотнями заливать, не комильфо. Как мне через TC получить доступ к серверу?

    • Zerox

      Какую ошибку выдает при запуске? Вообще, ftp давно уже не рекомендуется использовать, так как он передает логин и пароль в открытом виде по инету. Лючшу использовать для этих целей sftp. Пример того, как это настраивается, есть здесь — https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/#__sftp

      • Аватар

        ___
        [root@localhost vsftpd]# service vsftpd start
        Redirecting to /bin/systemctl start vsftpd.service
        Job for vsftpd.service failed because the control process exited with error code. See «systemctl status vsftpd.service» and «journalctl -xe» for details.
        [root@localhost vsftpd]# systemctl status vsftpd.service
        ● vsftpd.service — Vsftpd ftp daemon
        Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
        Active: failed (Result: exit-code) since Thu 2016-06-16 23:51:06 EEST; 53s ago
        Process: 2176 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)

        Jun 16 23:51:06 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon…
        Jun 16 23:51:06 localhost.localdomain systemd[1]: vsftpd.service: control process exited, code=exited status=2
        Jun 16 23:51:06 localhost.localdomain systemd[1]: Failed to start Vsftpd ftp daemon.
        Jun 16 23:51:06 localhost.localdomain systemd[1]: Unit vsftpd.service entered failed state.
        Jun 16 23:51:06 localhost.localdomain systemd[1]: vsftpd.service failed.
        ___

        В логи вдаваться я не стал, просто в комментах почитал примерную причину ошибки и отредактировал файл конфигурации vsftpd, после чего старт прошёл успешно.

        А за совет спасибо, надеюсь хоть sftp смогу настроить без проблем))

  15. Аватар

    Все сделал по инструкции, работает. Но после обновления до CentOS Linux release 7.6.1810 (Core)
    не могу подключиться, ошибка total comand 530, нет такого польз. Но при этом по ssh с этим пользователем работаю. Службу sftpd перегрузил.

  16. Аватар

    вы забыли написать, что в файле /etc/shells должна быть строка /sbin/nologin

  17. Аватар

    Отличная статья. Спасибо.

  18. Аватар

    не знаю с чем связано. но при попытке подключиться к фтп FAIL LOGIN: Client, пишут о pam, что дело в нем
    решение:
    cat >> /etc/shell
    /sbin/nologin
    Ctrl+d
    systemctl restart vsftpd
    пользователь с запретом на shell сможет подключаться к ftp но по SSH не сможет, проверено.

  19. Аватар

    прошу прощения, путь к файлу не верен. ниже правильный
    cat >> /etc/shells

  20. Аватар

    Проблема: при подключении извне не переходит в пассивный режим, порты не заблочены провайдером (проверял ставил на них ссш),
    фаервол, селинукс выключены (у меня две сетевухи — первая смотрит в мир с реальным ip, вторая в локалку):
    netstat -tulnp | grep vsftpd
    tcp 0 0 IP:IP:IP:IP:10096 0.0.0.0:* LISTEN 16222/vsftpd
    tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 14722/vsftpd
    происходит подключение, имя пользователя принимает и ошибка на этапе перехода в пасив
    public (active)
    target: default
    icmp-block-inversion: no
    interfaces: ens192 ens224
    sources:
    services: ssh dhcpv6-client http https ftp
    ports: 21/tcp 20/tcp 10090/tcp 10090-10100/tcp 10090-10100/udp

  21. Аватар
    Алексей

    Допишите пожалуйста в фак (столкнулся с проблемой):
    Если при входе локального пользователя (не root) возникает Access Denied нужно прописать путь /sbin/nologin в файле: /etc/shells

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.