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 [email protected]
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 [email protected]
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 [email protected]
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.
Odpowiedzi:
Ten przewodnik zawiera wiele odpowiedzi na temat używania protokołu SSL z Apache, zawiera instrukcje dotyczące tworzenia certyfikatu z podpisem własnym, uzyskiwania właściwego certyfikatu od uznanego urzędu certyfikacji oraz tworzenia własnego, niezaufanego urzędu certyfikacji w celu utworzenia certyfikatu pełny certyfikat. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Jeśli chodzi o hosty wirtualne i SSL, każdy host będzie potrzebował własnego adresu IP lub brudniejszym rozwiązaniem jest hostowanie ich na innych portach niż standardowe
:443
ze względu na naturę certyfikatów SSL, wirtualny hosting oparty na nazwie nie dogaduje się z SSL; dlatego potrzebujesz innej metody rozróżnienia; różne porty / adresy IP.Konfiguracja SSH jest dość łatwa, powinna już działać na twoim serwerze. Będziesz chciał zrobić wiele rzeczy, aby to zablokować.
Można go dodać do twojego,
/etc/ssh/sshd_config
aby ograniczyć zdalny dostęp do roota i usunąć uwierzytelnianie za pomocą hasła, zamiast tego używając loginu publicznego / prywatnego do logowania.Aby utworzyć parę kluczy SSH, możesz użyć
puttygen
w systemie Windows; http://putty.very.rulez.org/download.html lub można utworzyć parę kluczy w środowisku Linux tak:ssh-keygen -b 2048 -t RSA -f my_keypair
. Spowoduje to utworzeniemy_keypair
pliku imy_keypair.pub
pliku (o nazwie tylko dla tego przykładu, może sugerować nazewnictwo dla twojej nazwy użytkownika lub pozostawienie-f
i pozwolenie na wygenerowanie~/.ssh/id_rsa
).Bezpiecznie przenieś
my_keypair
na swoją stację roboczą, aby w przyszłości uzyskać dostęp do SSH, jest to klucz prywatny, nie należy go nikomu udostępniać. Następnie na serwerze utwórz$HOME/.ssh
jeśli nie istnieje,mkdir ~/.ssh
, skopiuj klucz publiczny (my_keypair.pub
), aby~/.ssh/
, jeśli masz jużauthorized_keys
w~/.ssh
bo zrobiłeś to na inne rzeczy można zrobićcat my_keypair.pub >> authorized_keys
, aby dołączyć swój klucz publiczny, lubcp my_keypair.pub authorized_keys
jeśli to nie istnieje.Teraz uruchom
chmod 700 ~/.ssh
i,chmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
aby ustawić uprawnienia. Możesz zachować kopięmy_keypair
w~/.ssh/
celu użycia podczas łączenia z innymi hostami, ale powinieneś zrobić,chmod 600 ~/.ssh/my_keypair
aby upewnić się, że nikt inny nie może uzyskać do niej dostępu.Będziesz chciał dodać dla siebie zwykłe konto użytkownika i dodać się do grupy innej niż
users
, jakadmins
w moim przykładzie.Prawdopodobnie będziesz również chciał dodać użytkownika lub grupę,
/etc/sudoers
aby umożliwićsudo
korzystanie, jeśli jeszcze tego nie zrobiłeś. Dokonuje się tego za pomocą polecenia,visudo
które jest jedynym sposobem edycji tego pliku.visudo
uruchamia sprawdzanie błędów i składni konfiguracji przed jej wypisaniem, zapobiegając utraciesudo
użytkowania.Dodane do
/etc/sudoers
pozwoliusername
uruchomićsudo yum install blah
i poprosi o podanie własnego hasła. Jest to przydatne w przypadku, gdy masz innych administratorów lub tymczasowych administratorów, nie musisz udostępniać hasła roota.źródło
Problem z twoją konfiguracją SSL polega na tym, że tak naprawdę nie włączyłeś SSL, potrzebujesz do tego dyrektyw Apache:
Bez tego dostaniesz zbyt długie błędy rekordów, ponieważ zamiast nagłówków SSL, których oczekiwała twoja przeglądarka, otrzymujesz po prostu niezaszyfrowaną stronę internetową w dużym kawałku.
źródło
MySQL z oryginalnego pakietu obsługuje SSL. Aby sprawdzić kompilację MySQL, uruchom
Powinieneś znaleźć coś takiego
have_ssl yes
. Konfigurowanie opcjissl-ca
,ssl-key
issl-cert
.Utwórz konta użytkowników z wymaganiami SSL:
źródło