Статьи

Настроить пароли в Payara Server и GlassFish

Ответы на вопросы Stackoverflow обеспечивают отличную обратную связь для выявления пробелов в официальной документации моих любимых инструментов с открытым исходным кодом. Один из вопросов, на которые я ответил, был о том, как изменить главный пароль Payara Server в Docker-контейнере . Очевидно, что при стандартной установке сервера это просто – просто используйте команду asadmin change-master-password, затем введите старый и новый пароль в консоль, и все готово. Но не в докере, где конфигурация должна быть автоматизирована с помощью скрипта. То же самое относится ко всем решениям инфраструктуры как кода, таким как Chef или Puppet. Поэтому мне пришлось глубже изучить документацию и немного поэкспериментировать.

Указание паролей из файла

Главное в работе с паролями в скриптах – предоставить их в файле. Каждая команда asadmin принимает аргумент –passwordfile, чтобы дать ей команду прочитать все необходимые пароли, избегая интерактивного запроса паролей. Но немного сложно узнать, как определить пароли в этом файле паролей, потому что он используется для нескольких типов паролей. Документация Oracle для GlassFish v3, которая также применяется к GlassFish v4 и v5 и Payara v4 и 5, документирует 4 типа паролей . Каждый тип пароля может быть указан в файле паролей с помощью переменной с префиксом AS_ADMIN_.

  • пароль администратора с префиксом AS_ADMIN_PASSWORD, по умолчанию это пустой пароль
  • мастер-пароль с префиксом AS_ADMIN_MASTERPASSWORD, по умолчанию «changeit»
  • пароль пользователя с префиксом AS_ADMIN_USERPASSWORD
  • пароль псевдонима с префиксом AS_ADMIN_ALIASPASSWORD

Например, если нам нужно выполнить команду с паролем администратора «mypassword», в файле паролей должна быть указана следующая строка:

1
AS_ADMIN_PASSWORD=mypassword

И тогда мы можем использовать пароль с аргументом –passwordfile, например так:

1
asadmin list-applications --passwordfile=mypasswordfile

Приведенная выше команда не будет ждать ввода пароля, но сразу выведет список всех приложений на сервере. Если пароль неверный, команда не будет выполнена.

Смена пароля из неинтерактивного из скрипта

Пока что все было задокументировано, по крайней мере, в старой документации GlassFish v3. Однако в документации не хватает того, как указать новый пароль из файла, если мы хотим изменить его из скрипта. Когда мы выполняем команду для изменения любого пароля (например, пароля администратора или мастер-пароля) без файла паролей, команда запрашивает 2 пароля – старый и новый. Поэтому нам нужно указать 2 пароля в файле.

Решение состоит в том, чтобы добавить другую переменную для нового пароля в тот же файл паролей. Переменные для новых паролей имеют префикс AS_ADMIN_NEW. Поэтому, чтобы изменить мастер-пароль, нам нужны следующие 2 строки в нашем файле паролей:

1
2
AS_ADMIN_MASTERPASSWORD=oldmasterpassword
AS_ADMIN_NEWMASTERPASSWORD=newmasterpassword

И тогда мы можем использовать 2 пароля с аргументом –passwordfile, например:

1
asadmin change-master-password --passwordfile=mypasswordfile

Приведенная выше команда не будет ждать ввода или повторного ввода какого-либо пароля, но сразу же изменит основной пароль на сервере на newmasterpassword. Если старый пароль неверен, команда не выполнится.

Смена паролей в образе докера

В Docker предпочтительным способом является настройка сервера в образе таким образом, чтобы при выполнении контейнера конфигурация применялась автоматически. Избегайте настройки контейнеров, поскольку запускать команды asadmin в контейнере нелегко, а для изменения некоторых паролей, таких как мастер-пароль, требуется перезапуск сервера.

Стандартный образ докера сервера Payara уже содержит команды asadmin, которые меняют пароль администратора. Вы можете скопировать строки, которые создают / opt / tmpfile, и использовать его с командой change-admin-password для изменения пароля администратора.

То же самое можно сделать, чтобы изменить мастер-пароль. Ниже приведен пример пользовательского Dockerfile для изменения мастер-пароля на новый пароль:

1
2
3
4
5
6
7
<span class="pln">FROM payara</span><span class="pun">/</span><span class="pln">server</span><span class="pun">-</span><span class="pln">full
</span>
<span class="pun">#</span><span class="pln"> specify a </span><span class="kwd">new</span><span class="pln"> master password </span><span class="str">"newpassword"</span><span class="pln"> instead of the </span><span class="kwd">default</span><span class="pln"> password </span><span class="str">"changeit"</span><span class="pln">
RUN echo </span><span class="str">'AS_ADMIN_MASTERPASSWORD=changeit\nAS_ADMIN_NEWMASTERPASSWORD=newpassword'</span> <span class="pun">>></span> <span class="pun">/</span><span class="pln">opt</span><span class="pun">/</span><span class="pln">masterpwdfile
  
</span><span class="pun">#</span><span class="pln"> execute asadmin command to apply the </span><span class="kwd">new</span><span class="pln"> master password
RUN $</span><span class="pun">{</span><span class="pln">PAYARA_PATH</span><span class="pun">}/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">asadmin change</span><span class="pun">-</span><span class="pln">master</span><span class="pun">-</span><span class="pln">password </span><span class="pun">--</span><span class="pln">passwordfile</span><span class="pun">=/</span><span class="pln">opt</span><span class="pun">/</span><span class="pln">masterpwdfile</span>

С указанным выше Dockerfile в вашем текущем каталоге вы можете создать свой собственный образ Docker с помощью:

1
docker build -t my-payara/server-full .

А затем запустите my-payara / server-full вместо payara / server-full.
Вы можете проверить, что главный пароль изменяется в контейнере Docker, когда вы запускаете его с:

1
docker run -t -i --entrypoint keytool payara/server-full:masterpwd -list -keystore /opt/payara41/glassfish/domains/domain1/config/keystore.jks

Если вы введете новый мастер-пароль, вы должны увидеть содержимое хранилища ключей со списком сертификатов.

Опубликовано на Java Code Geeks с разрешения Ондрея Михали, партнера нашей программы JCG . См. Оригинальную статью здесь: Настройка паролей в Payara Server и GlassFish.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.