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 [email protected]
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 [email protected]
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 [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>
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.
Antworten:
In diesem Handbuch finden Sie viele Antworten zur Verwendung von SSL mit Apache. Außerdem erfahren Sie, wie Sie ein selbstsigniertes Zertifikat erstellen, ein ordnungsgemäßes Zertifikat von einer anerkannten Zertifizierungsstelle erhalten und eine eigene, nicht vertrauenswürdige Zertifizierungsstelle erstellen volles Zertifikat. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Bei virtuellen Hosts und SSL benötigt jeder Host eine eigene IP-Adresse, oder es ist eine schmutzigere Lösung, sie an anderen Ports als dem Standard zu hosten.
:443
Aufgrund der Art der SSL-Zertifikate kommt das namensbasierte virtuelle Hosting mit SSL nicht zurecht. Aus diesem Grund benötigen Sie eine andere Methode zur Unterscheidung. unterschiedliche Ports / IPs.Das Einrichten von SSH ist ziemlich einfach. Es sollte bereits auf Ihrem Server ausgeführt werden. Sie werden einige Dinge tun wollen, um es zu sperren.
Es kann hinzugefügt werden, um den
/etc/ssh/sshd_config
Remotestammzugriff einzuschränken und die Kennwortauthentifizierung zu entfernen, anstatt sich mit öffentlichen / privaten Schlüsselpaaren anzumelden.Zum Erstellen Ihres SSH-Schlüsselpaars können Sie
puttygen
Windows verwenden. http://putty.very.rulez.org/download.html oder Sie können das Schlüsselpaar in einer Linux-Umgebung wie folgt erstellen:ssh-keygen -b 2048 -t RSA -f my_keypair
. Dies erstellt einemy_keypair
Datei und einemy_keypair.pub
Datei (nur für dieses Beispiel benannt, ich würde vorschlagen, Ihren Benutzernamen zu benennen oder wegzulassen-f
und es generieren zu lassen~/.ssh/id_rsa
).Sichere Übertragung
my_keypair
auf Ihre Workstation für zukünftigen SSH-Zugriff. Dies ist der private Schlüssel. Sie sollten ihn nicht an Dritte weitergeben. Erstellen$HOME/.ssh
Sie dann auf dem Server einenmkdir ~/.ssh
öffentlichen Schlüssel (my_keypair.pub
) , sofern dieser noch nicht vorhanden ist , und kopieren Sie ihn nach~/.ssh/
, wenn Sie bereitsauthorized_keys
in ,~/.ssh
weil Sie diese für andere Dinge getan haben, können Siecat my_keypair.pub >> authorized_keys
Ihren öffentlichen Schlüssel anhängen, odercp my_keypair.pub authorized_keys
wenn es existiert nicht.Jetzt renn
chmod 700 ~/.ssh
undchmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
, um Berechtigungen festzulegen. Sie können eine Kopie vonmy_keypair
in~/.ssh/
für die Verbindung mit anderen Hosts aufbewahren, aber Sie solltenchmod 600 ~/.ssh/my_keypair
sicherstellen, dass niemand anderes darauf zugreifen kann.Sie möchten ein normales Benutzerkonto für sich selbst hinzufügen und sich einer anderen Gruppe als
users
, wieadmins
in meinem Beispiel , hinzufügen .Sie möchten wahrscheinlich auch Ihren Benutzer oder Ihre Gruppe hinzufügen
/etc/sudoers
, um diesudo
Verwendung zu aktivieren , falls Sie dies noch nicht getan haben. Dies geschieht mit dem Befehlvisudo
, mit dem Sie diese Datei nur bearbeiten sollten.visudo
Führt eine Fehler- und Syntaxprüfung für Ihre Konfiguration durch, bevor Sie diese ausschreiben, umsudo
Nutzungsverluste zu vermeiden.hinzugefügt,
/etc/sudoers
umusername
die Ausführung zu ermöglichensudo yum install blah
und Sie zur Eingabe Ihres eigenen Passworts aufzufordern. Dies ist praktisch, wenn Sie andere Administratoren oder temporäre Administratoren haben und das Root-Passwort nicht weitergeben müssen.quelle
Das Problem mit Ihrer SSL-Konfiguration ist, dass Sie SSL nicht aktiviert haben. Dafür benötigen Sie die Apache-Direktiven:
Andernfalls erhalten Sie zu lange Fehler, da Ihr Browser anstelle der von ihm erwarteten SSL-Header nur die unverschlüsselte Webseite in einem großen Block abruft.
quelle
MySQL aus dem Originalpaket unterstützt SSL. Führen Sie Folgendes aus, um Ihren MySQL-Build zu überprüfen
Du solltest sowas finden
have_ssl yes
. Richten Sie Optionenssl-ca
,ssl-key
undssl-cert
.Erstellen Sie Benutzerkonten mit SSL-Anforderungen:
quelle