Debian proftpd назначить права на директорию
Среди возможностей ProFTPd есть использование виртуальных пользователей с uid системных учетных записей, работа по FTP через TLS, использование виртуальных пользователей с хранением их в отдельном файле или базе данных. Мы рассмотрим настройку всех этих возможностей сервера FTP на примере Linux Ubuntu 18.04 и 20.04. Инструкция также, во многом, подойдет для настройки на Debian.
Настройка системы
Подготовим нашу операционную систему для корректной работы сервера FTP. Для этого настроим синхронизацию времени и правила в Firewall.
1. Время
Для корректного отображения времени создания файлов, необходимо синхронизировать его с внешним источником. Также необходимо задать корректный часовой пояс. Для этого вводим команду:
timedatectl set-timezone Europe/Moscow
* в данном примере мы задаем зону по московскому времени. Список все доступных зон можно посмотреть командой timedatectl list-timezones.
apt-get install chrony
. и разрешаем его запуск при загрузке системы:
systemctl enable chrony
2. Брандмауэр
Если в нашем сервере используется фаервол (по умолчанию, он работает с разрешающими правилами), разрешаем порты:
- 20 — для передачи данных.
- 21 — для передачи команд.
- с 60000 по 65535 — набор для пассивного обмена FTP. Данный диапазон может быть любым из свободных, но практика показывает, что данные значения работают стабильнее.
В зависимости от утилиты управления брандмауэром, дальнейшие действия будут отличаться.
а) Iptables
Если для управления netfilter мы используем утилиту Iptables, то вводим команду:
iptables -I INPUT -p tcp --match multiport --dports 20,21,60000:65535 -j ACCEPT
Для сохранения правил можно использовать утилиту:
apt-get install iptables-persistent
В ufw команда будет следующей:
ufw allow 20,21,60000:65535/tcp
Установка и запуск с базовыми параметрами
Установка ProFTPd на Ubuntu выполняется следующей командой:
apt-get install proftpd
Открываем основной конфигурационный файл:
Редактируем значения для параметров:
* где 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
Задаем ей пароль:
Если мы хотим, чтобы учетная запись не могла покидать пределы своей домашней директории, в настройках ProFTPd снимаем комментарий с опции:
И перезапускаем сервис:
systemctl restart proftpd
Шифрование при передаче данных
Следующим этапом настроим передачу данных через TLS.
В конфигурационном файле сервера ftp снимаем комментарий для строки:
Открываем конфигурационный файл tls.conf:
Снимаем комментарии для следующих настроек:
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
.
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
.
TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired
.
TLSVerifyClient off
.
TLSRequired on
* параметр TLSRequired можно задать в значение off, если мы не хотим требовать от клиента соединения по TLS.
Приводим значение для одного из раскомментированных параметров к следующему:
TLSProtocol SSLv23 TLSv1.2
* мы добавили TLSv1.2 для поддержки более актуального протокола шифрования. В противном случае, некоторые старые клиенты могут возвращать ошибку Error in protocol version.
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp"
* где ftp.dmosk.local — имя сервера в формате FQDN (не принципиально).
systemctl restart proftpd
Использование виртуальных пользователей
Для безопасности рекомендуется использовать не реальных пользователей системы, а виртуальных. Мы рассмотрим процесс их хранения в файле или базе данных.
Хранение в файле
Создаем виртуального пользователя командой:
ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpvirt --uid=33 --gid=33 --home=/var/tmp --shell=/usr/sbin/nologin
- /etc/proftpd/ftpd.passwd— путь до файла, в котором хранятся пользователи;
- ftpvirt — имя пользователя (логин);
- uid и gid — идентификаторы пользователя и группы системной учетной записи (например, www-data);
- /var/tmp — домашний каталог пользователя;
- /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.
Открываем конфигурационный файл proftpd:
Снимаем комментарий или редактируем опцию (если не сделали это раньше):
* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.
Создаем дополнительный конфигурационный файл для proftpd:
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c
Перезапускаем сервис FTP-сервера:
systemctl restart proftpd
Хранение в MariaDB (MySQL)
Настройку разделим на два этапа:
- Установку и настройку СУБД.
- конфигурирование FTP-сервера.
В качестве СУБД будем использовать MariaDB / MySQL.
Устанавливаем на Ubuntu СУБД и модуль mysql для ProFTPd:
apt-get install mariadb-server proftpd-mod-mysql
Разрешаем автозапуск сервиса mariadb:
systemctl enable mariadb
Задаем пароль для пользователя root в mysql:
mysqladmin -u root password
Подключаемся к базе данных:
Создаем базу данных для хранения пользователей:
> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* в данном примере мы создали базу данных proftpd.
Создаем таблицу в созданной базе:
* данной командой мы создаем таблицу users в базе данных proftpd.
Создаем пользователя mariadb для доступа к таблицам базы proftpd:
* мы создали пользователя proftpd_user с паролем proftpd_password, которому дали право подключаться только с локального сервера.
Добавляем FTP-пользователя в таблицу:
* в данном примере мы создаем пользователя sqluser с паролем sqlpassword.
. и отключаемся от базы:
Настройка FTP-сервера
Открываем конфигурационный файл для proftpd:
Снимаем комментарий для подключения файла sql.conf:
Открываем на редактирование файл sql.conf:
Приводим его к виду:
<IfModule mod_sql.c>
.
SQLBackend mysql
.
SQLEngine on
SQLAuthenticate users
.
SQLAuthTypes Crypt
.
SQLConnectInfo proftpd@localhost proftpd_user proftpd_password
.
SQLUserInfo users userid passwd uid gid homedir shell
.
SqlLogFile /var/log/proftpd/sql.log
.
</IfModule>
* где нужно обратить внимание на следующие параметры:
- SQLAuthenticate — указываем, что модуль должен выполнять аутентификацию по пользователю.
- SQLAuthTypes — способ хранения пароля в базе. Можно перечислить несколько вариантов. Для наибольшей безопасности мы разрешили хранить пароли только в зашифрованном виде.
- SQLConnectInfo — параметры для подключения к базе. Здесь мы задаем имя и сервер базы данных, а также данные пользователя для подключения.
- SQLUserInfo — информация о таблице, где хранится пользователь. Мы указываем на название таблицы и перечисляем название полей, в которых хранятся нужные сведения.
Создаем дополнительный конфигурационный файл для proftpd:
RequireValidShell off
AuthOrder mod_sql.c
Открываем файл modules.conf:
Снимаем комментарии для следующих строк:
LoadModule mod_sql.c
.
LoadModule mod_sql_mysql.c
Перезапускаем сервис FTP-сервера:
systemctl restart proftpd
Можно пробовать подключаться к базе под пользователем sqluser с паролем sqlpassword.
Настройка прав доступа
Разберем пример, когда нам нужно будет к одной и той же папке дать разные права — одному пользователю только на чтение, другому на чтение и запись.
<Directory /var/tmp>
<Limit WRITE>
Order deny,allow
AllowUser ftpvirt
</Limit>
<Limit ALL>
AllowAll
</Limit>
</Directory>
* в данном примере мы задаем права для директории /var/tmp. Мы разрешаем запись в директорию только для пользователя ftpvirt, остальные права разрешены для всех.
Устранение проблем
Для решения проблем в работе FTP-сервера можно просмотреть файл журнала. Файлов может быть несколько и они находятся в каталоге /var/log/proftpd. Основной — proftpd.log.
Для просмотра вводим команду:
tail -f /var/log/proftpd/proftpd.log
По умолчанию, настройка лога в конфигурационном файле proftpd выглядит так:
Создал пользователя с домашней папкой и всеми правами в ней.
Добавил
При заходе по ftp если удалять файлы - то нормально, если закачивать - пишет 550 ошибку.
в конфиг proftpd Добавил юзвера
<Directory /home/admin/vasya/>
<Limit ALL>
AllowUser vasya
</Limit>
<Limit READ RMD DELE MKD>
AllowUser vasya
DenyAll
</Limit>
</Directory>
<Limit READ RMD DELE MKD> —нужно же разрешить команду STOR ещё! Как без неё записывать файл-то!
<Limit READ RMD DELE MKD STORE>
AllowUser vasya
DenyAll
</Limit>
и когда файлы заливаю по фтп - создаются файлы размером 0байт
исправил, перезапустил, всеравно не хочет.
Причем попробовал создать каталог по фтп - пишет Disk quota exceeded
Вот выложил полный конфиг proftpd
ServerName "ProFTPd"
ServerType standalone
TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
AuthUserFile /etc/proftpd.passwd
DefaultServer on
<Global>
DeferWelcome on
DirFakeUser on ftp
DirFakeGroup on ftp
AllowStoreRestart on
AllowRetrieveRestart on
Umask 022
DisplayLogin welcome.msg
DisplayChdir readme
AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
<Directory /home/admin/domains/moy-domen/>
AllowOverwrite on
<Limit STOR READ RMD DELE MKD>
AllowUser vasya
DenyAll
</Limit>
</Directory>
<Limit READ WRITE>
AllowUser vasya
DenyAll
</Limit>
Поменял папку пользователя в /etc/passwd и путь поменял в /etc/proftpd.conf - перезапустил proftpd, присвоил права на папку и вложенные папки под юзера - а он показывает пустую папку когда захожу по FPT (.
ServerName "ProFTPd"
ServerType standalone
TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
AuthUserFile /etc/proftpd.passwd
DefaultServer on
<Global>
DeferWelcome on
DirFakeUser on ftp
DirFakeGroup on ftp
AllowStoreRestart on
AllowRetrieveRestart on
Umask 022
DisplayLogin welcome.msg
DisplayChdir readme
AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
<Directory /home/admin/domains/drugaya_papka/>
AllowOverwrite on
<Limit READ WRITE>
AllowUser vasya
DenyAll
</Limit>
</Directory>
>AuthUserFile /etc/proftpd.passwd
Вот это зачем? Если используешь хомяки в качестве DefaultRoot, то лучше использовать системных юзеров.
убрал, так у меня он авторизируется, вот только в папку когда заходит - ничего не показывает, такое ощущение, что куда-то не туда заходит (
ls -al /proc/`pgrep -u vasya`/root
(от рута, в момент, когда vasya работает по FTP) покажет, в какой каталог чрутится proftpd.
если правильно разобрался
Нет. Надо вводить именно так, как я написал. После -u должно быть имя пользователя. Потом закрывающая обратная кавычка, слеш и root.
Итак, у нас задача установить и настроить ProFTPD сервер на Debian Linux, допустим, для того, чтобы получать доступ к сайтам расположенным на нашем сервере в каталоге /home. Сайты расположены каждый в своей директории, и настроены виртуальные хосты.
Для установки наберём следующую команду:
apt-get install proftpd
Система загрузит нужные для установки модули с сервера debian и приступит к установке. Во время установки в систему будет добавлен пользователь ftp и создана его домашняя директория /home/var.
Если Вас не устраивает лишняя директория в /home, Вы можете поступить как я, и переместить его домашнюю директорию, например, в /var/ftp. Делается это командами:
Ненужную директорию спрятали, теперь переходим непосредственно к конфигурированию и настройке ProFTPD сервера.
Открывает для редактирования файл /etc/proftpd/proftpd.conf в помощью любого текстового редактора, например, nano:
nano /etc/proftpd/proftpd.conf
Далее я привожу пример файл proftpd.conf с подробными пояснениями:
Подробнее хотел бы пояснить следующих несколько директив: RootLogin, UseFtpUsers, DefaultRoot и RequireValidShell.
RootLogin – включает/отключает доступ по ftp пользователю root. Рекомендую отключить эту директиву и не использовать доступ от root в целях безопасности, так как по ftp передаются не зашифрованный пароль.
UseFtpUsers – обрабатывать ли файл ftpusers. В данном файле находится имена пользователей, которым запрещён доступ по ftp. Включаем его на всякий случай.
DefaultRoot – директория для доступа. Устанавливаем его в «
», то есть при заходе по ftp, пользователь будет попадать в свой домашний каталог и не сможет подняться выше него.
RequireValidShell – разрешить/запретить авторизовывать клиента только если он имеет основной shell из списка /etc/shells. Лично я, споткнулся именно на этой директиве. Дальше Вы поймёте почему.:)
Итак, остался последний шаг, а именно добавления своего ftp пользователя в систему. К примеру, мы хотим подключаться по ftp от пользователя “alexey” с паролем “56s4a27e”. Добавляем его в систему. Сразу запрещаем доступ это пользователя к системе через shell и указываем домашнюю директорию /home. Делается это следующей командой:
Несомненными лидерами среди FTP-серверов на сегодняшний день являются pure-ftpd, proftpd и vsftpd. Когда у Вас сотни пользователей и десятки доменов на сервере, неудобно на каждого заводить системного пользователя, поэтому в этой статье я сохранил методику настройки proftpd 1.3.4a с хранением списка виртуальных пользователей в MySQL.
Итак, приступаем к настроке сервера ftp - ProFTPD:
1. Установка proftpd под Debian Wheezy
запустится конфигуратор – выбираем тип "самостоятельно" из предложенного , так как у нас предполагается нагруженный ftp сервер.
2. Настройка proftpd для работы с виртуальными пользователями в MySQL
Обратите внимание на то, что было создано в вашей системе:
В частности, нас интересуют идентификаторы вновь созданных пользователей proftpd:
Запомним порядковый номер пользователя и группу proftpd (105, 65534), а также тип шелла - /bin/false. Домашний каталог нового пользователя - /srv/ftp.
Создадим файл для хранения логов сервера proftpd с базой MySQL и даём на него необходимые права:
Далее создаём БД, где будут храниться пользователи, ошибки и логи доступа к нашему серверу ftp.
Прежде чем создавать таблицы в БД, уточним какие таблицы нам нужны и какой функционал мы будем вкладывать в них. Нам понадобятся 6 таблиц:
- group_ftp - Таблица групп пользователей ProFTP и их членов
- users_ftp - Таблица пользователей сервера FTP
- quotalimits_ftp - Основная таблица квот доступа сервера FTP
- quotatallies_ftp - Интегральная таблица квот доступа сервера FTP
- errors_ftp - Логи ошибок работы сервера FTP
- access_ftp - Логи доступа к серверу FTP
[users_ftp]
id: уникальный номерusername: имя пользователя
password: пароль
descr: комментарий
groupname: группа
uid: uid
gid: gid
homedir: домашний каталог
shell: определяем шелл для пользователя
last_login: последний вход
login_count: количество входов
last_err_login: последний неудачный вход
err_login_count: количество неудачных входов
[quotalimits_ftp]
name: имя виртуального пользователяquota_type: тип ограничения по (user,qroup,class или all - для всех)
per_session: true - использовать квоту только на текущую сессию, в этом случае ни куда не записывается размер использованной квоты и для каждой новой сессии используется указанная квота. false - в этом случае использование квоты заноситься в базу данных.
limit_type: soft - возможно некоторое превышение квоты
hard - жёстко заданная квота, превышение невозможно
bytes_in_avail лимит загрузки в байтах ( если 150 Мб то 157286400 байт) 0 = нет лимита
bytes_out_avail лимит скачивания в байтах. 0 = нет лимита
bytes_xfer_avail: Лимит передачи в байтах.0 = нет лимита
files_in_avail: Лимит количества загружаемых файлов. 0 = нет лимита
files_out_avail: Лимит количесва скачиваемых файлов. 0 = нет лимита
files_xfer_avail: Лимит количесва передачи файлов. 0 = нет лимита
Добавить этот дамп БД можно любым доступным Вам способом (через phpMyadmin, webmin, через командную строку). Так как ftp сервер я ставлю в ряду первых, то phpMyAdmin (PMA) и Webmin еще не сконфигурирован, поэтому с учётом работы по ssh самым простым способом залить дамп-файл будет через перенаправление потока ввода:
Копируем содержимое приведенного выше файла proftpd.sql в буфер обмена, нажимаем правую кнопку мыши в консоли putty и закрываем полученный файл с сохранением по Ctrl+C
Замечание: учтите только кодировку, в которой работает терминал putty. У меня это utf8, что совпадает с кодировкой БД, если же на вкладке настроек putty->window->Translation стоит отличная от utf8, то и кодировка файла созданного tee будет соответствующей.
Вносим дамп в БД:
Теперь заполним созданную базу первичными данными для отладки. Создадим двух пользователей: demon с мягкой квотой в 1GB(1073741824 bytes), и admin - без квот.
Замечание: Обратите внимание, что оба этих пользователя будут относиться к виртуальной ftp-группе proftpd и наследовать ID-реального системного пользователя proftpd(105). Вы можете присваивать любой другой номер ID, не совпадающий с системными и создавать и помещать в любые другие группы, чтобы они не пересекались в "системном" пространстве.
Технический нюанс: Также обратите внимание, что при задействовании квот, необходимо внести записи в ДВЕ таблицы: quotalimits_ftp и quotatallies_ftp. Так как сам сервер у меня почему то отказался вносить эту запись самостоятельно при первом запуске. Тоесть, если Вы хотите задействовать квоты для пользователя - создавайте записи по аналогии в обоих таблицах - quotalimits_ftp и quotatallies_ftp, в одной устанавливайте квоту и тип, а в другой устанавливайте значение по нулям.
Замечание: Жёсткая квота (жесткий предел) жёстко оборвёт фаил при закачке по достижении заданного значения, мягкая квота (мягкий предел) позволит Вам дозакачать файл (что может привести к превышению на гигабайты!), а потом запретит закачивать, пока Вы не освободите достаточно места для операции.
Закачиваем в БД по аналогии с предыдущим дампом через перенаправление потока ввода:
Снова копируем содержимое приведенного выше файла proftpd_user.sql в буфер обмена, нажимаем правую кнопку мыши в консоли putty и закрываем полученный файл с сохранением по Ctrl+C. Вносим дамп в БД:
Создаём директорию для пользователя `demon` и даём на неё права пользователю `proftpd`:
В версии ProFTPd 1.3.4a конфигурационные файлы поделены на несколько файлов. Проёдемся по ним по очереди, основной файл конфигурации /etc/proftpd/proftpd.conf:
Теперь расскоментируем "альтернативный способ авторизации" наших клиентов в файле конфигурации /etc/proftpd/modules.conf:
. задействуем следующие модули:
В завершение разберемся, как устроен файл конфигурации /etc/proftpd/sql.conf. Принципиальных вариантов настройки SQL для этого сервера в интернете несколько. Основные отличия в использовании нестандартных полей в таблицах, чтобы расширить функциональность сервера. Например Вы можете использовать краткую форму указания параметров запроса для таблицы:
Или написать запрос самостоятельно, с указанием всех необходимых аргументов:
Примечание: Если вы не можете записать в ftp папку используя связку proftpd + mysql (ошибка 550) – проверьте права/владельца на папку и под каким пользователем/группой происходит запись. По умолчанию, proftpd пишет файлы как 65533:65533 и игнорирует то, что указано в /etc/proftpd/proftpd.conf. Соответственно, изменим пользователя и группу по умолчанию на нашего пользователя 105(proftpd) и зададим группу 65534(nogroup) именно в файле конфигурации /etc/proftpd/sql.conf:
Перезапускаем сервис и смотрим логи на предмет ошибок.
3. Тестирование начальной конфигурации
Проверим клиентом ftp, входящим в состав любой Widows. Попробуем залить файл на сервер.
Прошло удачно? Не получилось? Читаем логи, проверяем разрешения на папки и пароли к БД MySQL и пароль ftp-пользователя.
4. Добавление виртуальных пользователей, расстановка прав
Добавляем нового пользователя БД нашего FTP сервера:
Не забывайте про гибкий механизм прав доступа. Вы можете гибко выбирать от имени какого системного пользователя будет записывать в папку наш "виртуальный" пользователь и какую группу он будет использовать.
Подправим права доступа к файлам и папкам, рекурсивно (если надо):
Если вас беспокоит безопасность, подправим права на отдельные типы файлов:
5. Увеличиваем безопасность proFTPD ftp-сервера, необходимо-достаточный тюнинг серверя для типового хостинга (опционально)
Для этого проверим и установим некоторые дополнительные параметры в конфигурационном файле /etc/proftpd/proftpd.conf:
Примечание: Если Вы хотите, чтобы отображались скрытые файлы (начинающиеся с точки) используйте директивы Directory и ListOptions:
Разрешать ли для всех подряд работу со скрытыми файлами - всё же решать Вам, но лучше использовать разрешения для отдельно взятых ресурсов.
Примечание: Для того, чтобы у Вас работала докачка файлов на ftp сервер, используйте директиву AllowStoreRestart. Поместите её в файл конфигурации /etc/proftpd/proftpd.conf:
Не забудьте перезапустить сервер proFTPD.
Поиск решений ошибок proftpd: если Вы столкнулись с ошибкой proftpd[16632]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled, отключите этот модуль в /etc/proftpd/modules.conf:
Или настройте memcache для proftpd как описано в руководстве - ProFTPD mini-HOWTO - ProFTPD and Memcache . Не забудьте перезапустить сервер proFTPD.
6. Добавляем сертификат SSL к нашему серверу proftpd
Для начала сгенерируем сертификат:
Подправим права на вновь-созданный сертификат:
Отредактируем конфигурационный файл /etc/proftpd/tls.conf:
Замечанние: Если вы указали опцию TLSRequired on, то для подключения к FTP возможен только доступ с использованием TLS (другие пользователи с старыми FTP клиентами не поддерживающими TLS подключиться не смогут); но закомментировав эту опцию или установим значение в TLSRequired off к FTP можно будет подключаться и используя TLS и обычным способом.
Включаем TLS в конфигурационном файле /etc/proftpd/proftpd.conf:
Перезапускаем сервис и смотрим логи на предмет ошибок.
7. Шифруем Palintext пароли в БД
Заметьте, ничего в этой команде менять не надо, она самостоятельно, с помощью функции PASSWORD() зашифрует пароли и поменяет их. ВАЖНО! Процедура одностороняя, поэтому если в базе пользователей много, сделайте бэкап.
Допишем (если её нет) в файле /etc/proftpd/sql.conf в опцию SQLAuthTypes ключ Backend:
И перезапустим сервер.
Теперь можно хранить в базе как шифрованные, так и не шифрованные пароли. Но я настоятельно рекомендую отказаться от аутентификации Plaintext
Читайте также:
- Hlds не запускается windows 10
- Как добавить музыку на iphone mac os big sur
- Где на рабочем столе отображается информация о запущенных приложениях windows
- Было предпринято несколько попыток но причину проблемы определить не удалось windows 7
- Защита системы доступна только для подключенных к сети систем windows 10 что делать