Jestem w trakcie ponownej instalacji systemu operacyjnego na komputerze, który będzie używany do obsługi kilku aplikacji dla naszej firmy. Aplikacje będą tylko lokalne; dostęp z zewnętrznych klientów będzie możliwy tylko przez VPN.
Wcześniejsza konfiguracja korzystała z panelu kontrolnego hostingu (Plesk) dla większości administratorów i zastanawiałem się nad użyciem innego podobnego oprogramowania do ponownej instalacji - ale pomyślałem, że powinienem w końcu dowiedzieć się, jak to wszystko działa. Mogę zrobić większość rzeczy, które oprogramowanie by dla mnie zrobiło, ale nie jestem pewien, co do symbiozy tego wszystkiego. To wszystko jest próba dalszego dystansowania się od kraju programisty / programisty , jeśli to w ogóle możliwe.
Nigdzie nie mogę znaleźć pełnego przewodnika po tym, czego szukam, więc pomyślałem, że postawię to pytanie, a jeśli ludzie mogą mi pomóc w drodze, zredaguję je odpowiedziami i udokumentuję moje postępy / pułapki. Mam nadzieję, że któregoś dnia to pomoże komuś zejść na dalszy plan.
Szczegóły:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (do aktualizacji)
- PHP: 5.1 (do aktualizacji)
Wymagania:
- BEZPIECZEŃSTWO!!
- Bezpieczny transfer plików
- Bezpieczny dostęp klienta (certyfikaty SSL i urząd certyfikacji)
- Bezpieczne przechowywanie danych
- Bezpieczne połączenie z innym komputerem lokalnym (MySQL)
- Virtualhosts / wiele subdomen
- Lokalny adres e-mail byłby miły, ale nie krytyczny
Kroki:
Podczas instalacji sprawdziłem opcję Składniki serwera, myśląc, że będę używał innego administratora podobnego do Pleska. Z perspektywy czasu, biorąc pod uwagę, że zdecydowałem się pójść własną drogą, prawdopodobnie nie był to najlepszy pomysł.
skonfiguruj użytkowników, adres sieciowy / IP itp. Aktualizacja / aktualizacja Yum.
Aby zaktualizować PHP i MySQL do najnowszych wersji, musiałem szukać innego repozytorium poza CentOS. IUS wygląda świetnie i cieszę się, że go znalazłem!
Dodaj repozytorium IUS do naszego menedżera pakietów
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
Usuń starą wersję PHP i zainstaluj nowszą wersję z 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)
Zaktualizuj MySQL z repozytorium 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
Instrukcje aktualizacji dzięki uprzejmości IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
i sftp
dostęp bez zezwolenia na ssh
logowaniecd /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
Edytuj, /etc/rssh.conf
aby przyznać dostęp do SFTP użytkownikom rssh.
vi /etc/rssh.conf
Odkomentuj lub dodaj:
allowscp
allowsftp
Pozwala mi to połączyć się z maszyną za pomocą protokołu SFTP w Transmit (mój wybrany program FTP; jestem pewien, że jest podobny do innych aplikacji FTP).
instrukcje rssh zawłaszczone (z uznaniem!) z 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 | zmodyfikuj, aby wyglądało to tak:
DEVICE = eth1: 1
IPADDR = 192.168.1.3 NETMASK
= 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = tak
NAZWA = eth1: 1
W razie potrzeby dodaj więcej interfejsów wirtualnych, powtarzając. Ze względu na ONBOOT=yes
wiersz w pliku ifcfg-eth1: 1 interfejs ten zostanie uruchomiony, gdy system uruchomi się lub sieć uruchomi się / uruchomi ponownie.
service network restart
Wyłączanie interfejsu eth0: [OK]
Wyłączanie interfejsu eth1: [OK]
Wyłączanie interfejsu sprzężenia zwrotnego: [OK]
Uruchomienie interfejsu sprzężenia zwrotnego: [OK]
Uruchomienie interfejsu eth0: [OK]
Uruchomienie interfejsu eth1: [OK]
ping 192.168.1.3
64 bajty z 192.168.1.3: icmp_seq = 1 ttl = 64 czas = 0,105 ms
W powyższej sekcji rssh dodałem użytkownika do użycia dla SFTP. W katalogu domowym tego użytkownika utworzyłem folder o nazwie „https”. W tym miejscu będą istnieć dokumenty tej witryny, więc muszę dodać wirtualny host, który będzie do niego wskazywał. Będę korzystać z powyższego interfejsu wirtualnego dla tej witryny (tutaj o nazwie dev.site.local).
vi /etc/http/conf/httpd.conf
Dodaj następujące na końcu 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>
Umieszczam fikcyjny plik index.html w katalogu https, żeby wszystko sprawdzić. Próbowałem przejść do niego i napotkałem błędy odmowy uprawnień. Dzienniki zawierały jedynie niejasne odniesienie do tego, co się działo:
[Pon 17 maja 14:57:11 2010] [błąd] [klient 192.168.1.100] (13) Odmowa dostępu: odmowa dostępu do /index.html
Próbowałem chmod 777 et. al., ale bezskutecznie. Okazuje się, że musiałem chmod + x katalog https i jego katalogi nadrzędne.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
To rozwiązało ten problem.
Obsługuję DNS za pośrednictwem naszego lokalnego systemu Windows Server 2003. Jednak dokumentację CentOS dla BIND można znaleźć tutaj: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Aby SSL działał, zmieniłem następujące w 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>
Niestety wciąż próbuję uzyskać dostęp do strony za pomocą protokołu SSL (kod błędu: ssl_error_rx_record_too_long). Jak JamesHannah z wdziękiem podkreślił poniżej , nie ustawiłem lokalizacji certyfikatów w httpd.conf, w ten sposób powodowałem, że strona została rzucona na broswer, gdy certyfikat powodował niechęć przeglądarki.
Najpierw musiałem skonfigurować urząd certyfikacji i utworzyć pliki certyfikatów. Znalazłem świetny (jeśli stary) przewodnik na temat tego procesu tutaj: http://www.debian-administration.org/articles/284 .
Oto odpowiednie kroki, które podjąłem z tego artykułu:
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
Utwórz openssl.cnf
plik w katalogu /home/CA/
i edytuj go zgodnie z powyższym opisem. (Dla porównania, mój gotowy plik openssl.cnf wyglądał tak: 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)
Zmodyfikowano openssl.cnf
ponownie zgodnie z instrukcjami.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Zmodyfikowano openssl.cnf
ponownie zgodnie z instrukcjami.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
WAŻNY!
Przenieś pliki i odwołaj się do nich z httpd.conf w nowej lokalizacji
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Zaktualizowałem httpd.conf, aby odzwierciedlić certyfikaty i włączyć 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>
Umieść certyfikat CA.p.pem w miejscu dostępnym w sieci i pobierz go / zaimportuj do mojej przeglądarki. Teraz mogę odwiedzić https: //dev.site.local bez błędów i ostrzeżeń.
I tu jestem. Będę kontynuować edycję tego, gdy będę robić postępy. Wszelkie wskazówki dotyczące konfiguracji wiadomości e-mail SSL i / lub konfigurowania bezpiecznego połączenia z innym urządzeniem Box, którym będzie serwer MySQL, będą mile widziane.