Bastillion是一款基于Web的SSH控制终端,该工具可以帮助广大开发人员集中管理针对目标系统的管理员权限访问。这款基于Web的管理工具还结合了用户公共SSH密钥的管理和分发,而密钥的管理需要基于配置文件中定义的用户身份来进行分配。
管理员可以使用Authy或Google Authenticator来在登录时开启双因素身份验证功能。登录后,他们就可以管理公共SSH密钥,或通过一个WebShell来连接到他们的系统中了。在Bastillion中,命令是可以跨Shell共享的,这样可以简化操作,并消除冗余的命令执行。
Bastillion将TLS/SSL层放在SSH之上,并充当bastion主机进行管理。由于Bastillion使用的协议栈为TLS/SSL+SSH,因此基础设施不能通过隧道/端口转发来暴露在外。另外,默认情况下启用SSH密钥管理,以防止非托管公钥并强制实施最佳实践。
Bastillion下载
广大研究人员可以直接点击【https://github.com/bastillion-io/Bastillion/releases】来下载Bastillion的发布版本。
除此之外,我们也可以直接在AWS商城中获取Bastillion【https://aws.amazon.com/marketplace/pp/Loophole-LLC-Bastillion/B076PNFPCL】。
当然了,由于Bastillion可以通过FreeBSD端口系统来在FreeBSD平台上进行安装,因此广大研究人员也可以通过下列命令来安装Bastillion:
pkg install security/bastillion
依赖组件
安装并部署Open-JDK / Oracle-JDK v1.9或更高版本【文档】:
apt-get install openjdk-9-jdk
使用Jetty构建项目
首先,我们需要点击【https://github.com/bastillion-io/Bastillion/releases】下载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:pathojdk set PATH=%JAVA_HOME%bin;%PATH%
接下来,我们就可以安装Bastillion了。
Linux/Unix/macOS:
./startBastillion.sh
Windows:
startBastillion.bat
源码构建
首先,我们需要安装Maven3或更高版本:
apt-get install maven
安装Loophole MVC:https://github.com/bastillion-io/lmvc
导出环境变量:
export JAVA_HOME=/path/to/jdkexport M2_HOME=/path/to/mavenexport PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
切换到包含了pom.xml文件的目录中,然后运行下列命令:
mvn package jetty:run
工具使用
打开你的浏览器,然后访问https://:8443,并使用下列凭证登录:
username:adminpassword: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 keyforceUserKeyGeneration=false
设置自定义SSH密钥对
我们还可以在BastillionConfig.properties文件中设置自定义的SSH密钥对:
#set to true to regenerate and import SSH keys --set to trueresetApplicationSSHKey=true #SSH Key Type 'dsa' or 'rsa'sshKeyType=rsa #private key --set pvt keyprivateKey=/Users/kavanagh/.ssh/id_rsa #public key --set pub keypublicKey=/Users/kavanagh/.ssh/id_rsa.pub #default passphrase --leave blank if passphrase is emptydefaultSSHPassphrase=myPa$$w0rd
调整数据库设置
我们还可以在配置选项中调整数据库设置:
#Database userdbUser=bastillion#Database passworddbPassword=p@$$w0rd!!#Database JDBC driverdbDriver=org.h2.Driver#Connection URL to the DBdbConnectionURL=jdbc:h2:keydb/bastillion;CIPHER=AES;
默认配置下,数据库是嵌入式的,但我们也可以通过调整连接URL来使用远程H2数据库:
#Connection URL to the DBdbConnectionURL=jdbc:h2:tcp://:/~/bastillion;CIPHER=AES;
外部认证
我们还可以通过调整BastillionConfig.properties文件配置来启用外部认证:
#specify a external authentication module (ex: ldap-ol, ldap-ad). Edit the jaas.conf to set connection detailsjaasModule=ldap-ol
连接信息可以在jaas.conf文件中配置:
ldap-ol {com.sun.security.auth.module.LdapLoginModule SUFFICIENTuserProvider="ldap://hostname:389/ou=example,dc=bastillion,dc=com"userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"authzIdentity="{cn}"useSSL=falsedebug=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="" port="389" bindDn="" bindPassword="" 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:https://github.com/bastillion-io/Bastillion