freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Bastillion:一款基于Web的SSH控制终端
2020-10-02 10:36:11

Bastillion

Bastillion是一款基于Web的SSH控制终端,该工具可以帮助广大开发人员集中管理针对目标系统的管理员权限访问。这款基于Web的管理工具还结合了用户公共SSH密钥的管理和分发,而密钥的管理需要基于配置文件中定义的用户身份来进行分配。

管理员可以使用Authy或Google Authenticator来在登录时开启双因素身份验证功能。登录后,他们就可以管理公共SSH密钥,或通过一个WebShell来连接到他们的系统中了。在Bastillion中,命令是可以跨Shell共享的,这样可以简化操作,并消除冗余的命令执行。

Bastillion将TLS/SSL层放在SSH之上,并充当bastion主机进行管理。由于Bastillion使用的协议栈为TLS/SSL+SSH,因此基础设施不能通过隧道/端口转发来暴露在外。另外,默认情况下启用SSH密钥管理,以防止非托管公钥并强制实施最佳实践。

Bastillion下载

广大研究人员可以直接点击【这里】来下载Bastillion的发布版本。

除此之外,我们也可以直接在AWS商城中获取Bastillion【传送门】。

当然了,由于Bastillion可以通过FreeBSD端口系统来在FreeBSD平台上进行安装,因此广大研究人员也可以通过下列命令来安装Bastillion:

pkg install security/bastillion

依赖组件

安装并部署Open-JDK / Oracle-JDK v1.9或更高版本【文档】:

apt-get install openjdk-9-jdk

使用Jetty构建项目

首先,我们需要点击【这里】下载bastillion-jetty-vXX.XX.tar.gz。接下来,我们需要导出环境变量。

Linux/Unix/macOS:

export JAVA_HOME=/path/to/jdk

 export PATH=$JAVA_HOME/bin:$PATH

Windows:

set JAVA_HOME=C:\path\to\jdk

 set PATH=%JAVA_HOME%\bin;%PATH%

接下来,我们就可以安装Bastillion了。

Linux/Unix/macOS:

./startBastillion.sh

Windows:

startBastillion.bat

源码构建

首先,我们需要安装Maven3或更高版本:

apt-get install maven

安装Loophole MVC:【传送门

导出环境变量:

export JAVA_HOME=/path/to/jdk

export M2_HOME=/path/to/maven

export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH

切换到包含了pom.xml文件的目录中,然后运行下列命令:

mvn package jetty:run

工具使用

打开你的浏览器,然后访问https://<whatever ip>:8443,并使用下列凭证登录:

username:admin

password:changeme

管理SSH密钥

默认配置下,Bastillion会针对目标系统重写authorized_keys文件中的所有配置值,我们也可以修改BastillionConfig.properties文件来禁用密钥管理功能,这样Bastillion就只会以Bastillion主机运行了,这个文件位于jetty/bastillion/WEB-INF/classes目录内:

#set to false to disable key management. If false, the Bastillion public key will be appended to the authorized_keys file (instead of it being overwritten completely).

keyManagementEnabled=false

除此之外,authorized_keys文件会根据应用程序的情况进行刷新,如果启用了密钥管理功能,那么我们就可以在BastillionConfig.properties文件中定义刷新间隔了:

#authorized_keys refresh interval in minutes (no refresh for <=0)

authKeysRefreshInterval=120

如果需要禁用或允许管理员设置任意公共密钥,可以按照如下代码编辑BastillionConfig.properties文件:

#set to true to generate keys when added/managed by users and enforce strong passphrases set to false to allow users to set their own public key

forceUserKeyGeneration=false

设置自定义SSH密钥对

我们还可以在BastillionConfig.properties文件中设置自定义的SSH密钥对:

#set to true to regenerate and import SSH keys  --set to true

resetApplicationSSHKey=true

 

#SSH Key Type 'dsa' or 'rsa'

sshKeyType=rsa

 

#private key  --set pvt key

privateKey=/Users/kavanagh/.ssh/id_rsa

 

#public key  --set pub key

publicKey=/Users/kavanagh/.ssh/id_rsa.pub

 

#default passphrase  --leave blank if passphrase is empty

defaultSSHPassphrase=myPa$$w0rd

调整数据库设置

我们还可以在配置选项中调整数据库设置:

#Database user

dbUser=bastillion

#Database password

dbPassword=p@$$w0rd!!

#Database JDBC driver

dbDriver=org.h2.Driver

#Connection URL to the DB

dbConnectionURL=jdbc:h2:keydb/bastillion;CIPHER=AES;

默认配置下,数据库是嵌入式的,但我们也可以通过调整连接URL来使用远程H2数据库:

#Connection URL to the DB

dbConnectionURL=jdbc:h2:tcp://<host>:<port>/~/bastillion;CIPHER=AES;

外部认证

我们还可以通过调整BastillionConfig.properties文件配置来启用外部认证:

#specify a external authentication module (ex: ldap-ol, ldap-ad).  Edit the jaas.conf to set connection details

jaasModule=ldap-ol

连接信息可以在jaas.conf文件中配置:

ldap-ol {

com.sun.security.auth.module.LdapLoginModule SUFFICIENT

userProvider="ldap://hostname:389/ou=example,dc=bastillion,dc=com"

userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"

authzIdentity="{cn}"

useSSL=false

debug=false;

};

通过使用org.eclipse.jetty.jaas.spi.LdapLoginModule,我们还可以映射和使用LDAP角色:

ldap-ol-with-roles {

    //openldap auth with roles that can map to profiles

    org.eclipse.jetty.jaas.spi.LdapLoginModule required

    debug="false"

    useLdaps="false"

    contextFactory="com.sun.jndi.ldap.LdapCtxFactory"

    hostname="<SERVER>"

    port="389"

    bindDn="<BIND-DN>"

    bindPassword="<BIND-DN PASSWORD>"

    authenticationMethod="simple"

    forceBindingLogin="true"

    userBaseDn="ou=users,dc=bastillion,dc=com"

    userRdnAttribute="uid"

    userIdAttribute="uid"

    userPasswordAttribute="userPassword"

    userObjectClass="inetOrgPerson"

    roleBaseDn="ou=groups,dc=bastillion,dc=com"

    roleNameAttribute="cn"

    roleMemberAttribute="member"

    roleObjectClass="groupOfNames";

};

工具使用截图

许可证协议

Bastillion的开发与发布遵循AGPL开源许可证协议。

项目地址

Bastillion:【GitHub传送门

# ssh # SSH私钥 # 密钥管理
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者