Množí se tady dotazy na triviálnosti kolem apache2.
Občas se až divím jak někdo může vymýšlet takové složitosti.
Proto zazáložkuji tento topic kde se bude řešit idální nastavení webserveru.
Neřikám, že mám nejlepší nejekonomičtější a bůhvíco nej řešení, ale moje řešení funguje.
Pokud někdo bude mít lepší řešení, můžeme jej prodiskutovat a případně doplnit.
out-of-box LAMP server s automatickými subdoménamisudo apt-get install tasksel
sudo tasksel
Vybrat LAMP server. Teď by mělo vše včetně PHP a MySQL fungovat, pokud jsme zvyklí na PHPMyAdmina přiinstalujeme ho.
sudo apt-get install mysql-server phpmyadmin
Pro apache2 ještě mod_rewrite:
sudo a2enmod rewrite
a vhost_alias:
sudo a2enmod vhost_alias
Co je v /etc/apache2/sites-enabled/default je vhodné zazálohovat a přepsat:
sudo mv /etc/apache2/sites-enabled/default ~/apache2-default.backup
Pak nakopírovat toto pro každou doménu do /etc/apache2/sites-enabled/default, tedy:
sudo nano /etc/apache2/sites-enabled/default
a přepsat tímto:
<VirtualHost *:80>
ServerName *
ServerAdmin napis@admin.ovi
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domena1.eu
RewriteRule (.*) http://www.domena1.eu$1 [R=301,QSA,L]
RewriteCond %{HTTP_HOST} ^domena2.com
RewriteRule (.*) http://www.domena2.com$1 [R=301,QSA,L]
VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
</VirtualHost>
Doména se pak překládá takto (kdysi jsem to tady řešil):
http://subdomena.domena.tld/index.php/var/www/domena.tld/subdomena/index.php
Takže všichni zdejší "poskytovatelé" můžou chrootnout do /var/www/domena.tld uživatele a ten si jednoduchým vytvořením adresáře www a subdomena může vytvářet subdomény.
Pokud chceme mít přístup z webu na naší doméně do phpmyadmina, tak stačí udělat jednoduchý link:
sudo ln -sf /usr/share/phpmyadmin /var/www/domena.tld/mysql
Nakonec teda ještě restart/reload:
sudo service apache2 restart/reload
SFTP CHROOTFTP jako takové je kopa *** a je pro holky ^^
FTPeS pomůže, ale jednodušší mi přijde SFTP.
Následující postup není pro zelenáče a pokud to jen bezhlavě zkopírujete tak Bill zabije koťátko.
Je potřeba si nainstalovat SSH server, pokud se připojíte SSHčkem, pravděpodobně to bude bez problémů.
V /etc/ssh/sshd_config zakomentujeme řádek: Subsystem sftp /usr/lib/openssh/sftp-server
a nahradíme řádkem: Subsystem sftp internal-sftp
Nakonec konfigu přidáme ještě pravidlo pro odchyt skupiny sftp a její chrootnutní do domovského adresáře:
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Pro uživatele, které chceme chrootovat si vytvoříme skupinu sftp
sudo addgroup sftp
Teď tedy koupíme doménu google.cz a budeme jí chtít nabídnout externímu webmasterovi ke správě.
/var/www/google.cz/ bude domovský adresář pro uživatele google a je potřeba podstoupi nějakou rutinu.
sudo mkdir /var/www/google.cz
sudo useradd -d /var/www/google.cz google
sudo passwd google
sudo usermod -s /bin/false google
sudo usermod -g sftp google
chown root:root /var/www/google.cz
chown google:sftp -R /var/www/google.cz
Přístup na sftp přes nautilusOtevřeme nautilus a Soubor → Připojit se k serveru
Nebo Místa → Připojit se k serveru
Typ služby: SSH
Server: DNS/IP serveru
Uživatelské jméno: google
Připojit a zadat heslo, doporučuji vytvořit záložku
Přístup na sftp přes filezilluAplikace → Centrum softwaru pro Ubuntu → hledat: filezilla → nainstalovat
Aplikace → Internet → FileZilla
Soubor → Správce míst
Nové místo:
Hostitel: DNS/IP serveru
Server Type: SFTP - SSH File Transfer Protocol
Logon Type: Normální
Uživatelské jméno: google
Heslo: *****
Spojit
Pak je možné exportovat i importovat pomocí pravého kliku na příslušné připojení.
SSL & HTTPS & CACA - Certification Authority
Trocha teorie. Jde o asymetrické šifrování.
Každý účastník komunikace má soukromý a veřejný klíč.
Veřejný klíč je přístupný každému, oukromý klíč jen vlastníkovi a jeho kompromitace je nežádoucí.
Jak to funguje?
Veřejným klíčem něco zašifruju [pepa → qwertzuiop] a vstupní řetězec z toho dostanu
jen za použití soukromého klíče (vázaného na ten veřejný) [qwertzuiop → pepa].
Chápeme ne?Pokud budu chtít pepovi poslat zprávu, vezmu jeho veřejný klíč. Zprávu zašifruju jeho veřejným klíčem a pošlu mu to. Když pepa získá zašifrovanou zprávu dokáže jí pomocí svého soukromého klíče dešifrovat. Proto je důležité své soukromé klíče chránit!!! Nikdo jiný nemůže zprávu zašifrovanou veřejným klíčem rozšifrovat bez soukromého klíče párovaného na veřejný.
Tohle je taky jasný ne?Funguje to i obráceně, můžu svým soukromým klíčem zašifrovat třeba md5 součet veřejného klíče někoho jiného (+ nějaká data = SSL certifikát) a ten si toto podepsání ověří dešifrováním pomocí mého veřejného klíče. Takhle funguje podepisování CAček. Existuje jeden "rootovský" pár klíčů a od toho jsou hiearchicky odvozeny všechny ostatní. Root podepíše CAčka jako VeriSign a ty potom za velké peníze nabízí podepisování našich klíčů.
Pokud budeme chtít být konkrétnější, tak si představíme reálnou situaci:
Handshake: Klient/Uživatel pošle požadavek na server, že chce zobrazit stránku. Server mu pošle svůj certifikát. Certifikát obsahuje kromě informací o *CA, který ho vystavil také informace o provozovateli serveru a samozřejmě veřejný klíč serveru.
Teď klient vezme veřejný klíč z certifikátu a tím zašifruje pseudonáhodný řetězec (základ klíče, kterým bude potom symetricky šifrována komunikace). Odešle to serveru a ten svým soukromým klíčem tuto zpráve dešifruje a zkontroluje obsah. Pokud nenastal problém server potvrdí přijetí a z těchto řetězců si klient i server vygenerují hlavní klíče, kterými jsou potom šifrovány zprávy.
Je důležité pochopit alespoň toto nezbytné minimum.
*CA: Jak jsem se výše zmínil, autority chtějí nemalé peníze za podepsání vašeho certifikátu. Můžete si sami podepsat certifikát, takzvaný self-signed. Ale ten není prohlížeči brán jako důvěryhodný a třeba v chrome vyskočí ono ošklivé červené okno, které nemalé procento návštěvníku vystraší.
http://www.startssl.com/ Nabízí bezplatné podepsání requestu na certifikát. V následujícím postupu se budu věnovat tedy vygenerování "dospělého" certifikátu na náš server. Záměrně nebudu zmiňovat podrobnosti, takže by nemělo jít o copy & paste.
Pokud nemáme, tak si nainstalujeme openssl
sudo apt-get install openssl
Vygenerujeme si klíč. Doporučuji RSA o velikosti 4096 bitů.
openssl ***
Tento klíč použijeme k vygenerování requestu na certifikát pro startssl.com, který ho podepíše.
openssl ***
Tyto dva kroky jsou nejdůležitější.
Dále už stačí jen vytvořit účet na
http://www.startssl.com a nechat si ho podepsat v Control Panelu.
Nejdříve bude vyžadováno ověření pro naši doménu (záložka Validations Wizard). Nechápu, proč si nemůžeme zadat vlastní mail ale budiž. V Google Apps to je otázka dvou kliknutí.
Po ověření nám nic nebrání podepsání. Otevřeme záložku Certificates Wizard, přeskočíme první krok (máme vlastní request) a obsah souboru, který byl vygenerován jako request (při druhém kroku) nakopírujeme do políčka ve stránce.
Po podepsání přijde oznámení na mail a můžeme si certifikát stáhnout z Control Panelu.
Obsah nakopírujte do souboru server.crt
Pro dokončení je nutný poslední krok, vytvoření server.pem souboru, který bude obsahovat náš klíč (z prvního kroku s openssl) a hned za ním obsah souboru server.crt
Apache2 není potřeba složitě konfigurovat:
sudo a2enmod ssl
Do /etc/apache2/sites-avaiable/default
SSLEngine on
SSLCertificateFile /cesta/k/souboru/server.pem
Doufám, že jsem vás neodradil. Tento postup už nebude pro úplné začátečníky.
Opět budu rád, za každý komentář. Pokud budete mít problémy rád je pomůžu vyřešit.