From a2e3bec40f5851be70299e7513967a0f5d042bf9 Mon Sep 17 00:00:00 2001 From: Ivan Davydov Date: Tue, 24 Jun 2025 14:03:34 +0300 Subject: Initial commit --- public/blog/pubnix----prosody--pam-/index.html | 214 +++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 public/blog/pubnix----prosody--pam-/index.html (limited to 'public/blog/pubnix----prosody--pam-/index.html') diff --git a/public/blog/pubnix----prosody--pam-/index.html b/public/blog/pubnix----prosody--pam-/index.html new file mode 100644 index 0000000..2c49631 --- /dev/null +++ b/public/blog/pubnix----prosody--pam-/index.html @@ -0,0 +1,214 @@ + + + + + + + Pubnix - Установка Prosody с PAM-авторизацией - Журнал @ веб-сайте самохостера Lotigara + + +
+

Веб-сайт самохостера Lotigara

+ +
+ + +
+

Pubnix - Установка Prosody с PAM-авторизацией

+
+

Использованные источники

+ + + +

0. Системные требования

+ +
    +
  • Firewall с следующими открытыми портами:
  • +
  • +
      +
    • 5000/tcp (передача файлов)
    • +
    +
  • +
  • +
      +
    • 5222/tcp (подключение клиента)
    • +
    +
  • +
  • +
      +
    • 5269/tcp (федерация, подключение сервера к серверу)
    • +
    +
  • +
  • +
      +
    • 5281/tcp (по желанию, но рекомендуется)
    • +
    +
  • +
  • Debian 12 с последними обновлениями и доступом в Интернет

  • +
  • Prosody >= 0.13

  • +
+ +
+ +

0,5. Авторизация при помощи ОС

+

PAM (Pluggable Authentication Modules) - API для авторизации в Unix-подобных ОС, по умолчанию использует список пользователей из файла `/etc/passwd`.

+ +

Все команды выполняются пользователем root, если не указано иначе.

+ +

1. Установка

+

Выполните эти команды:

+ +
+# Установить Prosody
+wget https://prosody.im/files/prosody.sources -O/etc/apt/sources.list.d/prosody.sources
+apt update
+apt install prosody lua5.4 liblua5.4-0 liblua5.4-dev luarocks
+# Добавить привилегии демону Prosody
+usermod -aG shadow prosody
+usermod -aG ssl-cert prosody
+# Установить библиотеку для взаимодействия с POSIX-функциями
+luarocks install luaposix
+# Собрать библиотеку дл/ PAM-аутентификации
+git clone https://github.com/devurandom/lua-pam && cd lua-pam
+make LUA_VERSION=5.4
+cp pam.so /usr/lib/
+# Установить модуль для PAM-аутентификации
+LUA_INCDIR=5.4 prosodyctl install --server=https://modules.prosody.im/rocks/ mod_auth_pam
+
+ +

2. Настройка

+

Начните редактировать файл /etc/prosody/prosody.cfg.lua. +Следуйте этим инструкциям, заменяя example.net на доменное имя, привязанное к вашему серверу.

+ +

Найдите строку, начинающуюся с слова admins, и добавьте ваше будущее имя пользователя в фигурные скобки подобным образом:

+ +
+admins = { "admin@example.net" }
+
+ +

Где admin - это ваше имя пользователя в вашей системе.

+ +

Дальше найдите строку --"mam"; и удалите два дефиса, сделайте то же самое с строкой --"turn_external";, находящейся ниже.

+ +

Теперь перейдите к строке authentication = "internal_hashed" и замените internal_hashed на pam.

+ +

Перейдите к строке, начинающейся с storage и поменяйте sql на internal (по желанию, в этой инструкции я не рассматриваю настройку с базами данных)

+ +

По желанию в строке archive_expires_after = "1w" замените 1w на never, чтобы истории переписок не удалялись каждую неделю.

+ +

Найдите строку, начинающуюся с VirtualHost и замените localhost на example.net.

+ +

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

+ +
+Component "conference.example.net" "muc"
+modules_enabled = { "muc_mam", "vcard_muc" }
+
+ +

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

+ +

Если нужна возможность загружать файлы на ваш сервер, дополните конфигурацию следующими строками:

+ +
+Component "upload.example.net" "http_file_share"
+http_file_share_size_limit = 512 * 1024 * 1024 --измеряется в байтах
+http_file_share_expire_after = 60 * 60 * 24 * 31 * 1000 --измеряется в секундах
+
+ +

В данном случае, лимит размера файла - это 512 МиБ (0,5 ГиБ), а удаляться файлы будут через ~1000 лет. +Если требуется изменить какое-либо из этих свойств, смотрите комментарии (в Lua они начинаются с двух дефисов) и пробуйте изменять значения.

+ +

3. Настройка TLS-сертификата

+

Также заменяйте `example.net` на ваше доменное имя.

+ +

ACME (Automatic Certificate Management Environment) - это протокол для получения TLS-сертификатов по Web. +В этом примере используется ACME-клиент acme.sh, так как эта программа более настраиваемая и удостоверяющий центр (далее УЦ) Let's Encrypt (но вы можете использовать любой другой).

+ +

Выполните следующие команды:

+
+# Эта команда установит acme.sh в директорию ~/.acme.sh, системные
+# файлы не будут затронуты
+wget -O - https://get.acme.sh | sh -s \
+    email=yourveryownlocalpart@example.net
+# Теперь либо перезайдите в систему, либо выполните `exec $0`, если
+# вы уверены в значении переменной `$0`.
+
+# Проверьте, прошла ли установка правильно
+acme.sh -h
+
+# Установить Let's Encrypt в качестве УЦ
+acme.sh --set-default-ca --server \
+    https://acme-v02.api.letsencrypt.org/directory
+
+# Есть два способа подтверждения владения доменом - по HTTP или по
+# DNS.
+# Первый проще, но требует доступ на запись в директорию, содержимое
+# которой доступно по ссылке http://example.net/:
+acme.sh --issue -d example.net -d conference.example.net -d \
+    upload.example.net -w <директория с корнем вашего
+    веб-сервера>
+# А второй, поддерживая Wildcard-сертификаты, позволяет в дальнейшем
+# подключать к вашему XMPP-серверу всевозможные компоненты
+# (транспорты в другие сети, модуль публикации-подписки, он же
+# Publish-Subscribe или просто PubSub и многие другие), но требует
+# доступа к API вашего DNS-регистратора для создания записи,
+# подтверждающей владение доменным именем:
+acme.sh --issue --dnssleep <время в секундах, большее чем TTL> \
+    --dns dns_myapi \
+    -d example.net -d '*.example.net' # Где dns_myapi - это кодовое
+    # имя DNS-провайдера, указанное на
+    # https://github.com/acmesh-official/acme.sh/wiki/dnsapi
+# Но если у вас нет и веб-сервера (или доступа к нему), и доступа к
+# API регистратора, то вы можете внести запись с подтверждением
+# вручную (заметьте, что вам нужно будет это делать каждый раз, когда
+# будет истекать срок действия сертификата):
+# (Перед применением этого способа следует внимательно прочитать
+# следующую страницу:
+# https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode)
+acme.sh --issue --dns -d example.net -d '*.example.net'
+# Теперь примените DNS-запись, выведенную на экран командой выше, и
+# подождите до её распространения. После выполните следующее:
+acme.sh --renew -d example.net -d '*.example.net'
+
+# Почти готово. Теперь осталось установить сертификат:
+mkdir /etc/ssl/private/example.net
+chown root:ssl-cert /etc/ssl/private/example.net
+chmod 750 /etc/ssl/private/example.net
+acme.sh --install-cert \
+    -d example.net -d '*.example.net' \
+    --ca-file        /etc/ssl/private/example.net/chain.pem \
+    --cert-file      /etc/ssl/private/example.net/cert.pem \
+    --fullchain-file /etc/ssl/private/example.net/fullchain.pem \
+    --key-file       /etc/ssl/private/example.net/privkey.pem  \
+    --reloadcmd      "prosodyctl --root cert import \
+    /etc/ssl/private/example.net"
+
+ +

Смотрите также

+ +
    +
  • Ещё один блог сисадмина - Настройка Jabber-сервера Prosody с аутентификацией пользователей через Dovecot SASL. Статья немного старая, но если вы настраивали Dovecot так же, как и я (см. главную страницу), то это может вам пригодиться для, например, добавление доступа в XMPP совместно с эл. почтой. Также советую посмотреть конец раздела по настройке SSL (5-ый), там есть скрипт, который будет обновлять сертификаты в Prosody вместе с Certbot.
  • +
  • DesdeLinux - Prosody IM and local users - Networks PYMES. Здесь тоже описывается авторизация с помощью PAM, но она выполнена с использованием ещё одной программы, что, конечно, неэффективно. Эта страница указана в начале, так как автор некоторое время использовал именно инструкцию по ссылке выше.
  • +
+ +
+ +

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

+
+
+ + + + -- cgit v1.2.3