Bastilion 是一個基於 Web 的 SSH 控制台,可集中管理對系統的管理存取。基於 Web 的管理與使用者 SSH 公鑰的管理和分發相結合。金鑰管理和管理基於分配給定義使用者的設定檔。
管理員可以使用 Authy 或 Google Authenticator 使用雙重認證登入。從那裡他們可以管理他們的公共 SSH 金鑰或透過 Web shell 連接到他們的系統。命令可以在 shell 之間共用,以便更輕鬆地修補並消除冗餘命令執行。
Basstillion 將 TLS/SSL 置於 SSH 之上,並充當管理的堡壘主機。協定是堆疊的(TLS/SSL + SSH),因此基礎設施無法透過隧道/連接埠轉送暴露。更多詳細資訊可以在以下白皮書中找到:為 Secure Shell 實施可信任第三方系統。此外,預設情況下啟用 SSH 金鑰管理,以防止不受管理的公鑰並強制執行最佳實務。
Bastilion 可根據 Prosperity 公共授權免費使用
https://github.com/bastillion-io/Bastillion/releases
或從 AWS 市場購買
https://aws.amazon.com/marketplace/pp/Loophole-LLC-Bastillion/B076PNFPCL
此外,Bastillion 還可以透過 FreeBSD ports 系統安裝在 FreeBSD 上。要透過二進位包安裝,只需運行:
pkg install security/bastillion
Open-JDK / Oracle-JDK - 1.9 或更高版本
apt-get 安裝 openjdk-9-jdk
http://www.oracle.com/technetwork/java/javase/downloads/index.html
安裝 Authy 或 Google Authenticator以啟用 Android 或 iOS 的雙重認證
應用 | 安卓 | iOS系統 |
---|---|---|
奧蒂 | 谷歌遊戲 | iTunes |
谷歌身份驗證器 | 谷歌遊戲 | iTunes |
下載 bastilion-jetty-vXX.XX.tar.gz
https://github.com/bastillion-io/Bastillion/releases
導出環境變數
適用於 Linux/Unix/OSX
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
對於Windows
set JAVA_HOME=C:pathtojdk
set PATH=%JAVA_HOME%bin;%PATH%
啟動巴士底獄
適用於 Linux/Unix/OSX
./startBastillion.sh
對於Windows
startBastillion.bat
更多文件位於:https://www.bastillion.io/docs/index.html
安裝 Maven 3 或更高版本
apt-get 安裝 maven
http://maven.apache.org
導出環境變數
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
注意:執行 mvn clean 將刪除 H2 DB 並清除所有資料。
開啟瀏覽器 https://<任 ip>:8443
登入方式
username:admin
password:changeme
注意:使用 AMI 執行個體時,密碼預設為 <執行個體 ID>。此外,AMI 使用連接埠 443,如 https://<Instance IP>:443
預設情況下,Bastillion 將覆寫系統指定的authorized_keys 檔案中的所有值。您可以透過編輯BastillionConfig.properties 檔案來停用金鑰管理,並僅將Bastillion 用作堡壘主機。該檔案位於 jetty/bastillion/WEB-INF/classes 目錄中。 (如果從原始程式碼構建,則為 src/main/resources 目錄)
#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 檔案會根據應用程式中定義的關係定期更新/刷新。如果啟用金鑰管理,則可以在 BasstillionConfig.properties 檔案中指定刷新間隔。
#authorized_keys refresh interval in minutes (no refresh for <=0)
authKeysRefreshInterval=120
預設情況下,Bastillion 將產生並分發由管理員管理的 SSH 金鑰,同時讓他們下載產生的私有金鑰。這迫使管理員對系統上設定的金鑰使用強密碼。私鑰只能下載一次,不儲存在應用程式端。若要停用並允許管理員設定任何公鑰,請編輯 BasstillionConfig.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
Bastilion 在初始啟動時產生自己的公用/私人 SSH 金鑰,以便在註冊系統時使用。您可以在 BasstillionConfig.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;
可以透過 BasstillionConfig.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 角色對應到 Basstillion 中定義的設定檔。
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";
};
當使用者登入且角色名稱與設定檔名稱相符時,將在定義的設定檔中新增/刪除使用者。
預設情況下禁用審核。可以透過log4j2.xml取消註釋io.bastillion.manage.util.SystemAudit和審核附加程式定義來啟用審核日誌。
https://github.com/bastillion-io/Bastillion/blob/master/src/main/resources/log4j2.xml#L19-L22
透過應用程式進行審核只是概念驗證。可以在 BasstillionConfig.properties 中啟用它。
#enable audit --set to true to enable
enableInternalAudit=true
特別感謝這些令人驚嘆的項目,使這個(和其他偉大的項目)成為可能。
3rdPartyLicenses.md中提到了第三方依賴項
Bastilion 可根據 Prosperity 公共授權使用
漏洞有限責任公司 - 肖恩卡瓦納