Java 8 + Glassfish 4 asennus Debian Linuxiin – osa 2

Viimeksi asenneltiin Debianiin glassfishiä. Tässä pari edistynyttä niksiä:

32-bit kirjastot 64-bit debianiin

64-bit debian ei välttämättä suostu ajelemaan pkg työkalua jolla voi päivitykset tehdä – se valittaa ia32-libs paketista ja pythonista. Ongelma: kun yrität asentaa paketin, se valittaa riippuvuuksista joita ei olekaan. Ratkaisu tässä:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libjpeg62:i386
sudo apt-get install ia32-libs

Nice.

Glassfish asennuksen päivittäminen ajan tasalle.

Nyt voit päivitellä lasikalan uusimpiin kirjastoihin pkg työkalulla esim. näin:

#stop Glassfish
sudo service GlassFish_domain1 stop

# Switch to being user 'glassfish'
sudo su --shell /bin/bash glassfish 

/opt/glassfish4/bin/pkg -R /opt/glassfish4 list
/opt/glassfish4/bin/pkg -R /opt/glassfish4 image-update -v

exit # Revert to being old caffeine-deprived yourself

Muista ajaa kaikki tiedostoja luovat komennot kuten päivitykset ja käynnistykset glassfish-tunnuksella. Jos teet jotain muulla, voit korjata tilanteen päivittelemällä omistajuudet taas glassfish-kansioon ja/tai poistamalla esim. tilapäistiedostot ja cachet. Näin saat omistajuudet kuntoon:

sudo chown glassfish:glassfish -R /opt/glassfish4

 

Oletuksena zip-versio Glassfish ei omaa etähallintaa ja sen admin-salasana on tyhjä, ja master-salasana ’changeit’ – eli ei kovin käyttökelpoinen eikä turvallinen. Korjataanpa nämä.

Glassfish työkalut polkuun

Jatko-operaatioita ajatellen on kätevää lisätä Glassfish bin kansio polkuun, jotta pääset työkaluihin suoraan käsiksi. Tässä vinkit siihen:

#run these as glassfish to generate right ownerships for files
sudo su --shell /bin/bash glassfish

#These will help running the tools:
cd ~
nano .bashrc

#Set up environment for user 'glassfish': edit .bashrc and add this to end:

export PATH="${PATH}":/opt/glassfish4/glassfish/bin

# save file in editor

Testaa voitko ajaa komennon: asadmin. Ellei, kirjaudu ulos ja sisään.

Glassfish master password

Master password on tosiaan oletuksena: changeit – joten muutetaanpa se. Valitettava seuraus on, että muutos päivittää myös avain-ja sertifikaattitiedostoja, joten on taas oltava omistajuuksien kanssa tarkkana. Tässä ohjeistusta:

#if you're glassfish user, exit back to your normal user:
exit

#make sure glassfish is stopped
sudo service GlassFish_domain1 stop

#run these as glassfish to generate right ownerships for files
sudo su --shell /bin/bash glassfish

#Backup default passwords, if you got already master-password file, backup it too:
cd /opt/glassfish4/glassfish

tar cf passwords.orig.tar domains/domain1/config/domain-passwords domains/domain1/config/keystore.jks domains/domain1/config/cacerts.jks

Tässä kohtaa on olemassa varmuuskopio passwords.orig.tar josta löytyy alkuperäiset tiedostot. Nyt muutetaan niitä:

Change master password
asadmin change-master-password --savemasterpassword=true domain1
# Enter the current master password> [By default this is 'changeit']
# Enter the new master password> [e.g. 'Y0uW1llN3v3rGu3ssTh1sL33tP4ssw0rd!']
# Enter the new master password again>
# After entering the new master password twice, there is a pause of several
# seconds. Then you will find new versions of 'master-password'
# 'domain-passwords' 'keystore.jks' and 'cacerts.jks'.

Sitten kokeillaan toimiiko homma – nämä komennot kysyvät salasanaa, anna siihen valitsemasi master password.

# Your chosen master password should unlock both keystores, and reveal
# two certificates in keystore.jks, and many additional ones in cacerts.jks.
keytool -list -v -keystore domains/domain1/config/keystore.jks 
keytool -list -v -keystore domains/domain1/config/cacerts.jks

Ja jos meni jotain pieleen, aina on varmuuskopiot. Toivottavasti ne menivät oikein alunperin, kai tarkistit ne? 😉 Jos kaikki ok, näin voit palauttaa tarvittaessa alkuperäiset tiedostot jos jotain meni pahasti pieleen:

#if you mess up, you can return the backups by going to /opt/glassfish4/glassfish and running: tar -xvf passwords.orig.tar

 Admin-salasana ja etähallinnan aktivointi

Oletuksena tosiaan admin-salasana on tyhjä, ja etähallinta disabloituna. Näin saat korjattua nämä puutteet:

#exit to normal account, sudo start server - it needs to be running
exit
sudo service GlassFish_domain1 start
sudo su --shell /bin/bash glassfish

# enable remote administration for glassfish 

asadmin enable-secure-admin

# ja tässä kohtaa syytä buutata taas palvelin jotta asetukset
# astuvat voimaan

exit
sudo service GlassFish_domain1 restart
sudo su --shell /bin/bash glassfish

Nyt on tilaisuus tallettaa nämä tiedot paikallisesti, siten että linux-tunnuksiltasi ei salasanaa kysellä:

########Store admin password, to enable automatic login to localhost:4848
asadmin login
# Enter admin user name [Enter to accept default]> [Just press Enter]
# Enter admin password> [e.g. whatever you selected earlier]
# Login information relevant to admin user name [admin] for host [localhost] and admin port [4848] stored at [/home/glassfish/.gfclient/pass] successfully.
# Make sure that this file remains protected. Information stored in this file will be used by administration commands to manage associated domain.
# Command login executed successfully.

Eli, tämän tiedoston voit kopioida haluamiesi linux-tunnusten kotihakemiston alle, .gfclient/pass kansioon. Sen oikeudet voit muuttaa niin että vain user omaa oikeudet päästä tähän käsiksi. Muista säätää myös omistajuus oikein, eli omistajaksi ko tunnus.

Voit myös tuikata admin-konsolin vain https-protokollalle:

#Enable https for remote access to admin console
# Requests to http://xxx:4848 are redirected to https://xxx:4848

asadmin set server-config.network-config.protocols.protocol.admin-listener.security-enabled=true

Glassfish käyttämään portteja 80 ja 443 – ilman root oikeuksia

Jos haluat Glassfishin operoivan porteissa 80 ja 443 – mutta et halua ajaa sitä root tunnuksin jotka normaalisti vaaditaan ko porttien käyttöön  – voit tehdä /etc/init.d/GlassFish_domain1 tiedoston loppuun seuraavat reititykset – näin nämä ajetaan root tunnarilla, mutta itse glassfish normaalisti glassfish tunnarilla – ja portit 80 ja 443 ovat käytössä.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8181

 Sertifikaatit uusiksi

Glassfish oletussertifikaatit ovat tasan samat mitä jokainen käyttää – ei kovin turvallista. Tässä ohjeita miten voit tehdä uudet avaimet omaan käyttöön:

# Ensure that you are running as user 'glassfish'!!
# Ensure GlassFish is stopped

#Inspect keystore.jks
cd /opt/glassfish4/glassfish/domains/domain1/config/
keytool -list -keystore keystore.jks -storepass [whateverismymasterpassword]

#Update keystore.jks

keytool -delete -alias s1as -keystore keystore.jks -storepass [whateverismymasterpassword]

keytool -delete -alias glassfish-instance -keystore keystore.jks -storepass [whateverismymasterpassword]

keytool -genkeypair -alias s1as -dname "CN=myservername,OU=myunit,O=MyOrganization,L=MyTown,C=FI" -keyalg RSA -keysize 2048 -validity 3650 -keystore keystore.jks -keypass [whateverismymasterpassword] -storepass [whateverismymasterpassword]

keytool -genkeypair -alias glassfish-instance -dname "CN=myservername,OU=myunit,O=MyOrganization,L=MyTown,C=FI" -keyalg RSA -keysize 2048 -validity 3650 -keystore keystore.jks -keypass [whateverismymasterpassword] -storepass [whateverismymasterpassword]

#Check keystore.jks

keytool -list -keystore keystore.jks -storepass [whateverismymasterpassword]

#Export certificates from keystore.jks

keytool -exportcert -alias s1as -file s1as.cert -keystore keystore.jks -storepass [whateverismymasterpassword]

keytool -exportcert -alias glassfish-instance -file glassfish-instance.cert -keystore keystore.jks -storepass [whateverismymasterpassword]

#Update cacerts.jks

keytool -delete -alias s1as -keystore cacerts.jks -storepass [whateverismymasterpassword]

keytool -delete -alias glassfish-instance -keystore cacerts.jks -storepass [whateverismymasterpassword]

keytool -importcert -alias s1as -file s1as.cert -keystore cacerts.jks -storepass [whateverismymasterpassword]

#Trust this certificate? [no]: [Enter 'yes']

keytool -importcert -alias glassfish-instance -file glassfish-instance.cert -keystore cacerts.jks -storepass [whateverismymasterpassword]

#Trust this certificate? [no]: [Enter 'yes']

#Check cacerts.jks and tidy up

keytool -list -keystore cacerts.jks -storepass [whateverismymasterpassword]

rm s1as.cert glassfish-instance.cert

exit

Done! Nyt on uudet ja omat avaimet serverillä, ja aiemman vaiheen ansiosta uudella master salasanalla suojattuna. Tässä voi välivaiheena allekirjoituttaa sertifikaattinsa jollain virallisella taholla jos haluaa tuotantokäyttöön sopivan vimpaimen.

Serveriheaderien obfuskointi – äläpä kerro enempää!

Yksi oma lempiaiheeni tietoturvassa on ollut suojata systeemeitä siten että ne eivät kerro tarpeettoman paljon itsestään .- esim. header joka sanoo: X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.7) – suorastaan kirkuu googlettamaan seuraavaksi haavoittuvuuksia, oletustunnuksia, ja täsmähyökkäysohjelmia. Mitä vähemmän paljastaa tietoa ulospäin sen vaikeampaa on heti tietää mitä hyökkäyksiä soveltaa. Vielä kierompaa on näyttää misinformaatiota – esim. ajaa IIS palvelinta joka väittää olevansa Glassfish tai Glassfishiä joka väittää olevansa Websphere jne.

Tässä komennot joilla voit tukahduttaa näitä headereita. Huom! Ne muuttavat domain1/config/domain.xml tiedostoa, joten syytä taas olla glassfish tunnuksena sisässä (komento whoami kertoo mikä on tunnuksesi). Glassfish serverin tulee olla päällä.

#start glassfish if it's not running
sudo service GlassFish_domain1 start

#Ensure that you are running as user 'glassfish'!!
sudo su --shell /bin/bash glassfish

#Check HTTP headers
# Check HTTP response headers (as shown below) to make sure that there are
# clues as to the server or its version. Look for any mention of
# 'GlassFish', 'X-Powered-By', etc. If necessary:

asadmin create-jvm-options -Dproduct.name=

asadmin set server.network-config.protocols.protocol.http-listener-1.http.xpowered-by=false

asadmin set server.network-config.protocols.protocol.http-listener-2.http.xpowered-by=false

asadmin set server.network-config.protocols.protocol.admin-listener.http.xpowered-by=false

Samalla voit myös tsekata virhesivut, esim. 404 sivua ei löydy kertoo usein paljonkin serveristä. Se on muutenkin hyvä ottaa omaan haltuun. Voit tehdä tämän toki sovelluskohtaisenakin, mutta tässä on serverikohtainen asetus:

asadmin set server.http-service.virtual-server.server.property.send-error_1="code=404 path=/opt/glassfish4/glassfish/globalhtml/404.html reason=Resource_not_found"

Tämä menee domain.xml:ään – jota toki voi käsinkin muokata. Muillekin virheilmoituksille voi tehdä vastaavia. Saatat myös haluta disabloida/poistaa/vaihtaa juuri-kontekstin oletussivun ja sovelluksen.

Lopuksi tietysti buutataan mylly

#Restart to take effect

exit

sudo service GlassFish_domain1 restart

Virtuaalikoneen säädöt ja muisti

Virtuaalikoneen tuunaus on ihan oma taiteenlajinsa – sitä voi harrastaa web-admin konsolista, tai domain.xml tiedostoa editoimalla, mutta onnistuu se komentoriviltäkin:

#List current JVM options

asadmin list-jvm-options

# Now update some important JVM settings. 
# Of course use memory as you need to, so if you like 64GB max heap, go for it!

asadmin delete-jvm-options -Xmx512m
asadmin create-jvm-options -Xmx2048m
asadmin create-jvm-options -Xms1024m

# and run with -client or -server optimizations
# -client boots up faster, server optimizes tighter on longer run
# -client is now the default, so if you like -server:

asadmin delete-jvm-options -client
asadmin create-jvm-options -server

Siinä kaikki tällä erää. Moderni sovelluspalvelin on sillä tavalla kiehtova paketti että se sisältää hurjasti piirteitä, palveluita, ja yksityiskohtia. Monet näistä periaatteista pätevät hyvinkin muihinkin servereihin, kuten Tomcat ja JBOSS, ja miksei myös WebSphere/Weblogic. Toivottavasti näistä on apua.

 

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s