Ich bin dabei, das Betriebssystem auf einem Computer neu zu installieren, auf dem einige Anwendungen für unser Unternehmen gehostet werden. Die Anwendungen sind nur lokal. Der Zugriff von externen Clients erfolgt ausschließlich über VPN.
Das vorherige Setup verwendete für die meisten Administratoren ein Hosting-Control-Panel (Plesk), und ich wollte eine andere ähnliche Software für die Neuinstallation verwenden - aber ich dachte, ich sollte endlich lernen, wie das alles funktioniert. Ich kann die meisten Dinge tun, die die Software für mich tun würde, aber ich bin mir nicht sicher, ob das eine Symbiose ist. Dies ist alles ein Versuch, mich weiter vom Land der Konfigurationsprogrammierer / Programmierer zu distanzieren , wenn dies überhaupt möglich ist.
Ich kann nirgendwo eine vollständige exemplarische Vorgehensweise für das finden, wonach ich suche. Ich dachte, ich würde diese Frage stellen, und wenn die Leute mir dabei helfen können, werde ich sie mit den Antworten bearbeiten und meine Fortschritte dokumentieren. Tücken. Hoffentlich hilft dies eines Tages jemandem auf der ganzen Linie.
Die Details:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (wird aktualisiert)
- PHP: 5.1 (wird aktualisiert)
Die Anforderungen:
- SICHERHEIT!!
- Sichere Dateiübertragung
- Sicherer Clientzugriff (SSL-Zertifikate und CA)
- Sichere Datenspeicherung
- Sichere Verbindung zu einem anderen lokalen Computer (MySQL)
- Virtualhosts / mehrere Subdomains
- Lokale E-Mail wäre nett, aber nicht kritisch
Die Schritte:
Während der Installation habe ich die Option "Serverkomponenten" aktiviert und angenommen, dass ich einen anderen Plesk-ähnlichen Administrator verwenden würde. Im Nachhinein war dies wahrscheinlich nicht die beste Idee, wenn man bedenkt, dass ich mich entschlossen habe, meinen eigenen Weg zu gehen.
Benutzer einrichten, Netzwerk / IP-Adresse usw. Yum Update / Upgrade.
Um PHP und MySQL auf die neuesten Versionen zu aktualisieren, musste ich auf ein anderes Repo außerhalb von CentOS schauen. IUS sieht gut aus und ich bin froh, dass ich es gefunden habe!
Fügen Sie unserem Paketmanager das IUS-Repository hinzu
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
Alte Version von PHP entfernen und neuere Version von IUS installieren
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)
Aktualisieren Sie MySQL vom IUS-Repository
/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
Upgrade-Anweisungen mit freundlicher Genehmigung des IUS-Wikis: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
und den sftp
Zugriff, ohne die ssh
Anmeldung zuzulassencd /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
Bearbeiten /etc/rssh.conf
, um rssh-Benutzern Zugriff auf SFTP zu gewähren.
vi /etc/rssh.conf
Kommentar entfernen oder hinzufügen:
allowscp
allowsftp
Auf diese Weise kann ich über das SFTP-Protokoll in Transmit (dem FTP-Programm meiner Wahl) eine Verbindung zum Gerät herstellen.
rssh Anweisungen (mit Anerkennung!) von 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 | Ändern Sie, damit es so aussieht:
DEVICE = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = eth1: 1
Fügen Sie nach Bedarf weitere virtuelle Schnittstellen hinzu, indem Sie diesen Vorgang wiederholen. Aufgrund der ONBOOT=yes
Zeile in der Datei ifcfg-eth1: 1 wird diese Schnittstelle beim Systemstart oder beim Starten / Neustarten des Netzwerks aufgerufen.
service network restart
Schnittstelle eth0 herunterfahren: [OK]
Schnittstelle eth1 herunterfahren: [OK]
Loopback-Schnittstelle herunterfahren: [OK]
Loopback-
Schnittstelle hochfahren: [OK]
Interface eth0 hochfahren: [OK] Interface eth1 hochfahren: [OK]
ping 192.168.1.3
64 Bytes von 192.168.1.3: icmp_seq = 1 ttl = 64 time = 0.105 ms
Im obigen rssh-Abschnitt habe ich einen Benutzer hinzugefügt, der für SFTP verwendet werden soll. In diesem Benutzerverzeichnis habe ich einen Ordner mit dem Namen "https" erstellt. Hier werden die Dokumente für diese Site gespeichert. Daher muss ein virtueller Host hinzugefügt werden, der darauf verweist. Ich werde die oben genannte virtuelle Schnittstelle für diese Site verwenden (hier dev.site.local genannt).
vi /etc/http/conf/httpd.conf
Fügen Sie am Ende von httpd.conf Folgendes hinzu:
<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>
Ich habe eine Dummy-Datei index.html in das https-Verzeichnis gelegt, um alles zu überprüfen. Ich habe versucht, darauf zuzugreifen, und wurde mit der Erlaubnis empfangen, Fehler zu verweigern. Die Protokolle gaben nur einen undurchsichtigen Hinweis darauf, was vor sich ging:
[Mo 17 Mai 14:57:11 2010] [Fehler] [Client 192.168.1.100] (13) Berechtigung verweigert: Zugriff auf /index.html verweigert
Ich habe versucht, chmod 777 et. al., aber ohne Erfolg. Es stellte sich heraus, dass ich das https-Verzeichnis und dessen übergeordnete Verzeichnisse mit chmod + x bearbeiten musste.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Dies löste das Problem.
Ich verwalte DNS über unsere lokale Windows Server 2003-Box. Die CentOS-Dokumentation für BIND finden Sie jedoch hier: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Damit SSL funktioniert, habe ich in httpd.conf Folgendes geändert:
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>
Leider erhalte ich immer wieder Fehler (Fehlercode: ssl_error_rx_record_too_long), wenn ich versuche, auf eine Seite mit SSL zuzugreifen. Wie JamesHannah anmutig unten wies darauf hin , ich hatte nicht die Positionen der certs in httpd.conf einrichten und auf diese Weise wurde immer die Seite am broswer als cert geworfen , um den Browser balk machen.
So zuerst, ich brauchte ein einzurichten CA und Zertifikatsdateien zu machen. Ich habe hier eine großartige (wenn auch alte) Anleitung gefunden: http://www.debian-administration.org/articles/284 .
Hier sind die relevanten Schritte, die ich in diesem Artikel unternommen habe:
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
Erstellen Sie eine openssl.cnf
Datei im /home/CA/
Verzeichnis und bearbeiten Sie sie gemäß der oben verlinkten exemplarischen Vorgehensweise. (Als Referenz sah meine fertige Datei openssl.cnf folgendermaßen aus: 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)
openssl.cnf
Erneut geändert gemäß Anleitung.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
openssl.cnf
Erneut geändert gemäß Anleitung.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
WICHTIG!
Verschieben Sie die Dateien und verweisen Sie sie von httpd.conf an den neuen Speicherort
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Ich habe httpd.conf aktualisiert, um die Zertifikate wiederzugeben und SSLEngine einzuschalten:
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>
Legen Sie das CA-Zertifikat "cert.pem" an einem über das Internet zugänglichen Ort ab und laden Sie es herunter bzw. importieren Sie es in meinen Browser. Jetzt kann ich https: //dev.site.local ohne Fehler oder Warnungen besuchen .
Und hier bin ich. Ich werde das weiter bearbeiten, wenn ich Fortschritte mache. Alle Tipps zum Konfigurieren von SSL-E-Mail und / oder zum Konfigurieren einer sicheren Verbindung zu einer anderen Box, die der MySQL-Server sein wird, sind willkommen.