Настройка ftp-сервера на примере ubuntu linux

5: Тестирование анонимного доступа

Откройте в браузере такую ссылку:

Если всё работает должным образом, вы увидите каталог pub:

Теперь можете открыть каталог pub. В нем должен находиться файл test.txt. щёлкните правой кнопкой и сохраните файл.

Также вы можете выполнить эти операции с помощью командной строки. Подключитесь к серверу в пассивном режиме (на многих клиентах в командной строке для этого используется флаг –p). Пассивный режим позволяет создать подключение между сервером и клиентом, и при этом избежать изменения правил локального брандмауэра.

Примечание: Встроенный FTP-клиент командной строки Windows, ftp.exe, не поддерживает пассивного режима. Потому, пользователям Windows рекомендуется выбрать другой FTP клиент, например WinSCP.

Команда предложит указать имя пользователя. Вы можете ввести ftp или anonymous – они работают одинаково.

Нажмите enter.  На экране появится:

Убедитесь, что пассивный режим работает должным образом:

Теперь вы как анонимный пользователь можете переместить файл на локальную машину:

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

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

Как видите, анонимные пользователи могут только скачивать файлы с сервера на свою локальную машину.

Usage

See example code in

host is a string representation of the IP address clients use to connect to the FTP server. It’s imperative that this actually reflects the remote IP the clients use to access the server, as this IP will be used in the establishment of PASV data connections. If this IP is not the one clients use to connect, you will see some strange behavior from the client side (hangs).

See for a simple example. accepts the following options:

Both these need to be set — there are no defaults.

  • : Gets the initial working directory for the user. Called after user is authenticated.
    This path is relative to the root directory. The user may escape their initial cwd.

    • Pattern:

    • Arguments:

      • username (string): the username to get CWD for
      • callback (function, optional):
    • Examples:

      Simplest usage, no callback, just return:

      getInitialCwdfunction(connection){return""+connection.username;}

      Usage with callback:

      getInitialCwdfunction(connection,callback){var userDir =''+connection.username;fs.exists(userDir,function(exists){if(exists){callback(null, userDir);}else{fs.mkDir(userDir,function(err){callback(err, userDir);});}});}

      Typical cases where you would want/need the callback involve retrieving configurations from external datasources and suchlike.

  • : Gets the root directory for the user. This directory has the path ‘/’ from the point of view of the user.
    The user is not able to escape this directory.

    • Pattern:

    • Arguments:

      • connection (object): the connection for which to get root
      • callback (function, optional):
    • Examples:

      getRootfunction(){returnprocess.cwd();}

      Usage with callback:

      getRootfunction(connection,callback){var rootPath =process.cwd()+''+connection.username;fs.exists(rootPath,function(exists){if(exists){callback(null, rootPath);}else{fs.mkDir(userDir,function(err){if(err){callback(null,'');}else{callback(err, rootPath);}});}});}
      • Typical cases where you would want/need the callback involve retrieving configurations from external datasources and suchlike.
      • Additionally, you may want to provide emulation of a path, for instance /users/(username)/ftproot.
  • : (default: false)

    • If set to , then files which the client uploads are buffered in memory and then written to disk using .
    • If , files are written using writeStream.
  • : (default: false)

    • If set to , then files which the client downloads are slurped using ‘readFile’.
    • If , files are read using readStream.
  • : (default: unlimited)

    • Determines the maximum file size (in bytes) for which uploads are buffered in memory before being written to disk.
    • Has an effect only if is set to .
    • If is not set, then there is no limit on buffer size.
  • : (default: false)

    Hides files beginning with a dot (UNIX hidden files) on LIST commands.

  • : (default: 5)

    The maximum number of concurrent calls to fs.stat which will be
    made when processing a LIST request.

  • : (default: )

    A function which can be used as the argument of an array’s sort method. Used to sort filenames for directory listings.
    See [https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort] for more info.

  • : (default: )

    • A function which is applied to each filename before sorting.
    • If set to , filenames are unaltered.
  • : (default: false)

    If this is set, then filenames are not sorted in responses to the LIST and NLST commands.

  • : (default: false)

    If set to true, then LIST and NLST treat the characters ? and * as literals instead of as wildcards.

  • : (default: undefined)

    List of strings, the server will respond to only commands contained in this list, all other commands will result in a 502 unimplemented error.

  • : (default: undefined)

    • If this is set, the server will allow explicit TLS authentication.
    • Value should be a dictionary which is suitable as the argument of .
  • : (default: false)

    If this is set to true, and tlsOptions is also set, then the server will not allow logins over non-secure connections.

  • : ?? I obviously set this to true when tlsOnly is on -someone needs to update this.
  • : (default: random?)

    Integer, specifies the lower-bound port (min port) for creating PASV connections

  • : (default: random?)

    Integer, specifies the upper-bound port (max port) for creating PASV connections

Установка и запуск с базовыми параметрами

Установка ProFTPd на Ubuntu выполняется следующей командой:

apt-get install proftpd

Открываем основной конфигурационный файл:

vi /etc/proftpd/proftpd.conf

Редактируем значения для параметров:

UseIPv6 off

* где UseIPv6 — разрешаем или запрещает использование IPv6. Если в нашей среде будет использоваться IP версии 6, то значение данной опции должно быть on. 

Снимаем комментарий для опции PassivePorts и задаем ей следующее значение:

PassivePorts 60000:65535

* где 60000 — 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и перезапускаем его:

systemctl enable proftpd

systemctl restart proftpd

Готово — пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или браузер. В качестве логина и пароля используем учетную запись пользователя Ubuntu.

Если мы хотим использовать выделенную учетную запись для FTP, то создаем ее командой:

useradd ftpuser -m

Задаем ей пароль:

passwd ftpuser

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

vi /etc/proftpd/proftpd.conf

DefaultRoot                     ~

И перезапускаем сервис:

systemctl restart proftpd

Настройка SSL/TLS

TLS позволяет настроить безопасный FTP, передача данных через который осуществляется по шифрованному каналу.

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

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/private/vsftpd.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp»

* в данном примере мы создаем самоподписанный сертификат на 4 года для URL ftp.dmosk.local или ftp. Открытый ключ будет сохранен в файле /etc/ssl/certs/vsftpd.pem, закрытый — /etc/ssl/private/vsftpd.key. При желании, мы можем использовать купленный сертификат или получить его бесплатно у Let’s Encrypt.

Открываем на редактирование конфигурационный файл vsFTPd:

vi /etc/vsftpd.conf

Редактируем строки:

rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES

* где ssl_enable разрешает использование шифрования; rsa_cert_file — путь к открытому ключу; rsa_private_key_file — путь к закрытому ключу.

И дописываем следующие:

allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH

* где: 

  • allow_anon_ssl разрешает использовать SSL анонимным пользователям; 
  • force_local_data_ssl требует использования шифрования, и если установить YES, клиенты без шифрования не смогут подключиться; 
  • force_local_logins_ssl также требует подключение по SSL; 
  • ssl_tlsv1 — использовать TLS версии 1; 
  • ssl_sslv2 и ssl_sslv3 — использовать SSL версии 1 и 2; 
  • ssl_ciphers — выбор шифра. В данном примере мы говорим использовать максимально безопасный.

Перезапускаем FTP-сервер:

systemctl restart vsftpd

Виртуальные пользователи

Допустим, у нас есть web-сервер и несколько сайтов в директории . Нам нужно обеспечить доступ к этим сайтам трем разным пользователям. Причем, таких пользователй нет в системе и у них должны быть права пользователя .

  • сайт , директория , пользователь
  • сайт , директория , пользователь
  • сайт , директория , пользователь

Устанавливаем сервер vsFTPd и редактируем файл конфигурации:

# Слушать и обрабатывать входящие соединения
listen=YES
# Запретить доступ для анонимных пользователей
anonymous_enable=NO
# Использовать для авторизации учётные записи пользователей
local_enable=YES
# Разрешить виртуальным пользователям авторизацию на сервере
guest_enable=YES
# Виртуальные пользователи будут работать от имени www-data
guest_username=www-data
# У виртуальных пользователей будут привилегии, как у локальных
virtual_use_local_privs=YES
# Каталог, куда виртуальный пользователь попадет после авторизации
local_root=/var/www/$USER
user_sub_token=$USER
# Запретить пользователям выходить за пределы домашнего каталога
chroot_local_user=YES
allow_writeable_chroot=YES
# Маска для вновь создаваемых файлов и директорий
local_umask=022
# Показывать скрытые файлы, которые начинаются с точки
force_dot_files=NO
# При выводе списка файлов показывать локальное время, а не GMT
use_localtime=YES
# Записывать в /var/log/vsftpd.log данные о скачиваниях и загрузках
xferlog_enable=YES
# Включить поддержку ASCII для замены символов переноса строки
ascii_upload_enable=YES
ascii_download_enable=YES
# Использовать кодировку UTF-8 при работе с файловой системой
utf8_filesystem=YES
# Разрешить использование пассивного режима работы сервера
pasv_enable=NO
# Диапазон портов для работы FTP-сервера в пассивном режиме
pasv_min_port=60000
pasv_max_port=60100

Устанавливаем пакеты (если уже установлен Apache2, то пакет устанавливать не нужно):

$ sudo apt install libpam-pwdfile apache2-utils

Открываем на редактирование файл , удаляем в нем все и добавляем две строки:

auth required pam_pwdfile.so pwdfile /etc/vsftpd.passwd
account required pam_permit.so

После этого аутентификация локальных пользователей на FTP-сервере будет невозможна, работать смогут только виртуальные. Теперь надо создать файл с паролями :

$ sudo htpasswd -c -d /etc/vsftpd.passwd site1.local

Опция предписывает создать файл паролей; если он уже существует, то файл будет перезаписан. Опция задает необходимый для vsFTPd алгоритм шифрования пароля.

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

$ sudo htpasswd -d /etc/vsftpd.passwd site2.local
$ sudo htpasswd -d /etc/vsftpd.passwd site3.local

Смотрим, что получилось:

$ cat /etc/vsftpd.passwd
site1.local:7Sk4liHlfBfiY
site2.local:MJdR9xZ7SH5cw
site3.local:WN2MwtA7Z/Q3E

Осталось только перезагрузить сервер:

$ sudo systemctl restart vsftpd.service

Опция позволяет установить директорию для хранения файлов персональных настроек пользователей. Настройки, заданные в этих файлах, переопределяет настройки из основного файла конфигуации. Если имеет значение , то при подключении к серверу пользователя , vsFTPd применит настройки из файла .

Поиск:
FTP • Linux • Ubuntu • Конфигурация • Настройка • Сервер • Установка • vsFTPd • www-data • Пользователь

Securing FTP

There are options in to help make vsftpd more secure. For example users can be limited to their home directories by uncommenting:

You can also limit a specific list of users to just their home directories:

After uncommenting the above options, create a containing a list of users one per line. Then restart vsftpd:

Also, the file is a list of users that are disallowed FTP access. The default list includes root, daemon, nobody, etc. To disable FTP access for additional users simply add them to the list.

FTP can also be encrypted using FTPS. Different from SFTP, FTPS is FTP over Secure Socket Layer (SSL). SFTP is a FTP like session over an encrypted SSH connection. A major difference is that users of SFTP need to have a shell account on the system, instead of a nologin shell. Providing all users with a shell may not be ideal for some environments, such as a shared web host. However, it is possible to restrict such accounts to only SFTP and disable shell interaction.

To configure FTPS, edit and at the bottom add:

Also, notice the certificate and key related options:

By default these options are set to the certificate and key provided by the ssl-cert package. In a production environment these should be replaced with a certificate and key generated for the specific host. For more information on certificates see Security — Certificates.

Now restart vsftpd, and non-anonymous users will be forced to use FTPS:

To allow users with a shell of access to FTP, but have no shell access, edit adding the nologin shell:

This is necessary because, by default vsftpd uses PAM for authentication, and the configuration file contains:

The shells PAM module restricts access to shells listed in the file.

Most popular FTP clients can be configured to connect using FTPS. The lftp command line FTP client has the ability to use FTPS as well.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *