Estoy en el proceso de reinstalar el sistema operativo en una máquina que se utilizará para alojar un par de aplicaciones para nuestro negocio. Las aplicaciones serán solo locales; El acceso desde clientes externos será solo a través de VPN.
La configuración anterior usaba un panel de control de alojamiento (Plesk) para la mayoría de los administradores, y estaba buscando usar otro software similar para la reinstalación, pero pensé que finalmente debería aprender cómo funciona todo. Puedo hacer la mayoría de las cosas que el software haría por mí, pero no tengo clara la simbiosis de todo. Todo esto es un intento de distanciarme más de la tierra del Programador / Programador de configuración , si es posible.
No puedo encontrar un tutorial completo para lo que estoy buscando, así que pensé en hacer esta pregunta, y si la gente me puede ayudar en el camino, editaré esto con las respuestas y documentaré mi progreso / trampas Esperemos que algún día esto ayude a alguien en el futuro.
Los detalles:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (para actualizar)
- PHP: 5.1 (para ser actualizado)
Los requisitos:
- ¡¡SEGURIDAD!!
- Transferencia segura de archivos
- Acceso seguro al cliente (SSL Certs y CA)
- Almacenamiento de datos seguro
- Conexión segura a otra máquina local (MySQL)
- Virtualhosts / subdominios múltiples
- El correo electrónico local sería bueno, pero no crítico
Los pasos:
mientras realizaba la instalación, verifiqué la opción Componentes del servidor pensando que iba a usar otro administrador similar a Plesk. En retrospectiva, considerando que he decidido intentar seguir mi propio camino, esta probablemente no fue la mejor idea.
configuración de usuarios, red / dirección IP, etc. Actualización / actualización de Yum.
para actualizar PHP y MySQL a las últimas versiones, tuve que buscar otro repositorio fuera de CentOS. IUS se ve muy bien y estoy feliz de haberlo encontrado.
Agregue el repositorio IUS a nuestro administrador de paquetes
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
Elimine la versión anterior de PHP e instale la versión más nueva de 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)
Actualice MySQL desde el repositorio 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
Instrucciones de actualización cortesía de IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
y sftp
acceder, sin permitir el ssh
inicio de sesióncd /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
Editar /etc/rssh.conf
para otorgar acceso a SFTP a los usuarios de rssh.
vi /etc/rssh.conf
Descomentar o agregar:
allowscp
allowsftp
Esto me permite conectarme a la máquina a través del protocolo SFTP en Transmitir (mi programa FTP preferido; estoy seguro de que es similar a otras aplicaciones FTP).
instrucciones de rssh apropiadas (con agradecimiento) de 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 | modificar para que se vea así:
DISPOSITIVO = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = eth1: 1
Agregue más interfaces virtuales según sea necesario repitiendo. Debido a la ONBOOT=yes
línea en el archivo ifcfg-eth1: 1, esta interfaz se abrirá cuando el sistema se inicie o la red se inicie / reinicie.
service network restart
Cerrar la interfaz eth0: [OK]
Cerrar la interfaz eth1: [OK]
Cerrar la interfaz loopback: [OK]
Abrir la interfaz loopback: [OK]
Abrir la interfaz eth0: [OK]
Abrir la interfaz eth1: [OK]
ping 192.168.1.3
64 bytes de 192.168.1.3: icmp_seq = 1 ttl = 64 tiempo = 0.105 ms
En la sección rssh anterior, agregué un usuario para usar para SFTP. En el directorio de inicio de este usuario, creé una carpeta llamada 'https'. Aquí es donde vivirán los documentos de este sitio, así que necesito agregar un host virtual que lo señale. Usaré la interfaz virtual anterior para este sitio (en este documento llamado dev.site.local).
vi /etc/http/conf/httpd.conf
Agregue lo siguiente al final de 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>
Puse un archivo index.html ficticio en el directorio https solo para verificar todo. Traté de buscarlo, y me encontré con un permiso denegado errores. Los registros solo daban una oscura referencia a lo que estaba sucediendo:
[Lun 17 de mayo 14:57:11 2010] [error] [cliente 192.168.1.100] (13) Permiso denegado: acceso a /index.html denegado
Probé chmod 777 et. al., pero fue en vano. Resulta que necesitaba chmod + x el directorio https y sus directorios principales.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Esto resolvió ese problema.
Estoy manejando DNS a través de nuestro cuadro local de Windows Server 2003. Sin embargo, la documentación de CentOS para BIND se puede encontrar aquí: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Para que SSL funcione, cambié lo siguiente en 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>
Desafortunadamente, sigo recibiendo errores (Código de error: ssl_error_rx_record_too_long) cuando intento acceder a una página con SSL. Como JamesHannah señaló con gracia a continuación , no había configurado las ubicaciones de los certificados en httpd.conf y, por lo tanto, estaba arrojando la página al broswer como el certificado que hacía que el navegador no funcionara.
Entonces, primero, necesitaba configurar una CA y hacer archivos de certificado. Encontré un excelente (aunque antiguo) tutorial sobre el proceso aquí: http://www.debian-administration.org/articles/284 .
Estos son los pasos relevantes que tomé de ese artículo:
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
Cree un openssl.cnf
archivo en el /home/CA/
directorio y edítelo según el tutorial vinculado anteriormente. (Como referencia, mi archivo openssl.cnf terminado se veía así: 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)
Modificado openssl.cnf
nuevamente por instrucciones de tutorial.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Modificado openssl.cnf
nuevamente por instrucciones de tutorial.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
¡IMPORTANTE!
Mueva los archivos y haga referencia a ellos desde httpd.conf en la nueva ubicación
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Actualicé httpd.conf para reflejar los certificados y activar 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>
Ponga CA cert.pem en un lugar accesible desde la web y descárguelo / impórtelo a mi navegador. Ahora puedo visitar https: //dev.site.local sin errores ni advertencias.
Y aquí es donde estoy. Seguiré editando esto a medida que avance. Se agradecería cualquier consejo sobre cómo configurar el correo electrónico SSL y / o configurar una conexión segura a otro Box que será el servidor MySQL.