Sto reinstallando il sistema operativo su un computer che verrà utilizzato per ospitare un paio di applicazioni per la nostra attività. Le applicazioni saranno solo locali; l'accesso da client esterni avverrà solo tramite VPN.
La configurazione precedente utilizzava un pannello di controllo di hosting (Plesk) per la maggior parte dell'amministratore, e stavo cercando di utilizzare un altro software simile per la reinstallazione, ma ho pensato che avrei dovuto finalmente imparare come funziona tutto. Posso fare la maggior parte delle cose che il software farebbe per me, ma non sono chiaro sulla simbiosi di tutto ciò. Questo è tutto un tentativo di allontanarmi ulteriormente dalla terra del programmatore / programmatore di configurazione , se possibile.
Non riesco a trovare una soluzione completa da nessuna parte per quello che sto cercando, quindi ho pensato di porre questa domanda e se le persone possono aiutarmi nel modo in cui lo modificherò con le risposte e documenterò i miei progressi / insidie. Spero che un giorno questo possa aiutare qualcuno in fondo.
I dettagli:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (da aggiornare)
- PHP: 5.1 (da aggiornare)
I requisiti:
- SICUREZZA!!
- Trasferimento sicuro dei file
- Accesso client sicuro (SSL Certs e CA)
- Archiviazione sicura dei dati
- Connessione sicura a un altro computer locale (MySQL)
- Host virtuali / sottodomini multipli
- L'email locale sarebbe piacevole, ma non critica
I passi:
Durante l'installazione, ho controllato l'opzione Componenti server pensando che avrei usato un altro amministratore simile a Plesk. Col senno di poi, considerando che ho deciso di provare a seguire la mia strada, questa probabilmente non era la migliore idea.
impostazione utenti, rete / indirizzo IP, ecc. Yum update / upgrade.
per aggiornare PHP e MySQL alle ultime versioni, ho dovuto cercare un altro repository esterno a CentOS. IUS ha un bell'aspetto e sono felice di averlo trovato!
Aggiungi repository IUS al nostro gestore di pacchetti
cd /tmp
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm
rpm -Uvh epel-release-1-1.ius.el5.noarch.rpm
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-4.ius.el5.noarch.rpm
rpm -Uvh ius-release-1-4.ius.el5.noarch.rpm
yum list | grep -w \.ius\. # list all the packages in the IUS repository; use this to find PHP/MySQL version and libraries you want to install
Rimuovi la vecchia versione di PHP e installa la versione più recente da IUS
rpm -qa | grep php # to list all of the installed php packages we want to remove
yum shell # open an interactive yum shell
remove php-common php-mysql php-cli #remove installed PHP components
install php53 php53-mysql php53-cli php53-common #add packages you want
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
php -v
PHP 5.3.2 (cli) (built: Apr 6 2010 18:13:45)
Aggiorna MySQL dal repository IUS
/etc/init.d/mysqld stop
rpm -qa | grep mysql # to see installed mysql packages
yum shell
remove mysql mysql-server #remove installed MySQL components
install mysql51 mysql51-server mysql51-devel
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
service mysqld start
mysql -v
Server version: 5.1.42-ius Distributed by The IUS Community Project
Istruzioni per l'aggiornamento fornite da IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
e sftp
accedere, senza consentire il ssh
logincd /tmp
wget http://dag.wieers.com/rpm/packages/rssh/rssh-2.3.2-1.2.el5.rf.x86_64.rpm
rpm -ivh rssh-2.3.2-1.2.el5.rf.x86_64.rpm
useradd -m -d /home/dev -s /usr/bin/rssh dev
passwd dev
Modifica /etc/rssh.conf
per consentire l'accesso a SFTP agli utenti rssh.
vi /etc/rssh.conf
Rimuovi commento o aggiungi:
allowscp
allowsftp
Questo mi permette di collegarmi alla macchina tramite protocollo SFTP in Transmit (il mio programma FTP preferito; sono sicuro che è simile con altre applicazioni FTP).
istruzioni rssh appropriate (con apprezzamento!) da http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html .
ifconfig eth1:1 192.168.1.3 up #start up the virtual interface
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth1 ifcfg-eth1:1 #copy default script and match name to our virtual interface
vi ifcfg-eth1:1 #modify eth1:1 script
# ifcfg-eth1: 1 | modificare in questo modo:
DEVICE = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = eth1: 1
Aggiungi più interfacce virtuali secondo necessità ripetendo. A causa della ONBOOT=yes
linea nel file ifcfg-eth1: 1, questa interfaccia verrà visualizzata all'avvio del sistema o all'avvio / riavvio della rete.
service network restart
Chiusura dell'interfaccia eth0: [OK]
Chiusura dell'interfaccia eth1: [OK]
Chiusura dell'interfaccia loopback: [OK] Visualizzazione
dell'interfaccia loopback: [OK] Visualizzazione
dell'interfaccia eth0: [OK] Visualizzazione
dell'interfaccia eth1: [OK]
ping 192.168.1.3
64 byte da 192.168.1.3: icmp_seq = 1 ttl = 64 tempo = 0.105 ms
Nella sezione rssh sopra ho aggiunto un utente da utilizzare per SFTP. Nella home directory di questo utente, ho creato una cartella chiamata 'https'. Questo è dove vivranno i documenti per questo sito, quindi ho bisogno di aggiungere un host virtuale che lo indicherà. Userò l'interfaccia virtuale sopra per questo sito (qui chiamato dev.site.local).
vi /etc/http/conf/httpd.conf
Aggiungi quanto segue alla fine di httpd.conf:
<VirtualHost 192.168.1.3:80>
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Ho messo un file index.html fittizio nella directory https solo per controllare tutto. Ho provato a cercarlo e ho riscontrato errori di autorizzazione negati. I registri davano solo un oscuro riferimento a ciò che stava succedendo:
[Lun 17 maggio 14:57:11 2010] [errore] [client 192.168.1.100] (13) Autorizzazione negata: accesso a /index.html negato
Ho provato chmod 777 et. al., ma inutilmente. A quanto pare, avevo bisogno di chmod + x la directory https e le sue 'directory principali.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Questo ha risolto quel problema.
Sto gestendo DNS tramite la nostra casella locale di Windows Server 2003. Tuttavia, la documentazione CentOS per BIND è disponibile qui: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Per far funzionare SSL, ho modificato quanto segue in httpd.conf:
NameVirtualHost 192.168.1.3:443 #make sure this line is in httpd.conf
<VirtualHost 192.168.1.3:443> #change port to 443
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Sfortunatamente, continuo a ricevere errori (Codice errore: ssl_error_rx_record_too_long) quando provo ad accedere a una pagina con SSL. Come JamesHannah ha indicato con garbo di seguito , non avevo impostato le posizioni dei certificati in httpd.conf, e quindi la pagina veniva lanciata al broswer mentre il certificato rendeva il browser inutilizzato.
Quindi, prima, avevo bisogno di impostare una CA e creare file di certificati. Ho trovato una grande (se vecchia) procedura dettagliata sul processo qui: http://www.debian-administration.org/articles/284 .
Ecco i passaggi rilevanti che ho preso da quell'articolo:
mkdir /home/CA
cd /home/CA/
mkdir newcerts private
echo '01' > serial
touch index.txt #this and the above command are for the database that will keep track of certs
Creare un openssl.cnf
file nella directory /home/CA/
e modificarlo per la procedura dettagliata collegata sopra. (Per riferimento, il mio file openssl.cnf finito sembrava così: http://pastebin.com/raw.php?i=hnZDij4T )
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf #this creates the cacert.pem which gets distributed and imported to the browser(s)
Modificato di openssl.cnf
nuovo per le istruzioni dettagliate.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Modificato di openssl.cnf
nuovo per le istruzioni dettagliate.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
IMPORTANTE!
Spostare i file e consultarli da httpd.conf nella nuova posizione
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Ho aggiornato httpd.conf per riflettere i certificati e accendere SSLEngine:
NameVirtualHost 192.168.1.3:443
<VirtualHost 192.168.1.3:443>
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
SSLEngine on
SSLCertificateFile /home/dev/certs/cert.pem
SSLCertificateKeyFile /home/dev/certs/key.pem
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Inserisci CA cert.pem in un luogo accessibile dal Web e scaricato / importato nel mio browser. Ora posso visitare https: //dev.site.local senza errori o avvisi.
E questo è dove sono io. Continuerò a modificarlo mentre faccio progressi. Tutti i suggerimenti su come configurare la posta elettronica SSL e / o la configurazione della connessione sicura a un altro Box che sarà il server MySQL sarebbero apprezzati.