Вопрос или проблема
Один компьютер с Windows настроен как FTP-сервер с помощью Internet Information Services (IIS). Однако удаленные пользователи не могут получить доступ к файлу, который используется какой-либо программой (например, к файлам журналов, которые продолжают записываться). Удаленные пользователи входят на FTP с помощью библиотеки ftplib на Python и получают ошибку вроде “не удается получить доступ к файлу”. Как это исправить? Спасибо.
Есть другой компьютер с Windows, на котором используется “FileZilla Server” для организации FTP. Сначала мы столкнулись с той же ошибкой. После проверки “Опции -> Разное -> Разрешить загрузку файлов, которые открыты для записи другим процессом?” удаленный пользователь смог получить доступ к открывающемуся файлу на FTP-сервере. Есть ли аналогичные настройки в IIS?
Ответ или решение
Для настройки FTP-сервера на Windows с использованием Internet Information Services (IIS), чтобы разрешить удалённым пользователям скачивать файлы, которые используются другими локальными программами (например, файлы логов, к которым осуществляется запись), выполняйте следующие шаги.
1. Установка IIS и включение FTP
Если IIS ещё не установлен на вашем сервере, выполните следующие действия:
- Перейдите в "Панель управления" > "Программы и компоненты" > "Включение или отключение компонентов Windows".
- Найдите "Internet Information Services" и установите нужные компоненты, включая "FTP-сервер".
2. Настройка FTP-сервера
-
Создайте FTP-сайт:
- Откройте "Диспетчер IIS".
- Щёлкните правой кнопкой мыши на "Sites" и выберите "Добавить FTP-сайт".
- Укажите имя сайта и путь к папке, содержащей файлы, которые вы хотите предоставить для загрузки.
-
Настройте аутентификацию:
- На этапе конфигурации выберите "Basic" для аутентификации и настройте разрешения доступа к FTP (чтение/запись).
-
Настройте авторизацию:
- В разделе "Authorization" предоставьте доступ пользователям или группам, которым необходимо разрешить загрузку файлов.
3. Разрешение доступа к открытым файлам
К сожалению, в IIS нет встроенной опции, аналогичной той, что есть в FileZilla (разрешение на скачивание файлов, которые открыты для записи). Однако вы можете попробовать следующие подходы:
Опция 1: Использование системных настроек
- Создание символической ссылки: Создайте символическую ссылку на файл или папку, чтобы она имела другой путь доступа.
- Использование инструментов сторонних разработчиков: Например, можно использовать библиотеку
Samba
илиWebDAV
, которая зачастую может обрабатывать открытые файлы.
Опция 2: Использование PowerShell или других программных средств
Напишите скрипт на PowerShell, который копирует открытый файл (например, лог-файл) в другую папку, откуда он будет доступен для загрузки. Например:
Copy-Item "C:\path\to\open\file.log" "C:\path\to\ftp\folder\file_copy.log" -Force
Опция 3: Настройка прав доступа
Также важно убедиться, что у IIS есть необходимые права доступа к файлам:
- Проверьте права на уровень NTFS, чтобы убедиться, что учетная запись, используемая для IIS, имеет доступ к нужным файлам.
- Убедитесь, что на этапе аутентификации пользователя FTP правильно настроена передача прав.
4. Тестирование связки
После завершения настройки обязательно:
- Проверьте соединение с FTP с локального компьютера.
- Используйте
ftplib
в Python для подключения к вашему FTP-серверу. - Попробуйте скачать файл, чтобы убедиться, что он доступен для скачивания.
Заключение
Обратите внимание, что особенностью FTP-сервера IIS является то, что он не позволяет загружать файлы, которые открыты для записи другими процессами. Для достижения аналогичной функциональности как в FileZilla, вам может потребоваться использование дополнительных методов, таких как создание дубликатов или временных файлов.