Jednoduché obmedzenie prístupu pomocou hesla. Kontrola fungovania súboru .htaccess na serveri. Rozhovor so serverom pod lupou

Keď prevádzkujete svoju vlastnú webovú stránku, pravdepodobne existujú oblasti, ku ktorým chcete návštevníkom obmedziť prístup. Webové aplikácie majú svoje vlastné metódy autentifikácie a autorizácie, ale samotný webový server možno použiť na odmietnutie prístupu, ak sú iné metódy nedostatočné alebo nedostupné.

V tomto článku sa dozviete, ako nastaviť autentifikáciu heslom na webovom serveri Apache spustenom na Ubuntu 16.04.

Požiadavky

Pred pokračovaním v ďalších krokoch sa uistite, že máte prístup k Server Ubuntu 16.04.

Na dokončenie pokynov budete potrebovať aj nasledujúce:

  • používateľ, ktorý môže spúšťať príkazy sudo na vašom serveri;
  • webový server Apache;
  • web, na ktorom je nainštalovaný certifikát SSL (napríklad Let’s Encrypt).

Ak máte všetko vyššie uvedené, prihláste sa na server ako používateľ s právami sudo a prejdite na prvý krok.

Krok 1: nainštalujte balík pomocou nástrojov Apache

Budete potrebovať nástroj s názvom htpasswd, ktorý je súčasťou balíka apache2-utils. Používa sa na vytvorenie súboru, ako aj používateľské meno a heslá, ktoré sa použijú na prístup do obmedzeného zobrazenia. bežných používateľov obsahu.

Zadajte nasledujúce príkazy:

$ sudo apt-get aktualizácia $ sudo apt-get inštalácia apache2-utils

Krok 2: vytvorte súbor s heslami

Teraz môžete použiť príkaz htpasswd. Pomocou neho budete musieť vytvoriť súbor s heslami, ktoré bude Apache používať na overovanie používateľov. Na tieto účely by ste mali vytvoriť skrytý súbor s názvom .htpasswd v adresári nastavení /etc/apache2.

Pri prvom použití tohto nástroja budete musieť pridať prepínač -c do príkazu, aby ste mohli vytvoriť zadaný súbor. Na konci príkazu musíte zadať používateľské meno ( sinatra V v tomto príklade) - je to potrebné na vytvorenie nový vstup vnútri súboru:

$ sudo htpasswd -c /etc/apache2/.htpasswd sinatra

Budete požiadaní o heslo a potvrdenie pre vytvoreného používateľa.

Ak chcete pridať ďalších používateľov (napríklad other_user), použite rovnaký príkaz, ale bez prepínača -c:

$ sudo htpasswd /etc/apache2/.htpasswd iný_používateľ

Pozrite si obsah tohto súboru:

$ cat /etc/apache2/.htpasswd

Pre každý záznam sa zobrazí používateľské meno a zašifrované heslo:

Výstup sinatra:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ other_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Krok 3: Nastavte autentifikáciu heslom na Apache

Teraz máte súbor s používateľskými menami a heslami vo formáte, ktorý Apache dokáže prečítať.

Ďalším krokom je nakonfigurovať Apache na kontrolu tohto súboru vždy, keď sa chystá udeliť prístup k chránenému súboru. zvedavými očami obsahu. Môžete to urobiť dvoma spôsobmi: buď priamo vo virtuálnom hostiteľskom súbore lokality, alebo pridaním súborov .htaccess do adresárov, ku ktorým chcete obmedziť prístup.

Vo všeobecnosti je lepšie použiť prvú možnosť, to znamená použiť súbor virtuálneho hostiteľa. Ak však potrebujete poskytnúť neprivilegovaným používateľom možnosť spravovať svoje vlastné obmedzenia prístupu, presadzovať obmedzenia kontroly verzií rovnakým spôsobom ako na stránke alebo máte webové aplikácie, ktoré už používajú .htaccess na iné účely, možno budete chcieť ísť s poslednými spôsobmi.

To znamená, že si vyberte cestu podľa svojich požiadaviek.

Cesta 1 (preferovaná): nakonfigurujte autorizáciu prostredníctvom virtuálneho hostiteľa

Prvým spôsobom je úprava Nastavenia Apache a pridať ochranu heslom k virtuálnemu hostiteľovi. To tiež zlepší výkon, pretože to eliminuje potrebu čítania distribuovaných súborov nastavení. Táto cesta vyžaduje prístup k nastaveniam, ktoré nie sú vždy dostupné, ale ak máte prístup, potom je táto cesta vhodnejšia.

Ak chcete začať, otvorte súbor virtuálneho hostiteľa, ku ktorému chcete obmedziť prístup. Napríklad v túto príručku Použije sa súbor 000-default.conf, ktorý obsahuje predvoleného virtuálneho hostiteľa nainštalovaného pomocou balíka Apache na Ubuntu.

$ sudo nano /etc/apache2/sites-enabled/000-default.conf

Vo vnútri bude súbor s nekomentovanými riadkami vyzerať asi takto:

Autentifikácia prebieha na základe adresárov. Pre nastavenie autentifikácie je potrebné umiestniť adresár, do ktorého chcete zakázať prístup, do bloku . V nižšie uvedenom príklade bude odmietnutý prístup do koreňového adresára dokumentu, ale môžete vybrať konkrétny adresár:

ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog $(APACHE_LOG_DIR)/error.log CustomLog $(APACHE_LOG_DIR)/access.log kombinované

Vo vnútri adresárového bloku zadajte, že chcete nastaviť základné overenie. Pre stĺpec AuthName musíte vybrať meno, ktoré sa zobrazí používateľovi pri vyžiadaní autentifikačných údajov. V stĺpci AuthUserFile musíte zadať súbor s heslom, ktoré bolo vytvorené skôr, aby ho Apache mohol nájsť. Budete tiež potrebovať platného používateľa, ktorý má prístup k údajom; inými slovami, každý, kto môže potvrdiť svoju identitu pomocou hesla, bude povolený do adresára.

ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog $(APACHE_LOG_DIR)/error.log CustomLog $(APACHE_LOG_DIR)/access.log kombinované AuthType Basic AuthName "Obmedzený obsah" AuthUserFile /etc/apache2/.htpasswd Vyžadovať platného používateľa

Po úprave súbor uložte a zatvorte.

Pred reštartovaním servera skontrolujte nastavenia pomocou nasledujúceho príkazu:

$ sudo apache2ctl configtest

Ak je všetko v poriadku a vidíte Syntax OK, reštartujte server nová politika prístup so žiadosťou o heslo nadobudol platnosť. Ak to chcete urobiť, zadajte nasledujúce príkazy:

Teraz je adresár, ktorý ste určili predtým, chránený heslom.

Apache môže použiť súbory .htaccess na poskytnutie prístupu k niektorým nastaveniam, ktoré môžete nastaviť prostredníctvom adresára obsahu. Pretože Apache bude pristupovať k obsahu týchto súborov pri každej žiadosti, ktorá obsahuje tento katalóg, čo môže negatívne ovplyvniť výkon, je vhodnejší prvý spôsob, ale ak už používate súbory .htaccess, alebo potrebujete, aby neprivilegovaní používatelia mohli samostatne spravovať obmedzenia prístupu, potom je v tomto prípade použitie súborov .htaccess jasné a logické. .

Ak chcete aktivovať ochranu heslom pomocou súborov .htaccess, otvorte hlavné konfiguračný súbor Apache:

$ sudo nano /etc/apache2/apache2.conf

Ďalej nájdite blok pre adresár /var/www, ktorý obsahuje koreňový adresár dokumentu. Povoľte podporu pre súbory .htaccess zmenou hodnoty direktívy AllowOverride z „None“ na „All“ – v tomto prípade server povolí všetky direktívy súboru .htaccess:

. . . Možnosti Indexy FollowSymLinks AllowOverride All Vyžadovať udelené všetky . . .

Potom súbor uložte a zatvorte.

Teraz musíte pridať súbor .htaccess do adresára, ku ktorému chcete obmedziť prístup. V tomto návode bude ako príklad odmietnutý prístup ku koreňovému adresáru celého dokumentu (t. j. celej lokalite), ktorý sa nachádza na adrese /var/www/html, ale tento súbor môžete umiestniť do ľubovoľného adresára, ktorý chcete obmedziť prístup k:

$ sudo nano /var/www/html/.htaccess

V tomto súbore zadajte, že chcete nastaviť základné overenie. Pre stĺpec AuthName musíte vybrať meno, ktoré sa zobrazí používateľovi pri vyžiadaní autentifikačných údajov. V stĺpci AuthUserFile musíte zadať súbor s heslom, ktoré bolo vytvorené skôr, aby ho Apache mohol nájsť. Budete tiež potrebovať platného používateľa, ktorý má prístup k údajom; inými slovami, každý, kto môže potvrdiť svoju identitu pomocou hesla, bude povolený do adresára:

AuthType Basic AuthName "Obmedzený obsah" AuthUserFile /etc/apache2/.htpasswd Vyžadovať platného používateľa

Uložte a zatvorte súbor. Reštartujte server, aby sa všetky zmeny týkajúce sa ochrany vybratého adresára heslom prejavili. Potom použite príkaz systemctl status, aby ste sa uistili, že reštart bol úspešný:

$ sudo systemctl reštart apache2 $ sudo systemctl stav apache2

Krok 4: skontrolujte ochranu autentifikácie

Ak sa chcete uistiť, že sú vaše údaje chránené, skúste k nim pristupovať v prehliadači. Malo by sa vám zobraziť okno so žiadosťou o vaše používateľské meno a heslo, ktoré bude vyzerať asi takto:

Ak zadáte správne údaje, budete môcť vidieť požadované údaje. Ak zadáte nesprávne informácie alebo kliknete na tlačidlo Zrušiť, zobrazí sa chybová stránka (Neautorizované), ktorá označuje, že neovereným používateľom je odmietnutý prístup:


Záver

Ak ste dokončili všetky kroky uvedené v tejto príručke, vaša lokalita má teraz základné overenie. Nezabúdajte však ani na ďalšie spôsoby ochrany pred neoprávneným prístupom k vašim údajom, ako sú SSL certifikáty a používanie SSH.

Ak chceš ak chcete vpustiť viac ako jednu osobu, budete musieť vytvoriť súbor skupiny, ktorý priradí názvy skupín k zoznamu používateľov v tejto skupine. Formát tohto súboru je veľmi jednoduchý a môžete ho vytvoriť pomocou svojho obľúbeného editora. obsah súboru bude vyzerať takto:

Názov skupiny: rbowen dpitts sungo rshersey

To je len zoznam členov skupiny v dlhom rade oddelenom medzerami.

Ak chcete pridať používateľa do už existujúceho súboru hesiel, zadajte:

htpasswd /usr/local/apache/passwd/passwords dpitts

Dostanete rovnakú odpoveď ako predtým, ale bude pripojená k existujúcemu súboru, a nie k vytvoreniu nového súboru. (Príčinou -c je vytvorenie nového súboru s heslami).

Mod_auth_basic a mod_authz_host, ktoré obsahujú ďalšie informácie o tom, ako to všetko funguje. Smernica môže tiež pomôcť pri zjednodušení určitých konfigurácií autentifikácie.

Rôzne šifry podporované Apache pre autentifikačné údaje sú vysvetlené v Šifrovanie hesiel.

A možno si budete chcieť pozrieť návod na riadenie prístupu, ktorý pojednáva o množstve súvisiacich tém.

Transparentná téma autorizácie v používaní OTRS Aktívny adresár vždy populárne. A keďže natívne prostredie pre OTRS je *nixové prostredie, prvou položkou v zozname je nastavenie transparentnej autorizácie webovým serverom Apache používateľov z AD domény. Kvôli nedávnej aktualizácii systému a jeho presunu na iný server som si opäť musel prejsť tŕnistú cestu. Ako sa ukázalo, existuje výrazne kratší a jednoduchší spôsob, ako je opísané v odkazoch v mojom. Všetky akcie sa vykonávajú z konzoly servera s Apache a nevyžadujú žiadnu výmenu súborov, kopírovanie a vkladanie s radičom domény a iné odpadky, zaznamenávam to do pamäte a na pomoc kolegom.

Pozor! Tieto akcie riešia problém transparentnej autorizácie užívateľov z AD domény do Webový server Apache v prostredí Ubuntu 16.04. Neviem, či riešia nejaké iné problémy (napríklad autorizáciu v konzole pomocou účtu od AD), nekontroloval som. Neviem, či riešenie bude fungovať na inom Linuxe, netestoval som ho.

Tak, poďme.

Počiatočná poloha

  • Čerstvo nainštalovaný Ubuntu Server 16.04. Názov servera ubuntuadmember, položka DNS je prítomná.
  • Nainštalované balíky Apache a Perl (vrátane modulu Perl pre Apache)
  • Apache je nakonfigurovaný na vykonávanie skriptov v jazyku Perl
  • Všetky nižšie uvedené príkazy sa vykonávajú ako root, aby sa nevytvorilo trvalé sudo

Ak chcete skontrolovať, či je všetko pripravené, umiestnite tento skript napríklad do /var/www/cgi-bin/test.pl a nakonfigurujte ho tak, aby bol prístupný na adrese http://ubuntuadmember/cgi-bin/test. pl. Skript zobrazuje všetky serverové premenné a prvý riadok konkrétne zobrazuje premennú REMOTE_USER, aj keď je prázdna. Bude sa to hodiť neskôr.

#!/usr/bin/perl použite prísne; používať varovania; print qq(Typ obsahu: text/obyčajný\n\n); vytlač "REMOTE_USER -> $ENV(REMOTE_USER)\n\n"; foreach (klávesy %ENV)( tlač "$_ -> $ENV($_)\n"; )

Ak všetko funguje správne, dostanete niečo takéto:

Upozorňujeme, že premenná REMOTE_USER je prázdna (v všeobecný zoznam vôbec neexistuje), t.j. Pripojenie nie je pre server autorizované, anonymné. Vylúčime to.

Nainštalujte požadované balíčky

Budeme potrebovať balíčky krb5-user na podporu autorizácie Kerberos v systéme, libapache2-mod-auth-kerb na podporu autorizácie Kerberos v Apache a msktutil vytvoriť počítačový účet a všetko, čo súvisí s AD. Poďme si ich nainštalovať:

Inštalácia Apt-get krb5-user libapache2-mod-auth-kerb msktutil

Nastavenie pripojenia k AD

Počiatočné údaje o AD:

  • Doména, napríklad s názvom laboratórium.miestne
  • Radič domény 1 s názvom dc1.lab.local
  • Radič domény 2 s názvom dc2.lab.local

Musíte upraviť súbor /etc/krb5.conf a pridať riadky do nasledujúcich blokov:

Default_realm = LAB.LOCAL LAB.LOCAL = ( kdc = dc1.lab.local kdc = dc2.lab.local default_domain = lab.local admin_server = dc1.lab.local ) .lab.local = LAB.LOCAL lab.local = LAB .LOCAL

Áno, je to tak, rešpektujúc veľkosť písmen. Pôvodný obsah /etc/krb5.conf v zásade nie je potrebný, ale nechal som ho. poverčivosť?

Vytvorte si počítačový účet v AD

Počiatočné údaje

  • Máte účet s právami na vytváranie nových počítačových účtov. Nech sa volá [e-mail chránený]
  • V AD nie je žiadny počítačový účet
  • Na prácu s OTRS plánujete použiť adresu, ktorá sa zhoduje s názvom servera. V našom prípade názov servera ubuntuadmember, adresa OTRS http://ubuntuadmember/otrs/index.pl

POZOR. V iných prípadoch to môže byť potrebné dodatočné akcie, a neviem, ktoré presne.

Prihláste sa do AD pomocou svojho účtu [e-mail chránený]

Kinit-V [e-mail chránený]

Ak nie sú žiadne chyby, skontrolujte:

Vytvorte si počítačový účet

Msktutil -c -s host -s HTTP -s HTTP/ubuntuadmember / --computer-name ubuntuadmember --server dc1.lab.local

Pozrime sa na tento príkaz podrobnejšie:

  • Prepínač -c určuje, že musíte vytvoriť počítačový účet.
  • Prepínače -s určujú, aké hodnoty sú potrebné v atribúte servicePrincipalName účtu počítača. Ak nič nešpecifikujete, potrebné riadky s predponou HTTP tam nebudú.
  • Prepínač --computername určuje názov konta počítača. Môžete to preskočiť, potom bude názov zodpovedať systémovému názvu servera.
  • Kľúč --server určuje názov radiča domény, na ktorom sa má vytvoriť účtu. Môžete to preskočiť, potom sa pokúsite určiť meno sami.

!!! Pozor!!! Pozor!!! Pozor!!!
Pomôcka msktutil má prepínač –verbose, ktorý je navrhnutý tak, aby výstup výstupu pomôcky na obrazovke bol „pre človeka čitateľnejší“. Verzia nástroja x64 však obsahuje chybu, pri ktorej sa spúšťanie pomocou klávesu –verbose zastaví s chybou, ale bez nej funguje správne! Zdá sa, že vo verzii x86 nie je žiadna chyba. Nepodliehajte tomuto lacnému triku, nestrácajte čas ako ja.

Ak všetko fungovalo, účet by sa mal objaviť v AD v kontajneri Computers, v našom prípade ubuntuadmember.

Budeme vystavovať potrebné práva do súboru s kľúčmi

Chown root.www-data /etc/krb5.keytab chmod 0640 /etc/krb5.keytab

Nakonfigurujme Apache na autorizáciu

POZOR. Nasledujúce nastavenia povoliť autentifikáciu Kerberos pre celú predvolenú lokalitu. Ak to potrebujete zapnúť jemnejšie, fajčite manuály.

Upravme súbor /etc/apache2/sites-enabled/000-default.conf a pridajte predďalší blok:

AuthType Kerberos AuthName "Prihlásenie Kerberos" KrbMethodK5Passwd mimo Krb5Keytab /etc/krb5.keytab KrbServiceName Vyžadovať platného používateľa

Označené červenou farbou:

  • /etc/krb5.keytab— predvolená cesta k súboru kľúča. Ak chcete zmeniť, nezabudnite presunúť aj súbor
  • HTTP/ [e-mail chránený] - musí sa presne zhodovať s názvom počítača a doménou

Po vykonaní zmien musíte reštartovať Apache

Reštart služby apache2

Nastavenie je dokončené

Ak všetko fungovalo, volaním http://ubuntuadmember/cgi-bin/test.pl by sa mal zobraziť takýto obrázok (snímka obrazovky zo skutočného servera, preto je cenzurovaná). Venujte pozornosť REMOTE_USER, existuje doménový účet vo formáte username@DOMAIN. Ak voláte z doménového stroja a od doménového užívateľa a prehliadač je nakonfigurovaný (stránka je v intranetovej zóne), autorizácia prebehne transparentne bez akýchkoľvek otázok. Inak sa to len objaví štandardná požiadavka zadajte svoje prihlasovacie meno a heslo.

Sakra, chcel som, aby to bolo kratšie, ale aj tak sa ukázalo, že je to dlhé. Skúsim znova:

### inštalačné moduly apt-get install krb5-user libapache2-mod-auth-kerb msktutil ### upraviť súbor /etc/krb5.conf pre vaše AD nano /etc/krb5.conf ### prihlásenie s oprávneniami správcu AD kinit - V [e-mail chránený]### vytvoriť účet počítača msktutil -c -s host -s HTTP -s HTTP/ubuntuadmember / --computer-name ubuntuadmember --server dc1.lab.local ### zmeniť povolenia na súbore kľúčov chown root.www-data / etc/krb5.keytab chmod 0640 /etc/krb5.keytab ### upraviť konfiguráciu apache nano /etc/apache2/sites-enabled/000-default.conf ### reštartovať službu apache apache2 reštart ### POUŽÍVAŤ a UŽÍVAŤ

Wow, to je oveľa lepšie! Komentáre/otázky/doplnky píšte do komentárov.

Pomocou štandardu moduly Apache, pri pokuse o prístup je možné od používateľa vyžiadať používateľské meno a heslo konkrétnu stránku alebo katalógu. Prístup bude povolený, ak sa prihlasovacie meno a heslo nachádzajú v špeciálnom súbore.

Vytvorenie súboru s heslom

Súbor poverení sa zvyčajne nazýva .htpasswd a nachádza sa v adresári, ku ktorému musí byť obmedzený prístup. V predvolenom nastavení Apache zakazuje prístup ku všetkým súborom, ktoré začínajú .ht, takže súbor s heslami je ako súbor .htaccess, nemôže čítať žiadny návštevník vašej stránky.

Každý riadok súboru obsahuje údaje o jednom používateľovi. Prihlasovacie meno a šifrované heslo sú oddelené dvojbodkou. Príklad:

Správca:YFC5nYLiUI2ig vasya:bnqw1eZHP2Ujs

Na šifrovanie hesiel sa používa utilita htpasswd, ktorý sa dodáva spolu s Apache. Na vytvorenie nový súbor s údajmi o
užívateľ admin, zadajte príkaz:

$ htpasswd -c .htpasswd admin

Ak chcete pridať už existujúci súbor Použitý príkaz je:

$ htpasswd .htpasswd vasya

Po spustení vás obslužný program dvakrát požiada o zadanie hesla a ak sa zhodujú, pridajú sa údaje používateľa.

Obmedzenie prístupu

Teraz, aby ste povolili požiadavku na autorizáciu pri pokuse o prístup, musíte vykonať zmeny v konfiguračnom súbore alebo v súbore .htaccess. Pripomínam ti to využitie súboru .htaccess nežiaduce, pretože znižuje výkon servera.

AuthType Basic AuthName "Administratívna zóna" AuthUserFile /var/www/example.com/admin/.htpasswd Vyžadovať platného používateľa

Budete musieť zmeniť cestu k adresáru (Directory), cestu k súboru s heslom (AuthUserFile) a reťazec výzvy (AuthName), ktorý sa zobrazí používateľovi pri výzve na zadanie hesla. Význam ďalších smerníc zistíte z dokumentácie Apache.

Po vykonaní zmien v konfiguračnom súbore nezabudnite reštartovať Apache.

Poznámky

Tento príklad ukazuje najjednoduchšiu možnosť obmedzenia prístupu. Vo všeobecnosti sú možnosti autentifikačného systému Apache oveľa širšie. Používatelia môžu byť napríklad rozdelení do skupín, heslá sú uložené v databáze alebo vyžiadané cez špeciálny protokol z iných serverov. Odporúčame, aby ste sa oboznámili so všetkými funkciami v dokumentácii Apache.

Príklad ukazuje najjednoduchší typ Overenie - Základné. Mali by ste si uvedomiť, že v tomto prípade sa heslo prenáša z klienta na server v jasnej, nezašifrovanej forme. Ak vám to nevyhovuje, môžete použiť iný typ autentifikácie alebo protokol HTTPS.