Egy adminisztrátor a pokolban is adminisztrátor. Sajnos viszont nem csak a pokolban, de a legtöbb vállalatnál, szállodában, és publikus internet pontokon sem engedélyezik az SSH kapcsolatokat. Mit lehet ilyenkor tenni? Manapság már egy igazi admin sehova sem megy megfelelő okostelefon, és mobilinternet nélkül. Így lehet a kis képernyőt tapicskolni, hogy vészhelyzet esetén is hozzáférjünk egy rendszerhez. Én most mutatni szeretnék egy másik megoldást is.

Web Terminál

Adja magát a dolog, hogy a böngészés, szinte mindig működőképes. Mondhatni a leglegitimebb formája az internet használatnak. Tehát használjunk egy webes terminált. Persze kérdéses, hogy egy terminál mennyire tud működőkepés lenni egy böngészőben. Még régről vannak emlékeim, és ezek a kezdeti próbálkozások borzasztóan néztek ki.

A jelenlegi megoldások viszont sokkal kecsegtetőbbek. Én a következő mellett tettem le a voksom.

Shell in a box

shellinabox1

A shell in a box nem egy php kódhalmaz, vagy más webes programnyelv. Egy natív alkalmazás, ami egy webes interface portot nyit, és a rendszerünk LOGIN vagy SSH funkciójával köti össze a távoli böngészőt.

Nézzük, hogy is tudjuk beüzemelni. Én a távábbiakban egy Ubuntu 12.10-es előtelepített Linuxot feltételkezek.
Először is installáljuk fel a csomagot.

# apt-get install shellinabox

Ezek után, már csak a konfigurációs állományt kell beállítanunk.

# vi /etc/default/shellinabox 

# Should shellinaboxd start automatically
SHELLINABOX_DAEMON_START=1

# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=4200

# Parameters that are managed by the system and usually should not need
# changing:
# SHELLINABOX_DATADIR=/var/lib/shellinabox
# SHELLINABOX_USER=shellinabox
# SHELLINABOX_GROUP=shellinabox

# Any optional arguments (e.g. extra service definitions)
# We disable beeps, as there have been reports of the VLC plugin crashing
# Firefox on Linux/x86_64.
SHELLINABOX_ARGS=-t 

Értelemszerűen elsőként bekapcsoljuk, hogy háttérben futó daemon legyen, másodsorban adunk neki egy portot, ahol elérhető. Harmad sorban pedig az argumentumait.

shellinabox5

Nézzünk pár példát arra, hogy miket adhatunk meg argumentumként.

Üres SHELLINABOX_ARGS: A fentebb megadott porton a SHELLINABOX egy HTTPS csatornát fog kiépíteni, ha talál certificate-t, akkor azt használva, ha nem akkor sajátot generálva.

SHELLINABOX_ARGS=-t A megadott porton sima HTTP csatornán keresztül lesz elérhető a szolgáltatás.

SHELLINABOX_ARGS=-s /:SSH:example.org A terminálra való belépésnél nem a gépen kapunk egy logint, hanem automatikusan egy SSH csatorna épül ki az example.org felé.

SHELLINABOX_ARGS=–user-css Normal:+black-on-white.css,Reverse:-white-on-black.css Engedélyezhetjük a webes terminál ablakok stílusának a változtatását.

Partikus megoldások

shellinabox2

Tehát a legjobb ha a BOXINASHELL-t a 443-mas porton, és SSL/TLS módban futtatjuk. Amennyiben viszont van már valamilyen webes service ami használná a portot, akkor érdemes a webszerver alá betenni a szolgáltatást.

Ehhez érdemes a -t kapcsolóval futtatni a BOXINASHELL service-t, és a titkosításról a webszerver szintjén foglalkozni. Tételezzük fel, hogy a BOXINASHELL fut, localhoston és a 4200 porton.

Nézzük a beállítást lighttpd esetében:

Engedélyezzük a proxy modult.

# vi /etc/lighttpd/lighttpd.conf
server.modules = (
    "mod_access",
    "mod_alias",
    "mod_accesslog",
    "mod_compress",
    "mod_redirect",
    "mod_proxy"
) 

Majd a /shell URL kéréseket átirányítjuk a 4200-as portra.

# vi /etc/lighttpd/lighttpd.conf
proxy.server = ( 
    "/shell" => 
    ( ( 
        "host" => "127.0.0.1",
        "port" => 4200
    ) )
)
# /etc/init.d/lighttpd restart

shellinabox3

Nézzük ugyan ezt Apache esetében:

Engedélyezzük a proxy modult.

# a2enmod proxy

Majd a /shell URL kéréseket átirányítjuk a 4200-as portra. Én ebben az esetben a default virtualhost file-t adtam meg, értelemszerúen ha van más akkor abba is bele lehet tenni a következő blokkot.

# vi /etc/apache2/sites-enabled/000-default
<Location /shell>
    ProxyPass http://127.0.0.1:4200
    Allow from 127.0.0.1
</Location>
/etc/init.d/apache2 restart

Ezekután a szolgáltatás elérhető lesz a webszerverünkön keresztül is. http(s)://weboldalunk.cime/shell

shellinabox4

Összegzés

A SHELLINABOX nagyon jó megoldás webes terminálok kialakítására. A benne futó szövegek számomra mindig megfelelően jelentek meg, még akkor is ha az ablakot frissítő alkalmazások is futottak benne. Egyetlen hiányosság, amit nem tudtam orvosolni, hogy a saját ablakén kívülről nem tud a vágólapról beilleszteni a terminálba semmit. Ez néha bosszantó tud lenni. Biztonsági megfontolásból azt ajánlom, hogy védjük le külön jelszóval a weboldalt, ha proxy-t használunk, illetve ne az alapértelmezett /shell címen tegyük elérhetővé. Én magam egy külön VM/JAIL-t használok erre a célre, amin nem fut más csak ez a szolgáltatás.