[Решено] Создание пользователя для FTP (VSFTPD). Ограничение личным каталогом. Ubuntu / Zentyal

Появилась необходимость создать группу затем пользователя ftp и дать ему права только в определенную директорию либо примонтированую директорию.

Cоздал каталоги подкаталог для пользователя в домашней папке.:
sudo mkdir /home/aedev/aedev1

Создаем отдельную группу для будущих пользователей:
sudo addgroup aedev

Создаем пользователя и добавляем его в нужную группу и определяем ему нужный каталог:
sudo useradd aedev1 -g aedev -p пароль -d /home/aedev/aedev1 -s /bin/false

Назначаем владельцев для папок:
sudo chown aedev1:aedev /home/aedev/aedev1


Теперь суть для чего это делается, мне нужно предоставить доступ к папке /srv/www/khutr.com
но не давать доступа к серверу и директориям выше.

Для этого в домашнем каталоге пользователя которому хотим дать доступ, создаем папку khutr.com
и назначим её владельца.

sudo mkdir /home/aedev/aedev1/khutr.com
sudo chown aedev1:aedev /home/aedev/aedev1/khutr.com

Дальше создаем точку монтирования для это правим файл:
sudo nano /etc/fstab
добавляем код:
/srv/www/khutr.com /home/aedev/aedev1/khutr.com none bind 0 0

sudo service vsftpd restart

в итоге все должно работать, но у меня проблема.

Если выбрать подключение SFTP:
Ошибка: Сбой аутентификации.
Ошибка: Критическая ошибка
Ошибка: Невозможно подключиться к серверу

Простой FTP:
Статус: Соединение установлено, ожидание приглашения…
Ответ: 220 Welcome to PcDoctor.kz FTP service.
Команда: AUTH TLS
Ответ: 234 Proceed with negotiation.
Статус: Инициализирую TLS…
Статус: Проверка сертификата…
Команда: USER aedev1
Статус: TLS/SSL соединение установлено.
Ответ: 331 Please specify the password.
Команда: PASS ********
Ответ: 530 Login incorrect.
Ошибка: Критическая ошибка
Ошибка: Невозможно подключиться к серверу

Кто что подскажет по этому поводу, ? :scratch_one-s_head:

root пользователь на ftp ходит, по SFTP все нормально.
Монтирование директории тоже происходит все корректно только подключение вновь созданным пользователем aedev1 нету вот это печально.

Что то все как то “сложно”, вот рабочий вариант настройки FTP, все время им пользуюсь:

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

vsftpd.conf

<%args>
$anonymous
$userHomes
$chrootUsers
$ssl
</%args>
<%init>
use EBox::Gettext;
</%init>
# /etc/vsftpd.conf - vsftpd configuration file
#
# Run standalone
listen=YES
#
# Allow anonymous FTP
% if ($anonymous eq 'disabled') {
anonymous_enable=NO
% } else {
anonymous_enable=YES
% }
anon_world_readable_only=YES
#
# Allow local users to log in
% if ($userHomes) {
local_enable=YES
% } else {
local_enable=NO
% }
#
# Allow any form of FTP write command
write_enable=YES
#
# Default umask is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd)
local_umask=022
anon_umask=022
#
# Allow the anonymous FTP user to write files
% if ($anonymous eq 'write') {
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# forbid renaming and removal of files
anon_other_write_enable=NO
% } else {
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
% }
#
# Activate directory messages
dirmessage_enable=YES
#
# Display directory listings with the time in your local time zone
use_localtime=YES
#
# Activate logging of uploads/downloads
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data)
connect_from_port_20=YES
#
# Uploaded anonymous files to be owned by a different user
#chown_uploads=YES
#chown_username=whoever
#
# Log file path
#xferlog_file=/var/log/vsftpd.log
#
# Log file in standard ftpd xferlog format
#xferlog_std_format=YES
#
# Customise the login banner string
ftpd_banner=<% __('Welcome to PcDoctor.kz FTP service.') %>
#
# Use the contents of this file for the login banner
#banner_file=/etc/vsftpd/banner
#
# Restrict local users to their home directories
% if ($chrootUsers) {
allow_writeable_chroot=YES
chroot_local_user=YES
% } else {
chroot_local_user=NO
% }
#
# List of local users to chroot() to their home directory. If
# chroot_local_user is YES, then this list becomes a list of users to NOT
# chroot()
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#
# Activate the "-R" option to the builtin ls. This is disabled by default to
# avoid remote users being able to cause excessive I/O on large sites.
# However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option
ls_recurse_enable=YES
#
# Show textual names in the user and group fields of directory listings
text_userdb_names=YES
#
# Empty directory not writable by the ftp user as a secure chroot() jail at
# times vsftpd does not require filesystem access
secure_chroot_dir=/var/run/vsftpd/empty
#
# PAM service vsftpd will use
pam_service_name=vsftpd
% if ($ssl ne 'disabled') {
#
# Support secure connections via SSL. This applies to the control connection
# (including login) and also data connections
ssl_enable=YES
#
# Certificate to use for SSL encrypted connections
rsa_cert_file=/etc/vsftpd/ssl/ssl.pem
#
# Not to require all SSL data connections to exhibit SSL session reuse
require_ssl_reuse=NO
#
# Force authenticated login and data via SSL
force_local_logins_ssl=<% ($ssl eq 'forcessl') ? 'YES' : 'NO' %>
force_local_data_ssl=<% ($ssl eq 'forcessl') ? 'YES' : 'NO' %>
% } else {
ssl_enable=NO
% }
#
# Disable seccomp sandboxing new feature because it causes errors
# https://bugs.launchpad.net/ubuntu/+source/vsftpd/+bug/1195816
seccomp_sandbox=NO

залезь в логи посмотри что в логах пишет… наверняка там ошибка в деталях указана…

Mon Jun 8 19:51:25 2015 [pid 3197] [aedevast] FAIL LOGIN: Client “95.59.95.192”
Mon Jun 8 19:51:26 2015 [pid 3198] DEBUG: Client “95.59.95.192”, “Connection terminated without SSL shutdown - buggy client?”
Mon Jun 8 19:52:20 2015 [pid 3249] CONNECT: Client “95.59.95.192”
Mon Jun 8 19:52:25 2015 [pid 3256] CONNECT: Client “95.59.95.192”
Mon Jun 8 19:53:16 2015 [pid 4309] CONNECT: Client “95.59.95.192”
Mon Jun 8 19:53:21 2015 [pid 4318] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:18:19 2015 [pid 7313] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:18:24 2015 [pid 7321] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:18:31 2015 [pid 7325] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:18:33 2015 [pid 7324] [aedevast] FAIL LOGIN: Client “95.59.95.192”
Mon Jun 8 20:18:34 2015 [pid 7325] DEBUG: Client “95.59.95.192”, “Connection terminated without SSL shutdown - buggy client?”
Mon Jun 8 20:20:02 2015 [pid 7519] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:20:04 2015 [pid 7518] [aedevast] FAIL LOGIN: Client “95.59.95.192”
Mon Jun 8 20:20:05 2015 [pid 7519] DEBUG: Client “95.59.95.192”, “Connection terminated without SSL shutdown - buggy client?”
Mon Jun 8 20:51:18 2015 [pid 9922] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:51:23 2015 [pid 9930] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:51:24 2015 [pid 9934] CONNECT: Client “95.59.95.192”
Mon Jun 8 20:51:26 2015 [pid 9933] [aedevast] FAIL LOGIN: Client “95.59.95.192”
Mon Jun 8 20:51:27 2015 [pid 9934] DEBUG: Client “95.59.95.192”, “Connection terminated without SSL shutdown - buggy client?”

Интересно что: успешный конект пользователя root в логах не светится, а вот не успешный отсвечивает.

Во-первых строчка как бы намекает в какую сторону смотреть:

DEBUG: Client "95.59.95.192", "Connection terminated without SSL shutdown - buggy client?"
Во-вторых, приглядись в конфиг, особенно к последним строчкам
# Support secure connections via SSL. This applies to the control connection # (including login) and also data connections [b]ssl_enable=YES[/b] # # Certificate to use for SSL encrypted connections rsa_cert_file=/etc/vsftpd/ssl/ssl.pem # # Not to require all SSL data connections to exhibit SSL session reuse require_ssl_reuse=NO # # Force authenticated login and data via SSL force_local_logins_ssl=<% ($ssl eq 'forcessl') ? 'YES' : 'NO' %> force_local_data_ssl=<% ($ssl eq 'forcessl') ? 'YES' : 'NO' %> % } else { [b]ssl_enable=NO[/b] % } #

Надо какбэ определиться)) и лучше определиться в сторону SSL

Также в конфе нет строчки указывающий на наличие приватного ключа т.е. отсутствует параметр: rsa_private_key_file=path_to_pem

Сделал:
ssl_enable=NO
в обоих строчках, не подключается.

Статус: Соединяюсь с 1X5.1X9.69.2XX:21... Статус: Соединение установлено, ожидание приглашения... Статус: Инициализирую TLS... Статус: Проверка сертификата... Статус: TLS соединение установлено. Команда: USER aedevast Ответ: 331 Please specify the password. Команда: PASS ********** Ответ: 530 Login incorrect. Ошибка: Критическая ошибка: Невозможно подключиться к серверу

Тысячу раз уже пароли/логины менял.
sudo passwd имя пользователя, поменял пароль стал подключаться но проблема теперь в другом, не может получить список файлов/папок.

Статус: Соединяюсь с 1X5.1X9.6.2X4:21…
Статус: Соединение установлено, ожидание приглашения…
Ответ: 220 Welcome to PcDoctor.kz FTP service.
Команда: AUTH TLS
Ответ: 234 Proceed with negotiation.
Статус: Инициализирую TLS…
Статус: Проверка сертификата…
Статус: TLS соединение установлено.
Команда: USER aedevast
Ответ: 331 Please specify the password.
Команда: PASS ********
Ответ: 230 Login successful.
Команда: SYST
Ответ: 215 UNIX Type: L8
Команда: FEAT
Ответ: 211-Features:
Ответ: AUTH TLS
Ответ: EPRT
Ответ: EPSV
Ответ: MDTM
Ответ: PASV
Ответ: PBSZ
Ответ: PROT
Ответ: REST STREAM
Ответ: SIZE
Ответ: TVFS
Ответ: UTF8
Ответ: 211 End
Команда: OPTS UTF8 ON
Ответ: 200 Always in UTF8 mode.
Команда: PBSZ 0
Ответ: 200 PBSZ set to 0.
Команда: PROT P
Ответ: 200 PROT now Private.
Статус: Соединение установлено
Статус: Получение списка каталогов…
Команда: PWD
Ответ: 257 “/”
Команда: TYPE I
Ответ: 200 Switching to Binary mode.
Команда: PASV
Ответ: 227 Entering Passive Mode (1X5,1X9,6,2X4,129,226).
Команда: LIST
Статус: Отключен от сервера
Ошибка: Соединение прервано после 20 секунд неактивности
Ошибка: Не удалось получить список каталогов

Менял режимы клиента, пассив/актив и.т.д. току нет

Khutr любезно предоставил доступ к серверу, глянул и обнаружил следующую проблему:
проблема была в том, что при работе в пассивном режиме, помимо 21 порта, сервер выделяет еще некий рендж для работы с FTP, по факту файервол блокировал этот рендж (динамически выделяемые порты для работы с дирректориями), решение достаточно простое:
указать нужный рендж, добавив в конфиг /etc/vsftpd.conf параметры, указав диапазон к примеру:

pasv_enable=YES
pasv_min_port=4121
pasv_max_port=4142

Добавить в файервол правило:

iptables -I INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 4121:4142 -j ACCEPT

После чего перезапустить сервис:

sudo service vsftpd restart

В вебморде Zential, разрешаем порты:

  • Сеть - Службы - Добавить
  • Добавляем службу, заходим в ее настройки, указываем исходный порт любой, порт назначения 4121:4142
  • Добавляем новое разрешающее правило в файервол для этой службы…

Вспомнил, пол года назад сам сталкивался с подобным. :smile3:

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

Если CentOS 6 то для сохранения правил выполните:


iptables-save > /etc/sysconfig/iptables

К сожалению после перезагрузки сервера правила не работают, хотя через web морду их видно.
Приходится ручками:

sudo iptables -I INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 4121:4142 -j ACCEPT

Новая тема:

Всем большое спасибо за помощь, содействие и прочие услуги.
Ставим галку решено )))