Je suis en train de réinstaller le système d'exploitation sur une machine qui sera utilisée pour héberger quelques applications pour notre entreprise. Les candidatures seront locales uniquement; l'accès à partir de clients externes se fera uniquement via VPN.
La configuration précédente utilisait un panneau de contrôle d'hébergement (Plesk) pour la plupart des administrateurs, et je cherchais à utiliser un autre logiciel similaire pour la réinstallation - mais j'ai pensé que je devrais enfin apprendre comment tout cela fonctionne. Je peux faire la plupart des choses que le logiciel ferait pour moi, mais je ne suis pas sûr de la symbiose de tout cela. Tout cela est une tentative de m'éloigner davantage du pays de Configuration Programmer / Programmer , si possible.
Je ne trouve aucune solution complète pour ce que je recherche, alors j'ai pensé poser cette question, et si les gens peuvent m'aider sur le chemin, je vais modifier cela avec les réponses et documenter mes progrès / pièges. J'espère qu'un jour cela aidera quelqu'un.
Les détails:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (à mettre à niveau)
- PHP: 5.1 (à mettre à niveau)
Les exigences:
- SÉCURITÉ!!
- Transfert de fichiers sécurisé
- Accès client sécurisé (certificats SSL et CA)
- Stockage sécurisé des données
- Connexion sécurisée à une autre machine locale (MySQL)
- Hôtes virtuels / sous-domaines multiples
- L'email local serait bien, mais pas critique
Les marches:
lors de l'installation, j'ai vérifié l'option Composants du serveur en pensant que j'allais utiliser un autre administrateur de type Plesk. Avec le recul, étant donné que j'ai décidé d'essayer de suivre mon propre chemin, ce n'était probablement pas la meilleure idée.
Configuration de base: configuration des utilisateurs, mise en réseau / adresse IP, etc. Mise à jour / mise à niveau Yum.
Mettre à jour PHP / MySQL: Pour mettre à jour PHP et MySQL vers les dernières versions, j'ai dû chercher un autre dépôt en dehors de CentOS. IUS est superbe et je suis heureux de l'avoir trouvé!
Ajouter le référentiel IUS à notre gestionnaire de packages
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
Supprimer l'ancienne version de PHP et installer la nouvelle version d'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)
Mettre à niveau MySQL à partir du référentiel 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
Instructions de mise à niveau fournies par IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
et sftp
accéder, sans autoriser la ssh
connexioncd /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
Modifier /etc/rssh.conf
pour accorder l'accès à SFTP aux utilisateurs rssh.
vi /etc/rssh.conf
Décommentez ou ajoutez:
allowscp
allowsftp
Cela me permet de me connecter à la machine via le protocole SFTP dans Transmit (mon programme FTP de choix; je suis sûr que c'est similaire avec d'autres applications FTP).
Instructions rssh appropriées (avec appréciation!) sur 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 | modifier pour qu'il ressemble à ceci:
DEVICE = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = oui
NAME = eth1: 1
Ajoutez plus d'interfaces virtuelles au besoin en répétant. En raison de la ONBOOT=yes
ligne du fichier ifcfg-eth1: 1, cette interface sera affichée au démarrage du système ou au démarrage / redémarrage du réseau.
service network restart
Arrêt de l'interface eth0: [OK]
Arrêt de l'interface eth1: [OK]
Arrêt de l'interface de bouclage: [OK]
Affichage de l'interface de bouclage: [OK]
Affichage de l'interface eth0: [OK]
Affichage de l'interface eth1: [OK]
ping 192.168.1.3
64 octets de 192.168.1.3: icmp_seq = 1 ttl = 64 temps = 0,105 ms
Dans la section rssh ci-dessus, j'ai ajouté un utilisateur à utiliser pour SFTP. Dans le répertoire personnel de cet utilisateur, j'ai créé un dossier appelé «https». C'est là que vivront les documents de ce site, je dois donc ajouter un hôte virtuel qui le pointera. J'utiliserai l'interface virtuelle ci-dessus pour ce site (appelé ici dev.site.local).
vi /etc/http/conf/httpd.conf
Ajoutez ce qui suit à la fin de 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>
J'ai mis un fichier fictif index.html dans le répertoire https juste pour tout vérifier. J'ai essayé d'y accéder et j'ai rencontré des erreurs d'autorisation refusée. Les journaux ne donnaient qu'une référence obscure à ce qui se passait:
[Lun 17 mai 14:57:11 2010] [erreur] [client 192.168.1.100] (13) Autorisation refusée: accès à /index.html refusé
J'ai essayé chmod 777 et. al., mais en vain. Il s'avère que j'avais besoin de chmod + x le répertoire https et ses répertoires parents.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Cela a résolu ce problème.
Je gère le DNS via notre boîte Windows Server 2003 locale. Cependant, la documentation CentOS pour BIND est disponible ici: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Pour faire fonctionner SSL, j'ai changé ce qui suit dans 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>
Malheureusement, je continue de recevoir des erreurs (code d'erreur: ssl_error_rx_record_too_long) lorsque j'essaie d'accéder à une page avec SSL. Comme JamesHannah l'a gracieusement souligné ci - dessous , je n'avais pas configuré les emplacements des certificats dans httpd.conf, et je recevais donc la page lancée sur le navigateur en tant que certificat faisant reculer le navigateur.
Donc, d'abord, je devais configurer une autorité de certification et créer des fichiers de certificat. J'ai trouvé une grande (si ancienne) procédure pas à pas sur le processus ici: http://www.debian-administration.org/articles/284 .
Voici les étapes pertinentes que j'ai prises à partir de cet article:
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
Créez un openssl.cnf
fichier dans le répertoire /home/CA/
et modifiez-le selon la procédure pas à pas liée ci-dessus. (Pour référence, mon fichier openssl.cnf terminé ressemblait à ceci: 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)
Modifié à openssl.cnf
nouveau selon les instructions pas à pas.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Modifié à openssl.cnf
nouveau selon les instructions pas à pas.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
IMPORTANT!
Déplacez les fichiers et référencez-les depuis httpd.conf dans le nouvel emplacement
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
J'ai mis à jour httpd.conf pour refléter les certificats et activer 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>
Placez le CA cert.pem dans un endroit accessible sur le Web et téléchargez / importez-le dans mon navigateur. Maintenant, je peux visiter https: //dev.site.local sans erreurs ni avertissements.
Et c'est là que j'en suis. Je continuerai de le modifier au fur et à mesure de mes progrès. Tous les conseils sur la configuration de la messagerie SSL et / ou la configuration d'une connexion sécurisée à une autre Box qui sera le serveur MySQL seraient appréciés.
Réponses:
Ce guide contient de nombreuses réponses sur l'utilisation de SSL avec Apache, vous explique comment créer un certificat auto-signé, comment obtenir un certificat approprié auprès d'une autorité de certification reconnue et comment créer votre propre autorité de certification non fiable pour créer un certificat complet. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Quant aux hôtes virtuels et SSL, chaque hôte aura besoin de sa propre adresse IP ou une solution plus sale consiste à les héberger sur des ports différents, que la norme
:443
raison de la nature des certificats SSL, l'hébergement virtuel basé sur le nom ne s'entend pas avec SSL; c'est pourquoi vous avez besoin d'une autre méthode pour différencier; ports / IP différents.La configuration de SSH est assez facile, elle devrait déjà être exécutée sur votre serveur. Vous voudrez faire un certain nombre de choses pour le verrouiller.
Il peut être ajouté à votre
/etc/ssh/sshd_config
pour restreindre l'accès root à distance et supprimer l'authentification par mot de passe, à la place, en utilisant des paires de clés publiques / privées pour vous connecter.Pour créer votre paire de clés SSH, vous pouvez utiliser
puttygen
sous Windows; http://putty.very.rulez.org/download.html ou vous pouvez créer la paire de clés dans un environnement Linux comme ceci:ssh-keygen -b 2048 -t RSA -f my_keypair
. Cela va créer unmy_keypair
fichier et unmy_keypair.pub
fichier (uniquement nommé pour cet exemple, je pourrais suggérer de nommer votre nom d'utilisateur ou de le laisser-f
, et de le laisser générer~/.ssh/id_rsa
).Transférez en toute sécurité
my_keypair
sur votre poste de travail, pour un futur accès SSH, c'est la clé privée, vous ne devez la partager avec personne. Ensuite, sur le serveur, créez$HOME/.ssh
si elle n'existe pas déjà,mkdir ~/.ssh
puis copier la clé publique (my_keypair.pub
à)~/.ssh/
, si vous avez déjàauthorized_keys
en~/.ssh
parce que vous avez fait pour d' autres choses, vous pouvez fairecat my_keypair.pub >> authorized_keys
pour ajouter votre clé publique, oucp my_keypair.pub authorized_keys
si ça n'existe pas.Maintenant, exécutez
chmod 700 ~/.ssh
etchmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
pour définir les autorisations. Vous pouvez conserver une copiemy_keypair
dans~/.ssh/
pour l'utiliser lors de la connexion à d'autres hôtes, mais vous devez vouschmod 600 ~/.ssh/my_keypair
assurer que personne d'autre ne peut y accéder.Vous voudrez ajouter un compte d'utilisateur normal pour vous-même et vous ajouter à un groupe autre que
users
, commeadmins
dans mon exemple.Vous souhaiterez probablement également ajouter votre utilisateur ou groupe
/etc/sudoers
pour activer l'sudo
utilisation, si vous ne l'avez pas déjà fait. Ceci est accompli avec la commandevisudo
qui est le seul moyen de modifier ce fichier.visudo
exécute une vérification des erreurs et de la syntaxe sur votre configuration avant de l'écrire, empêchant la perte d'sudo
utilisation.ajouté à
/etc/sudoers
permettrausername
d'exécutersudo yum install blah
et vous demandera votre propre mot de passe. C'est pratique dans le cas où vous avez d'autres administrateurs ou administrateurs temporaires, vous n'avez pas besoin de partager le mot de passe root.la source
Le problème avec votre configuration SSL est que vous n'avez pas réellement activé SSL, vous auriez besoin des directives Apache pour cela:
Sans cela, vous obtiendrez ces erreurs d'enregistrement trop longues, c'est parce qu'au lieu des en-têtes SSL que votre navigateur attendait, il obtient à la place juste la page Web non chiffrée dans un gros morceau.
la source
MySQL du package d'origine prend en charge SSL. Pour vérifier votre build MySQL, exécutez
Vous devriez trouver quelque chose comme
have_ssl yes
. Configurer les optionsssl-ca
,ssl-key
etssl-cert
.Créez des comptes d'utilisateurs avec des exigences SSL:
la source