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" 并(重新)启动您的服务器。
如何使用密码文件更改 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" 并(重新)启动您的服务器。