Kai esi vienintelis kompiuteristas kompanijoje, tenka ne tik programuot ar projektuot, bet ir paadministratoriaut. Specifinės programinės įrangos derinimas, diegimas ir konfigūravimas dažniausiai būna daug skausmingesnis nei tikiesi prieš pradėdamas darbą. Todėl labai naudinga dokumentuot savo žingsnius, kad palengvintum ateities užduočių atlikimą. Šito įrašo tikslas — atmintinė sau ir kitam, kaip nustatyti Apache serverio naudotojo autentikaciją per SSL.
Šiuo metu dažniausiai naudojamas žiniatinklio serveris Apache turi modulį apsaugoti katalogo turinį nuo pašalinių akių. Tai naudotojo autentikacijos modulis mod_auth. Kai internautas suveda puslapio adresą, kuris reikalauja autentikacijos, naršyklė atidaro jam dialogo langą, prašantį įvesti naudotojo vardą ir slaptažodį. Kitas būdas patekti į autentikacijos reikalaujantį puslapį yra naudotojo vardą ir slaptažodį, atskirtus dvitaškiu, bei su internetine eta gale, įrašyti į adreso eilutę tarp protokolo ir domeno vardo:
protokolas://naudotojas:slaptazodis@www.domenas.com/ka↵
talogas/failas.pletinys
Lankytojui įvedus teisingus prisijungimo duomenis, jam parodomas adresuotas informacinis puslapis, kuris gali būti tiek paprastas dokumentas (html, txt, pdf), tiek skripto (php, perl, python) sugeneruotas turinys, tiek parsiųstinas vykdomasis failas, tiek kitas biesas.
Reikia paminėti, kad naudotojo vardą ir slaptažodį, atskirtus dvitaškiu, naršyklė prieš siųsdama į serverį, užkoduoja base64 algoritmu, kuris serveryje atkoduojamas į grynąjį tekstą ir sulyginamas su užregistruotom prisijungimo sąskaitom. Deja gan lengvai naudotojo vardas ir slaptažodis gali būti nuskaitytas ir atsikoduotas tau nežinant kažkur pakelėj link serverio. Dėl šios priežasties saugumo vardan kartu su naudotojo autentikacija naudinga naudot SSL.
Kas yra SSL? Tai papildomas kompiuterių tinklo sluoksnis, užtikrinantis, kad persiunčiami duomenys bus užkoduoti ir tarpinės grandys, kaip DNS (domenų vardų serverių) administratoriai, negalės jų tiesiogiai perskaityti. Kaskart kai jungiamės prie internetinių banko sąskaitų ar kitų ypatingo saugumo reikalaujančių svetainių, dažniausiai suvedame “https://”, kur “s” nurodo saugų SSL jungimąsi, kurio perduodamo turinio smalsieji hakeriai nesupras. Komunikacijos saugumo sluoksnį įgyvendina Apačės modulis mod_ssl.
Jeigu abu moduliai jau yra Apache/modules kataloge, tuomet gali džiaugtis ir varom toliau. Priešingu atveju dar teks gerokai paprakaituot, kol juos susikompiliuosi.
Toliau užtikrink, kad moduliai mod_auth ir mod_ssl pakraunami kartu su Apache. Apache/conf/httpd.conf faile turi būti įrašytos (ir neužkomentuotos “#” ženklu) šios eilutės:
LoadModule auth_module modules/mod_auth.so
LoadModule ssl_module modules/mod_ssl.so
Jei serveryje naudoji PHP, gali pasitikrint, ar moduliai tikrai pasikrovė testinio failo su phpinfo(); funkcija išvesty susiradęs “mod_auth” ir “mod_ssl” prie “Loaded Modules” skilties.
Apache/conf/httpd.conf faile taip pat turi būti SSL konfigūracijos įterpimas:
<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>
Faile Apache/conf/ssl.conf reiktų standartiškai patalpint Alias ir Directory, arba Location, arba VirtualHost direktyvas. Detalių pasieškok kitur, nes pačiam dažniausiai tenka naudoti gudrią serverio administravimo programą, valdomą per naršyklę, kas leidžia kai kurias užduotis atlikti greičiau ir per daug nesigilinant į konfigūracines smulkmenas.
Norėsim nustatyti skirtingas naudotojų teises skirtingiems katalogams, o ne visam domenui. Todėl autentikacijos nustatymus rašysim į .htaccess failus atitinkamuose kataloguose, o ne į bendrą Apache/conf/httpd.conf nustatymų failą (ir ne į jo įtraukiamus konfigūracijos failus, kaip kad conf/ssl.conf). Taigi mums dar reikės aktyvuoti .htaccess failų dalyvavimą konfigūracijoje. Tai padaroma Apache/conf/ssl.conf nurodant
AllowOverride AuthConfig
arba, jei nori pasišvaistyti kompo atmintimi ir savo administravimo laisve:
AllowOverride all
Toliau naudotojo autentikacijos nustatymas. Jis susideda iš dviejų dalių: naudotojo sąskaitos sukūrimo ir katalogo teisių priskyrimo sukurtam naudotojui. Naudojų sąskaitos specialia komanda (pagalbine programa) htpasswd, sukuriamos administratoriaus pasirinktame faile, kuris privalo būti nepasiekiamas per žiniatinklį. Tarkim, naudotojus surašysim Apache/users/naudotojai. Rašom:
htpasswd -c /kelias/iki/Apache/users/naudotojai jonukas
Mūsų paklaus, kokį slaptažodį norime nustatyti Jonukui, po to paprašys pakartoti. Štai ir Jonuko sąskaita sukurta. Parametras -c komandoje reiškia, kad failas “naudotojai” dar neegzistuoja ir jį reikia sukurti. Kitų naudotojų sąskaitas sukuriame analogiškai, tik be parametro -c:
htpasswd /kelias/iki/Apache/users/naudotojai petriukas
htpasswd /kelias/iki/Apache/users/naudotojai maryte
htpasswd /kelias/iki/Apache/users/naudotojai onute
Jei atidarytume sąskaitų failą “naudotojai”, pamatytume skirtingose eilutėse išsaugotas naudotojų vardų ir md5 algortimu užkoduotų slaptažodžių poras, maždaug taip:
jonukas:p0wTkpxYnO/9YZYfTlAM..
petriukas:skfow[9kp25ppxa33goz
maryte:h7gmtUxbG.4w3QKkCzCBs0
onute:IsLgWauXXnx9BYTT0Mchm1
Kas nežino, md5 algoritmas koduoja tik į vieną pusę — užkoduoto slaptažodžio atkoduoti praktiškai nebeįmanoma. Kai asmuo jungiasi savo naudotojo vardu bei slaptažodžiu prie apsaugoto katalogo, jo slaptažodis užkoduojamas ir sulyginamas su esančiu sąskaitų faile. Bet kodėl gi tuomet naudotojų sąskaitų failą reikia laikyti nuošaliai nuo internautų akių ir pirštų? Gudrieji hakeriai dažniausiai turi duomenų bazes su dažniausiai pasitaikančių slaptažodžių/angliškų žodžių ir jų md5 kodų porom. Jiems tereikia paleisti paiešką, ieškant md5 kodo “IsLgWauXXnx9BYTT0Mchm1″, ir štai vos per kelias sekundes jiems prieš akis Onutės slaptažodis. Taigi būkime budrūs ir gudrūs.
Dabar bandysim nustatyti katalogų teises skirtingiems naudotojams. Tarkim, kad Apačė nustatyta taip, kad Apache/httpsdocs kataloge visi duomenys pasiekiami per SSL. Apache/httpsdocs kataloge susikuriame pakatalogį “slapta”, kuriame kavosim slaptus failus, o jo viduje pakatalogius “tik-mergaitems”, “tik-berniukams” ir “visiems-pabiruciams”. Kataloge Apache/httpsdocs/slapta susikuriame failą .htaccess ir jo viduje parašom:
AuthName "Kas paslepta -- to nerasi"
AuthType Basic
AuthUserFile /kelias/iki/Apache/users/naudotojai
require valid-user
Kas čia kur ir kaip? AuthName apibūdina apribojimų karalystę. Naudotojo vardo ir slaptažodžio reikalaujantis dialogo langas, bandant pasiekti failus iš katalogo “slapta” arba jo pakatalogių, bus pavadintas “Kas paslepta — to nerasi”. AuthType apibūdina autentikacijos tipą. Jų yra du, bet tik “Basic” yra šiuo metu standartizuotas, tai apie kitą gali nė nekvaršint galvos. AuthUserFile nurodo failą, iš kurio nuskaitomos naudotojų sąskaitos. Skirtingiems domenams ir netgi katalogams gali naudoti skirtingus naudotojų sąskaitų failus. Paskutinė eilutė reiškia, kad katalogo turinį gali pasiekti bet kuris naudotojas, užregistruotas naudotojų sąskaitų faile.
Einam toliau. Kataloge Apache/httpsdocs/slapta/tik-berniukams sukuriame failą .htaccess ir jame įrašome:
AuthName "Reikejo berniukams beribio dangaus..."
AuthType Basic
AuthUserFile /kelias/iki/Apache/users/naudotojai
require user jonukas petriukas
Analogiškai kataloge Apache/httpsdocs/slapta/tik-mergaitems sukuriame failą .htaccess ir jame įrašome:
AuthName "Tarp musu mergaiciu (ir Petriuko nepamirskit)"
AuthType Basic
AuthUserFile /kelias/iki/Apache/users/naudotojai
require user maryte onute petriukas
Direktyva require user su toliau išvardintais naudotojų vardais, atskirtais tarpais, nurodo, kas turės teisę pasiekti apriboto priėjimo katalogą.
O kaip su teisių paveldėjimu pakatalogiuose? Į apribojimo karalystę patenka visi pakatalogiai, kurie neturi nurodytos savo karalystės. Pavyzdžiui, Apache/httpsdocs/slapta/visiems-pabiruciams taikomos lygiai tokios pat priėjimo teisės, kaip ir tėvukui Apache/httpsdocs/slapta, t.y. tuose kataloguose esančius failus pasiekia visi prisijungę registruoti naudotojai. Tuo tarpu, katalogo Apache/httpsdocs/slapta/tik-mergaitems ir jo pakatalogių, nors tu ką, neprieina Jonukas (bei, žinoma, neturintys naudotojo sąskaitos); analogiškai katalogo Apache/httpsdocs/slapta/tik-berniukams pornuškės nemato Marytė ir Onutė.
Pats įdomumas prasideda, kai pradedi žaisti su žiniatinklio tarnybom (ach ta lietuvybė – webservisais). Kai socket’ais užmezgi autentikuotą ir apsaugotą prisijungimą, nusiunti klausimų ir gauni atsakymų. Bet tai ne šiam kartui. Beje, nenustebk, kad tavo skirtingi Apačės komponentai (konfigūracija, httpsdocs, moduliai, vykdomieji failai) bus patalpinti skirtinguose failų sistemos kataloguose, nebent naudoji ką nors iš *AMP srities (WAMP, LAMP ir MAMP yra konfigūraciniai paketai interneto svetainių kūrimui konkrečioje operacinėje sistemoje, susidedantys iš Apache žiniatinklio tarnybinės stoties, MySQL duomenų bazės ir PHP programavimo kalbos). Gal visa šita nuobodybė pravers ne tik man? Pastabos ir kritika – prašom!