Bastillion เป็นคอนโซล SSH บนเว็บที่จัดการการเข้าถึงระบบของผู้ดูแลระบบจากส่วนกลาง การดูแลระบบบนเว็บจะรวมกับการจัดการและการแจกจ่ายคีย์ SSH สาธารณะของผู้ใช้ การจัดการและการดูแลระบบคีย์จะขึ้นอยู่กับโปรไฟล์ที่กำหนดให้กับผู้ใช้ที่กำหนดไว้
ผู้ดูแลระบบสามารถเข้าสู่ระบบโดยใช้การตรวจสอบสิทธิ์แบบสองปัจจัยด้วย Authy หรือ Google Authenticator จากนั้นพวกเขาสามารถจัดการคีย์ SSH สาธารณะหรือเชื่อมต่อกับระบบผ่านทางเว็บเชลล์ได้ สามารถใช้คำสั่งร่วมกันข้ามเชลล์เพื่อให้การแพตช์ง่ายขึ้นและกำจัดการดำเนินการคำสั่งที่ซ้ำซ้อน
Bastillion ซ้อน TLS/SSL ไว้บน SSH และทำหน้าที่เป็นโฮสต์ของป้อมปราการสำหรับการบริหาร โปรโตคอลถูกซ้อนกัน (TLS/SSL + SSH) ดังนั้นจึงไม่สามารถเปิดเผยโครงสร้างพื้นฐานผ่านการทันเนล/การส่งต่อพอร์ต ดูรายละเอียดเพิ่มเติมได้ในเอกสารไวท์เปเปอร์ต่อไปนี้: การใช้ระบบบุคคลที่สามที่เชื่อถือได้สำหรับ Secure Shell นอกจากนี้ การจัดการคีย์ SSH ยังเปิดใช้งานตามค่าเริ่มต้นเพื่อป้องกันคีย์สาธารณะที่ไม่มีการจัดการและบังคับใช้แนวทางปฏิบัติที่ดีที่สุด
Bastillion มีให้ใช้งานฟรีภายใต้สัญญาอนุญาต Prosperity Public
https://github.com/bastillion-io/Bastillion/releases
หรือซื้อจากตลาด AWS
https://aws.amazon.com/marketplace/pp/Loophole-LLC-Bastillion/B076PNFPCL
นอกจากนี้ Bastillion ยังสามารถติดตั้งบน FreeBSD ผ่านระบบพอร์ต 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
แอปพลิเคชัน | หุ่นยนต์ | ไอโอเอส |
---|---|---|
รับรองความถูกต้อง | Google Play | ไอทูนส์ |
Google Authenticator | Google Play | ไอทูนส์ |
ดาวน์โหลด bastillion-jetty-vXX.XX.tar.gz
https://github.com/bastillion-io/Bastillion/releases
ส่งออกตัวแปรสภาพแวดล้อม
สำหรับลินุกซ์/ยูนิกซ์/OSX
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
สำหรับวินโดวส์
set JAVA_HOME=C:pathtojdk
set PATH=%JAVA_HOME%bin;%PATH%
เริ่มบาสทิลเลียน
สำหรับลินุกซ์/ยูนิกซ์/OSX
./startBastillion.sh
สำหรับวินโดวส์
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://<whatever ip>:8443
เข้าสู่ระบบด้วย
username:admin
password:changeme
หมายเหตุ: เมื่อใช้อินสแตนซ์ AMI รหัสผ่านจะมีค่าเริ่มต้นเป็น <Instance 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ยังได้รับการอัปเดต/รีเฟรชเป็นระยะๆ ตามความสัมพันธ์ที่กำหนดไว้ในแอปพลิเคชัน หากเปิดใช้งานการจัดการคีย์ ช่วงเวลาการรีเฟรชสามารถระบุได้ในไฟล์ BastillionConfig.properties
#authorized_keys refresh interval in minutes (no refresh for <=0)
authKeysRefreshInterval=120
ตามค่าเริ่มต้น Bastillion จะสร้างและแจกจ่ายคีย์ SSH ที่จัดการโดยผู้ดูแลระบบในขณะที่ให้พวกเขาดาวน์โหลดคีย์ส่วนตัวที่สร้างขึ้น สิ่งนี้จะบังคับให้ผู้ดูแลระบบใช้ข้อความรหัสผ่านที่คาดเดายากสำหรับคีย์ที่ตั้งค่าไว้ในระบบ รหัสส่วนตัวพร้อมให้ดาวน์โหลดเพียงครั้งเดียวและไม่ได้จัดเก็บไว้ในฝั่งแอปพลิเคชัน หากต้องการปิดใช้งานและอนุญาตให้ผู้ดูแลระบบตั้งค่าคีย์สาธารณะ ให้แก้ไข 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
Bastillion สร้างคีย์ SSH สาธารณะ/ส่วนตัวของตนเองเมื่อเริ่มต้นระบบครั้งแรกเพื่อใช้ในการลงทะเบียนระบบ คุณสามารถระบุคู่คีย์ SSH แบบกำหนดเองได้ในไฟล์ BastillionConfig.properties
ตัวอย่างเช่น:
#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;
ตามค่าเริ่มต้น ที่เก็บข้อมูลจะถูกตั้งค่าเป็นแบบฝัง แต่ฐานข้อมูล H2 ระยะไกลสามารถรองรับได้โดยการปรับ URL การเชื่อมต่อ
#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;
};
ผู้ดูแลระบบจะถูกเพิ่มเมื่อมีการตรวจสอบสิทธิ์ และโปรไฟล์ของระบบอาจถูกกำหนดโดยผู้ใช้ที่มีสิทธิ์เต็มรูปแบบ
บทบาท LDAP ของผู้ใช้สามารถแม็พกับโปรไฟล์ที่กำหนดใน Bastillion ผ่านการใช้ org.eclipse.jetty.jaas.spi.LdapLoginModule
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
การตรวจสอบผ่านแอปพลิเคชันเป็นเพียงการพิสูจน์แนวคิดเท่านั้น สามารถเปิดใช้งานได้ใน BastillionConfig.properties
#enable audit --set to true to enable
enableInternalAudit=true
ขอขอบคุณเป็นพิเศษสำหรับโครงการที่น่าทึ่งเหล่านี้ ซึ่งทำให้สิ่งนี้ (และโครงการที่ยอดเยี่ยมอื่นๆ) เป็นไปได้
การขึ้นต่อกันของบุคคลที่สามมีการกล่าวถึงใน 3rdPartyLicenses.md
Bastillion พร้อมใช้งานภายใต้ใบอนุญาต Prosperity Public
Loophole, LLC - ฌอน คาวาน่า