Glassfish 更改管理员密码

Glassfish Change Admin Password

如何使用密码文件更改 Glassfish 域的管理员密码?我知道根据提示手动输入密码的传统方法。

但是我想使用脚本更改管理员密码,而不必手动输入密码。

据我所知,出于安全原因,无法通过文件作为参数更改它。

您可以考虑替代解决方案(管道),但始终需要确认密码。 https://docs.oracle.com/cd/E19798-01/821-1758/change-admin-password-1/index.html

这是可能的,但如果您想以最简单的方式编写完整的脚本,则需要 2 个密码文件。

创建一个临时文件(在我的示例中为 tmpfile),它将保存当前密码(默认为空)和所需的新密码:

AS_ADMIN_PASSWORD=
AS_ADMIN_NEWPASSWORD=myNewPassword

现在创建一个密码(在我的示例中为 pwdfile)文件,其中将包含更改后的管理员密码:

AS_ADMIN_PASSWORD=myNewPassword

然后您可以使用这些文件通过以下命令更改密码,确保在更改密码时使用 tmpfile,之后使用 pwdfile

 $PAYARA_PATH/bin/asadmin start-domain
 $PAYARA_PATH/bin/asadmin --user $ADMIN_USER --passwordfile=/opt/tmpfile change-admin-password
 $PAYARA_PATH/bin/asadmin --user $ADMIN_USER --passwordfile=/opt/pwdfile enable-secure-admin
 $PAYARA_PATH/bin/asadmin restart-domain

This example was adapted from the way the Payara Server dockerfile works

对于仍然对手动设置管理员帐户密码感兴趣的任何人:

我尝试根据 Payara Repo 的当前实现生成位于 "glassfish/domains/{ACTIVE_DOMAIN_NAME}/config/admin-keyfile" 的 "admin-keyfile" 的内容。该文件(作为FileRealm的数据源)用于在4848端口访问admin界面时对admin用户进行认证。

此文本文件的每一行代表一个帐户,其结构为

USERNAME;PASSWORD;GROUPS

字段 "PASSWORD" 以散列算法关键字为前缀(用大括号括起来,例如 "SSHA" 或 "SSHA256"),后跟连接的盐渍散列的 BASE64 编码散列和盐值本身(一些随机字节):

{SSHA}BASE64(SHA(password,salt),salt)

长话短说:如果您想手动生成用户帐户,您可以使用以下 Python 脚本:

import hashlib
from base64 import b64encode
from secrets import token_bytes
from getpass import getpass

username = 'admin' # input('Username: ')
plainTextPassword = getpass()
randomSalt = token_bytes(8)
passwordHash = hashlib.sha256()
passwordHash.update(plainTextPassword.encode('utf-8'))
passwordHash.update(randomSalt)
passwordDigest = passwordHash.digest()
# cryptic range reflects the strange implementation... feel free to change it to "range(98)"
# https://github.com/payara/Payara/blob/6488cbdc90fd0f6c42de6a42affcd09f697be715/nucleus/common/common-util/src/main/java/org/glassfish/security/common/SSHA.java#L108
for run in range(2, 101):
    passwordHash = hashlib.sha256()
    passwordHash.update(passwordDigest)
    passwordDigest = passwordHash.digest()
saltedHashAndSalt = b64encode(passwordDigest + randomSalt).decode('utf-8')
result = '{0};{{SSHA256}}{1};asadmin'.format(username, saltedHashAndSalt)
print(result)

将控制台输出插入 "admin-keyfile" 并(重新)启动您的服务器。