mokslininko darbo vietos paslauga - litnet...based html5 konsolė, funkciją, proxy'indamas...
TRANSCRIPT
Lietuvos mokslo ir studijų institucijų kompiuterių tinklas LITNET
Vilniaus universitetas
Mokslininko darbo vietos paslauga
Paslaugos administravimo instrukcija
Paslauga sukurta vykdant Europos socialinio fondo finansuojamą projektą „Mokslo ir studijų
institucijoms LITNET teikiamų IT paslaugų plėtra“ Nr. 09.3.3-ESFA-V-711-01-0003
Vilnius
2019 m.
2
TURINYS
Įvadas ................................................................................................................................................... 3
Virtualių darbo vietų kūrimo logika ................................................................................................ 4
Mokslininko darbo vietos paslaugos administracinė dalis .............................................................. 5
Pirminio VM atvaizdo kūrimas .................................................................................................... 8
Naudotojo VM šablono kūrimas .................................................................................................. 9
Naudotojo VM kūrimas .............................................................................................................. 11
Pastabos ...................................................................................................................................... 12
MDV dashboard diegimas .......................................................................................................... 13
HTML5 konsolės diegimas ........................................................................................................ 15
MDV hipervizoriaus diegimas ................................................................................................... 17
SPICE klientai ............................................................................................................................ 18
3
Įvadas
Mokslininko darbo vietos paslauga (toliau - MDV) skirta LITNET institucijų mokslininkams
ir tyrėjams, kuriems reikalinga spartesnė darbo vieta su greita tinklo prieiga prie didesnių skaičiavimo
resursų ir mokslo duomenų archyvų nei įprastos prieigos atveju. Paslauga paremta savitarna,
leidžiančia pačiam susikurti virtualią darbo vietą LITNET techniniame centre, pasirenkant iš jau
parengtų Windows ir Linux operacinių sistemų šablonų bei skirtingų disko dydžių. Yra numatytas
pilnas virtualių darbo vietų valdymas: paleidimas, išjungimas, priverstinis išjungimas, rezervinis
kopijavimas bei naikinimas. Prisijungiama prie užsakytų virtualių darbo vietų per LITNET
federacinę elektroninių tapatybių infrastruktūrą (FEDI) naršyklės pagalba.
Paslaugai teikti naudojama virtualių darbo vietų infrastruktūra (angl. Virtual Desktop
Infrastructure – VDI) paremtas sprendimas ir atviro kodo programinė įranga.
4
Virtualių darbo vietų kūrimo logika
Virtualių darbo vietų (VDV) mašinos yra kuriamos naudojant diskų momentines kopijas. Naudojant
šį metodą, virtualios mašinos (VM) yra sukuriamos greitai, nes nereikia vykdyti visų duomenų
kopijavimo iš šaltinio disko.
Virtualių darbo vietų struktūra susideda iš 3 virtualių mašinų tipų:
Pradinis VM atvaizdas (Šaltinio VM)
Naudotojo VM šablonas (Pradinė VM)
Naudotojo VM (VDV VM)
Pradinis VM atvaizdas: tai virtuali mašina į kuriama diegiama operacinė sistema (OS), įdiegiamos
viso reikalingos tvarkyklės ir ji laikoma pradiniu atvaizdu, nes visos sekančios mašinos bus
kuriamos pagal jos atvaizdą. Į šią mašiną įdiegiama visa reikiama programinė įranga (PĮ), taip pat
pagal poreikius susikonfigūruojama OS.
Naudotojo VM šablonas: ši mašina kuriama iš pagrindinio VM atvaizdo kopijuojant jo diską. Šioje
mašinoje atliekamos paskutinės korekcijos, jeigu reikia išplečiami diskai arba įvykdomi "sysprep"
skriptai. Iš šios mašinos kuriamos Naudotojo VM naudojant momentines kopijas.
Naudotojo VM: tai virtualios darbo vietos mašina pateikiama galutiniam naudotojui. Ši mašina
kuriama iš naudotojo VM šablono momentinės kopijos. Jas gali kurti naudotojas savitarnos portale.
5
Mokslininko darbo vietos paslaugos administracinė dalis
Visa viršuje aprašyta logika yra realizuota administratoriaus darbo aplinkoje
adresu https://mdv.vu.lt/admin
Svarbu - dėl saugumo priežasčių prieiga prie administratoriaus darbo aplinkos yra praleidžiama tik
iš konkrečių administratorių IP adresų.
1. Prisijungus prie administratoriaus darbo aplinkos matome pagrindinį langą.
Kairėje pusėje matomi papildomas administravimo funkcijas, tokias kaip naudotojų, administratorių
valdymas, dešinėje - viršuje aprašytų virtualių mašinų logika - du pirminiai VM atvaizdai (dar
vadinami golden-image), Windows ir Linux, iš kiekvieno kurių yra padaryta po tris skirtingo dydžio
naudotojo VM šablonai. Šablono VM disko dydį reprezentuoja skaičius pavadinimo pabaigoje (100,
150, 50 GB).
2. Kiekvienas iš naudotojo VM šablonų gali turėtų dukterines VM, kurios ir yra atiduodamos
konkrečiam naudotojui. Dukterinių VM skaičių bei naudotojus, kurie juo naudojasi matome prie
Naudotojo VM šablono stulpelyje "OS/būsena".
3. Paspaudus pliusiuką ženklą prie naudotojo VM šablono galima pamatyti dukterinių VM sąrašą.
Šios mašinos buvo sukurtos iš šablono mašinos ir dėl to jų diskai yra tarpusavyje susiję - jie neveiks
atskirai. Kuriant naują dukterinę VM jos diske bus rašomi tik skirtumai nuo VM šablono, kas leidžia
efektyviau išnaudoti hipervizoriaus diskinę vietą.
6
4. Atsidariusiame sąraše matome virtualias mašinas su jų unikaliai sugeneruotais pavadinimais,
taipogi, kokiam naudotojui jos priklauso, kokia OS bei pan. Kiekvieną iš jų galima priverstinai įjungti
arba išjungti.
5. Paspaudus ant virtualios mašinos pavadinimo gauname lentelę su dar daugiau informacijos, plius,
turime galimybę pakeisti pavadinimą arba priskirti VM kitam naudotojui/administratoriui.
7
6. Nors dirbant su Mokslininko darbo vieta naudotojai VM kuria patys, yra galimybė juos sukurti ir
atiduoti naudotojams ir administratoriui. Tam reikalingas meniu punktas "Kurti virtualias mašinas"
8
Pasirinkus VM tipą, hipervizorių, CPU, RAM ir kitus parametrus, galima sukurti kaip vieną, taip ir
keletą virtualių mašinų, kurios bus automatiškai sugeneruotos pagal nurodytus duomenis. Po to
kiekvieną iš jų bus galima priskirti konkrečiam naudotojui.
Pirminio VM atvaizdo kūrimas
Pirmiausia sukuriamas pradinis VM atvaizdas, dar žinomas kaip Golden Image. Pasirinkus meniu
punktą "Kurti virtualias mašinas" pasirenkamas VM tipas "Pirminis VM atvaizdas".
Pasirenkamas hipervizorius, bei kelias kur bus kuriamas VM ir jo diskas. Užpildomi laukai likę
laukai pagal diegiamos OS poreikius.
Kadangi šiam VM įdiegti bus reikainga ISO atvaizdas, tam reikia įgalinti opciją "Prikabinti ISO
atvaizdą" ir iš siūlomų atvaizdų pasirinkti norimą ISO atvaizdą.
Paspaudus mygtuką "Kuurti VM" mašina bus sukurta ir įjungta.
Atidarius naujai sukurto VM konsolę matosi, jog OS diegimas jau prasidėjęs
9
Toliau OS ir programinės įrangos diegimas vyksta įprasta tvarka.
Naudotojo VM šablono kūrimas
Naudotojo VM šablonas kuriamas iš paruošto pirminio VM atvaizdo. Baigus diegti pirminį VM
atvaizdą jis švariai išjungiamas OS priemonėmis.
Pasirinkus meniu punktą "Kurti virtualias mašinas" pasirenkamas VM tipas "Naudotojo VM
šablonas". Pasirenkamas hipervizorius kuriame VM bus kuriamas bei nurodomas šaltinis - anksčiau
sukurtas pirminis VM atvaizdas.
10
Atitinkamai pagal poreikį užpildomi laukai atitinkantys OS reikalavimus. Paspaudus mygtuką "Kurti
VM" sukuriamas Naudotojo VM šablonas kopijuojant mašinos kūrimo formoje nurodyto pirminio
VM atvaizdo diską. VM kūrimo metu matomas disko kopijavimo progresas.
Baigus kurti VM ją galima įjungti, patikrinti ar tvarkingai veikia OS bei įdiegta programinė įranga.
Esant poreikiui atlikti baigiamuosius konfigūravimo darbus, paleisti reikalingus skriptus ar atlikti
sysprep nuasmeninimą. Baigus darbus VM tvarkingai išjungiama OS priemonėmis.
Baigus tvarkyti naudotojo VM šabloną jis užrakinamas taip apsisaugant nuo netyčinių
administratoriaus veiksmų.
11
Naudotojo VM kūrimas
Naudotojas gali kurti VM pagal savo poreikius savitarnos portale, tačiau esant poreikiui MDV
administratorius gali sukurti naudotojo VM ir priskirti ją naudotojui.
Pasirinkus meniu punktą "Kurti virtualias mašinas" pasirenkamas VM tipas "Naudotojo VM"
Pasirenkamas hipervizorius kuriame VM bus kuriamas, pasirenkamas šaltinis - pageidaujamas
Naudotojo VM šablonas bei užpildomi kiti laukai pagal naudotojo, bei OS poreikius. Sukūrus
naudotojo VM jis rodomas kaip Naudotojo VM šablono nurodyto mašinos kūrimo metu dukterinė
MV .
12
Spragtelėjus ant Naudotojo VM pavadinimo galima jį užvadinti (užpildant laukelį "VM pavadinimas)
ir priskirti reikiamam naudotojui (laukelis "Priskirta").
Nuo šio momento VM yra matomas naudotojui savitarnos portale.
Pastabos
Pirminis VM atvaizdas kuriamas kaip tuščia mašina su thin provisioned (kietasis diskas
hipervizoriuje matomas kaip failas užimantis tiek vietos, kiek jos užima realūs failai virtualioje
mašinoje) disku.
Naudotojo VM šablonas kuriamas kopijuojant pirminio VM atvaizdo diską į naują vietą
hipervizoriaus failinėje sistemoje, todėl Naudotojo VM šablono disko failas užima tiek pat, kiek ir
Pirminės VM atvaizdo disko failas.
Naudotojo VM kuriamas darant naudotojo VM šablono kietojo disko failo snapshot`ą (momentinę
kopiją) ir visus pakeitimus rašant į atskirą disko failą. Tai leidžia akimirksniu kurti naudotojo VM`us
bei optimaliai išnaudoti diskinę vietą. Esant bent vienai dukterinei mašinai (Naudotojo VM)
negalima įjungti tėvinės mašinos (Naudotojo VM) jos neįšaldžius. Tai gali negrįžtamai sugadinti
visas dukterines mašinas ir jose esančius duomenis. Tam naudojamas tėvinės mašinos valdymo meniu
užrakinimo opcija:
13
Visus VM galima įšaldyti:
Visi pakeitimai padaryti esant įšaldytam VM yra panaikinami mašiną išjungus. Sekančio įjungimo
metu VM bus su toks pats koks buvo prieš įšaldymą.
MDV dashboard diegimas
Mokslininko darbo vieta susideda iš dviejų serverių - dashboard ir hipervizoriaus serverių. OS ir
programinės įrangos versijos buvo parinktos tokios, kad geriausiai atitiktų paskirties specifikas ir
poreikius - Ubuntu 18.04 LTS dashboard serveriui ir Debian 9.8 - hipervizoriui.
Dashboard diegimas
Įrankių diegimas
apt-get update
apt-get dist-upgrade
apt-get install htop atop ntpdate mc links2 bwm-ng apt-listchanges liblzo2-2 zlib1g-dev unzip
fail2ban
Instaliuojami paketai
apt-get install mariadb-server apache2 php git libapache2-mod-php php-mbstring php-gettext php-
ssh2 php-imagick php-mysql php-mail
Sukuriamas MariaDB naudotojas
mysql -u root -p
create database vdi;
CREATE USER 'vdi'@'localhost' IDENTIFIED BY '********';
GRANT ALL PRIVILEGES ON vdi.* TO 'vdi'@'localhost' IDENTIFIED BY '********';
Apache konfigūracija
Norint, kad Apache klientams nerodytų versijos bei operacinės sistemos detalių, keičiamos eilutės
faile: /etc/apache2/conf-available/security.conf
14
ServerTokens Prod
ServerSignature Off
Redaguojamas konfigūracinis failas:
vi /etc/apache2/sites-enabled/000-default.conf
Pakeičiama:
ServerName mdv.vu.lt
Virtualhost’o pabaigoje įkeliama ši konfigūracija
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
Konfigūruojamas HTTPS:Tai nukreips visus HTTP kreipinius į HTTPS.
a2ensite default-ssl
vi /etc/apache2/sites-enabled/default-ssl.conf
Pakeičiamas vardas:
ServerName mdv.vu.lt
Sukonfigūruojami sertifikatai:
SSLCertificateFile /root/cert/<server_cert_public_key>
SSLCertificateKeyFile /root/cert/<server_cert_private_key>
SSLCertificateChainFile /root/cert/<server_cert_chain>
Pataisoma SSL konfigūracija
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-
SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-
RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-
SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-
SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-
SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-
AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-
CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-
SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
Įjungiami moduliai:
a2enmod rewrite
a2enmod ssl
15
Simplesaml konfigūracija:
Alias /simplesaml /var/simplesamlphp/www
<Directory /var/simplesamlphp/www/>
Require all granted
</Directory>
VM rotavimo skriptas:
# VM rotavimo skripto apsauga
<Files "delete_old_client_vms.php">
Order Allow,Deny
Deny from all
</Files>
Ugniasienės skripto apsauga:
# Firewall apsauga
<Files "firewall.php">
Order Allow,Deny
# First hypervizor
Allow from 158.129.159.117
</Files>
Administracinės aplinkos apsauga:
Admin aplinkos apsauga
<Directory /var/www/html/admin/>
Order Allow,Deny
Allow from ***.***.***.***
</Directory>
PHP konfigūracijoje pakeičiama opcija, nurodanti, kiek laiko kuriamas socket'as.
vi /etc/php/7.0/apache2/php.ini
default_socket_timeout = 10
HTML5 konsolės diegimas
Konsole remiasi spice_html5 projektu, kurį galima rasti šiuo
adresu: https://github.com/freedesktop/spice-html5
Hipervizorių, esančių nepasiekiamoje iš išorės zonoje, pasiekimui, yra naudojamas projektas
websockify, kurį galim diegti kaip iš github (https://github.com/novnc/websockify), taip ir iš
repozitorijos.
Projektas websockify atlieka tarpininko tarp naudotojo naršyklės, kuriame paleidžiama Javascript
based HTML5 konsolė, funkciją, proxy'indamas nurodytą portą (pagal nutylėjimą tai 5959) į
reikiamą SPICE portą konkrečiame hipervizoriuje, pagal paduotą token naršyklės URL'e.
16
Visi schemoje dalyvaujantys komponentai atrodo taip:
TMP erdvė yra konfigūruojama MDV portalo konfigūracijoje:
Šioje vietoje automatiškai bus sukurtas aplankas kvm-vdi, kuriame portalas paleidžiant VM sukurs
atitinkamą Token failą. Šis aplankas turi būti nurodytas ir tarp Websockify paleidimo parametrų, kaip
ir sertifikatai. Visas jo paleidimo URL turi atrodyti taip:
/usr/bin/websockify --token-plugin TokenFile --token-source /opt/temp/kvm-vdi 5959 --cert=/root/cert/
mdv.vu.lt.crt --key=/root/cert/ mdv.vu.lt.key
Praktika rodo, kad geriau jį priregistruoti kaip systemd servisą. Tam reikia sukurti
failą: /etc/systemd/system/websockify.service
Jo turinys:
[Unit]
Description=Websockify proxy server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/websockify --token-plugin TokenFile --token-source /opt/temp/kvm-vdi 5959 --
cert=/root/cert/mdv.vu.lt.crt --key=/root/cert/mdv.vu.lt.key
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
17
systemctl daemon-reload
systemctl enable websockify.service
systemctl start websockify.service
Pastaba1 - TMP direktorija /opt/temp buvo pasirinta dėl to, kad pagal nutylėjimą Ubuntu OS
Apache servisas turi private TMP aplanką, atskirą nuo bendro /tmp. Tai gali būti pakeista keičiant
systemd konfigūraciją, tačiau, atnaujinimų metu opcija dažnai nusimuša ir tada dashboard serveris
rašo į vietą, nematomą Websockify, dėl ko neveikia konsolė.
Pastaba2 - Websockify servisui turi būti nurodytas pasirašytas SSL sertifikatas, norint užtikrinti
veikimą. Konsolės konfigūracijoje (run.js) turi būti pakeista eilutė:
'protocol': getURLParameter('protocol') || 'wss',
Tai leis naudoti SSL websockets protokole. Bendra konsolės konfigūracija turi atrodyti taip:
Tai pririša konsolę prie konkretaus hosto ir paslepia portą, plius, per URL paduodamą slaptažodį
pakeičia į "ssid", taip jį užmaskuojant.
MDV hipervizoriaus diegimas
Hipervizoriaus diegimas
Hipervizorius instaliuojamas su Debian arba Ubuntu, naudojant Python versiją 2. Mes
rekomenduojame instaliuoti naudojant Debian 9.
Instaliuojami paketai:
apt-get install qemu-kvm libvirt-daemon-system libvirt-dev libvirt-clients sudo
python python-requests virtinst socat libxml-xpath-perl
Senoms Debian versijoms paketai diegiami taip:
apt-get install qemu-kvm libvirt-daemon-system libvirt-dev libvirt-clients sudo
python python-requests virtinst socat libxml-xpath-perl
Jei kyla problemos su screenshot'ais, instaliuojamas papildomas softas jų darymui:
apt install spice-client-gtk
18
Jei naudojama Ubuntu, reikia pašalinti Apparmor, su kuriuo kyla problemų su virtualiais
snapshotais.
service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
reboot
Hipervizoriuje sukuriamas naudotojas, kuriuo dashboard aplinka prie jo jungsis:
useradd -s /bin/bash -m VDI
Jei naudotojo raktas dashboard serveryje dar nebuvo sugeneruotas, sugeneruojama taip:
su VDI
cd
ssh-keygen -t rsa
mkdir /var/hyper_keys
Naudotojui duodamos SUDO pilnos teisės, /etc/sudoers failą papildant:
VDI ALL=(ALL:ALL) NOPASSWD:ALL
Sugeneruotas raktas perkeliamas iš direktorijos /home/VDI/.ssh į direktoriją /var/hyper_keys,
uždedamos teisės, kad jį galėtų skaityti WEB serveris. Po to public raktas yra perkeliamas į
kiekvieną iš hipervizorių, į /home/VDI/.ssh/authorized_keys failą. Patikrinti ar viskas veikia galima
taip:
ssh -i /var/hyper_keys/id_rsa VDI@hypervisor_address
Jei prisijungiama be jokio paklausimo, viskas gerai.
Į kiekvieną hipervizorių perkeliamas folderis /usr/local/VDI. Ten yra skriptai, kurie yra paleidžiami
kuriant mašiną, ją paleidžiant, jų pagalba kaskart paleidžiant yra sugeneruojamas naujas SPICE
slaptažodis ir pan. Juose reikia sukonfigūruoti config failą, pakeičiant "tmp_snapshots" aplanką į tą,
kuris yra nurodytas dashboard serverio konfigūracijoje functions/config.php. Mūsų atveju
nurodoma /opt/temp. Taipogi, turi būti nurodytas resolvinamas adresas sekcijoje "address" ir
slaptažodis, sutampantis su nurodytu functions/config.php.
Po to systemd skriptas vdi-agent.service sukeliamas į /etc/systemd/system ir atliekamos šios
komandos:
systemctl daemon-reload
systemctl enable vdi-agent
systemctl start vdi-agent
SPICE klientai
Dėl saugumo priežasčių SPICE prievadai į hipervizorius yra praleidžiami tik iš to adreso, iš kurio
naudotojas jungiasi į savitarną. Hipervizoriuose skriptas prieigą atnaujina kas 5 minutes, specialiu
skriptu.
19
Pradžiai, sukuriamas naujas CHAIN ugniasienėje:
iptables -N spice_clients
iptables -A INPUT -j spice_clients
Vėliau chain papildo skriptas:
#!/bin/bash
# Skriptas, skirtas praleisti SPICE klientus, kvieciamas kas 5 minutes is crontab
# Clean everything in chain
/sbin/iptables -F spice_clients
# For i in cliensts allow Spice
URLS=`/usr/bin/wget -q -O -
'https://mdv.vu.lt/firewall.php?hv=h1.mdv.vu.lt&token=***********************************
*********'`
for i in `echo $URLS`; do
echo "Allow IP: $i"
IP=`echo $i | cut -d: -f1`
PORT=`echo $i | cut -d: -f2`
/sbin/iptables -A spice_clients -s ${IP} -p tcp --dport ${PORT} -j ACCEPT
done
Čia parametras "token" yra generuotas slaptažodis, perduodamas į skriptą iš saugumo sumetimų.
Skriptas paleidžiamas iš cron:
crontab -e
*/5 * * * * /root/allow_spice_clients.sh > /dev/null 2>&1