Servidor web y Samba
Servidor web Qué es? Cuando se usa el término servidor web puede hacer referencia al equipo de computo (hardware) como al software que gestiona las peticiones http. En el servidor web (hw) se alojan una gran cantidad de archivos que generalmente están escritos en html (Lenguaje de marcado) o en otros lenguajes dinámicos como ruby, php, python, etc. Debido a la complejidad del mantenimiento de un servidor web casero, se recurre a empresas que ofrecen este servicio denominado hosting que junto con un dominio de internet puede hacerse de su propio servidor web.
Servidor web Qué es? El servidor web como software tiene como principal tarea ofrecer páginas web, es decir, responder a peticiones de los navegadores vía http (clientes) y enviarles los datos que solicitan.
Programas para servidores web Existen muchos servidores web (programas): Apache: Apache foundation nginx: Igor Sysoev (cache) IIS (Internet Information Services): Microsoft Apache Tomcat: páginas jsp (java web) lighttpd: FreeBSD
Servidor HTTP Apache Apache es un servidor HTTP bastante utilizado por su configuración y su flexibilidad. Puede asignar peticiones a sus procesos hijos, lo que permite que el servidor funcione de forma más dinámica. Apache permite agregar módulos de funcionalidad. Con ésto se evita reiniciar el servidor. Sólamente se debe leer de nuevo su configuración al añadir un módulo.
Servidor HTTP Apache Comandos: /etc/init.d/httpd start #Comando para iniciar el servicio /etc/init.d/httpd stop #Comando para detener el servicio /etc/init.d/httpd restart #Comando para reiniciar el servicio /etc/init.d/httpd reload #Comando para revisar las configuraciones del servicio, sin reiniciar # service apache2 [start stop restart reload status] => debian
Servidor HTTP Apache Comandos: a2enmod : habilita un módulo apache a2dismod : deshabilita un módulo del servidor web apache a2ensite : habilita un sitio web configurado en conf.d a2dissite : deshabilita un sitio web apache2 -l : lista de módulos compilados
Configuración /etc/apache2 Configuración principal en el archivo apache2.conf / httpd.conf ports.conf : configuración de puertos, el puerto ssl debe agregarse aquí conf.d/ : configuraciones específicas de servidor web sites-available/ : archivos de configuración para sitios web sites-enabled/ : sitios web que actualmente están siendo usados Los módulos se encuentran en: o /etc/apache2/mods-available/ : módulos disponibles o /etc/apache2/mods-enabled/ : módulos cargados Páginas web se almacenan en /var/www o /srv/www
Parámetros de httpd.conf / apache2.conf ServerRoot: El directorio donde se encuentran los archivos de configuración. Ej: /etc/httpd ; /etc/apache2 Listen: Puerto(s) por donde apache recibirá peticiones. Por defecto, puerto 80. User: Usuario creado para los procesos Apache Group: Grupo de usuarios para los procesos Apache ServerAdmin: Dirección de correo electrónico del administrador ServerName: Nombre del anfitrión. No corresponde con el nombre de la máquina.
Directorios, Alias y Ubicaciones a. Etiqueta <Directory> </Directory> Permiten agrupar directivas que se aplicarán a directorios y subdirectorios. Opciones: Indexes Muestra el contenido del directorio como un listado si no hay archivos HTML por defecto (index.html ó index.php) ExecCGI Autoriza la ejecución de scripts CGI FollowSymLinks Ordena que el servidor siga enlaces simbólico All Todas las opciones
Directorios, Alias y Ubicaciones DirectoryIndex: Específica archivos HTML o CGI por defecto. Se buscará index.php o después index.html allow: Indica permisos para los clientes. Pueden ser todos, un dominio, una IP, una subred, un par red/subred, entre otros. Para denegar permisos se utiliza deny. Se determina el orden por la directiva Order. AllowOverride: específica si el archivo.htaccess puede sobrescribir las configuraciones globales de apache para ese directorio específico La etiqueta <Location> permite aplicar las mismas directivas de <Directory> pero basadas en la URL
Directorios, Alias y Ubicaciones b. Alias Permite crear un atajo entre el árbol lógico del sitio web y una ruta del sistema de archivos. Ej: Alias /help /usr/share/doc/html Aquí se reemplaza /var/www/html/help por /usr/share/doc/html para la búsqueda de la página help.
Anfitriones Virtuales Se crean para administrar varios sitios web en el mismo servidor. NameVirtualHost: Especifica la dirección IP donde se recibirán las peticiones. <VirtualHost> : Esta etiqueta utiliza esa dirección IP para definir un anfitrión Adicionar en /etc/apache2/sites-enabled/000-default después del virtualhost por defecto, el siguiente ejemplo:
Anfitriones Virtuales NameVirtualHost 192.168.1.3 <VirtualHost 192.168.1.3> ServerAdmin ecaldon@innova.co DocumentRoot /var/www/innovaco ServerAlias innova.co ServerName www.innova.co LogLevel warn ErrorLog /var/log/apache2/innova-error.log CustomLog /var/log/apache2/innova-access.log combined
Anfitriones Virtuales <Directory /var/www/innovaco> Options FollowSymLinks Multiviews AllowOverride None Order allow, deny allow from all </Directory> </VirtualHost> Reiniciar el servicio web: service apache2 restart
Anfitriones Virtuales Configurar en /etc/hosts el dominio www.innova.co: 192.168.1.3 www.innnova.co innova.co Abrir un navegador e ir a http://www.innova.co, se mostrará el sitio web alojado en /var/www/innova
Archivo.htaccess Permite configurar parámetros para los directorios y subdirectorios sin necesidad de modificar el archivo de configuración principal de Apache. El sufijo access se utiliza porque en este archivo se especifican parámetros de seguridad. Permiten bloquear a usuarios por su dirección IP y/o dominio, bloquear bots y arañas web (bots). Este archivo también sirve para modificar las URL s, permitiendo que éstas sean menos extensas (usan el módulo rewrite).
Configurar sitios web personales Sitios al estilo artemisa.unicauca.edu.co/~ecaldon Módulo userdir.mod: Permite crear sitios web personales 1. Crear enlace virtual de los módulos en /etc/apache2/mods-enabled: # cd /etc/apache2/mods-enabled # ln -s../mods-available/userdir.conf userdir.conf # ln -s../mods-available/userdir.load userdir.load Otra posobilidad es usar el comando a2enmod: # a2enmod userdir
Configurar sitios web personales 2. Incluir dentro del dominio los módulos que se acaban de ingresar. # Include /etc/apache2/mods-available/userdir.conf # Include /etc/apache2/mods-available/userdir.load En debian, estos módulos se incluyen automáticamente a través de las sentencias Include mods-enabled/*.load e Include mods-enabled/*.conf del archivo de configuración apache2.conf 2. Reiniciar el servidor web 2. Crear el directorio public_html en el directorio del usuario y un archivo index.html dentro de él.
Configurar sitios web personales Si se quiere cambiar el directorio por defecto para los sitios web personales, configurarlo en /etc/apache2/sites-enabled/000-default : UserDir web <Directory /home/*/web> Options Indexes Multiviews FollowSymLinks Allowoverride None Order allow,deny allow from all </Directory>
Sitios web con ssl Secure Sockets Layer = Capa de Conexión Segura. SSL utiliza criptografía para autenticar el servidor en una conexión. Certificados de seguridad, sitios el estilo https://www.imperialviolet.org/ #apt-get install openssl 1. Generar llave privada RSA de 1024 bits y usando triple DES #openssl genrsa -des3 -out servidor.key 1024
Sitios web con ssl 2. Guardar llave privada # mv servidor.key servidor.key.old # openssl rsa -in servidor.key.old -out servidor.key Enter pass phrase for servidor.key.old: <contraseña> writing RSA key
Sitios web con ssl 3. Crear un CSR (Certificate Signing Request): # openssl req -new -key servidor.key -out servidor.csr Country Name (2 letter code) AU:ES State or Province Name (full name) Some-State:Madrid Locality Name (eg, city) []:Madrid Organization Name (eg, company) Internet Widgits Pty Ltd: <Tu organización> Organizational Unit Name (eg, section) []: <Tu departamento> Common Name (eg, YOUR name) []: <Nombre de sevidor en el DNS o Direccion IP> Email Address []: <email> #No pongas nada en lo siguiente Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: <contraseña>
Sitios web con ssl Para crear un certificado autofirmado: #openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key - out servidor.crt Este certificado no será reconocido por los navegadores. 4. Guardar los archivos en el directorio /etc/apache2/ssl # mkdir /etc/apache2/ssl # mv servidor.key servidor.crt /etc/apache2/ssl # chmod 500 /etc/apache2/ssl/servidor*
Sitios web con ssl Configuración de Apache para SSL: 1. Instalar el módulo SSL en Apache #a2enmod ssl 1. Revisar el archivo /etc/apache2/ports.conf NamemeVirtualHost *:80 NameVirtualHost *:8080 Listen 80 Listen 8080 <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
Sitios web con ssl 2. Editar el archivo /etc/apache2/sites-available/default-ssl <VirtualHost *:443> ServerAdmin <<webmaster@tudomonio>> ServerName <<www.tudominio.com>> ServerAlias <<tudominio.com>> # Ficheros Index DirectoryIndex index.html index.php DocumentRoot /rutadominio # Configuracion SSL SSLEngine on SSLCertificateFile /etc/apache2/ssl/servidor.crt SSLCertificateKeyFile /etc/apache2/ssl/servidor.key #Fin configuracion SSL
Sitios web con ssl <Directory / > AllowOverride None Order allow,deny allow from all </Directory> # Ficheros Log LogLevel warn ErrorLog /turuta/log/error.log CustomLog /turuta/log/access.log combined </VirtualHost> 3. Editar la configuración del sitio: #a2ensite default-ssl #service apache2 restart
Ofrecer archivos vía http Sitios al estilo: http://gluc.unicauca.edu.co/archivos/ http://www.iered.org/archivos/ Archivos.header.html y.readme.html
Servidor web NGINX Servidor web y proxy para protocolos de correo electrónico. Paquetes y dependencias: # apt-get install build-essential libssl-dev libpcre3-dev # apt-get install nginx Configuraciones básicas: Agregar un script para iniciar nginx como un servicio sudo wget -O init-deb.sh http://www.linode.com/docs/assets/1538-init-deb.sh sudo mv init-deb.sh /etc/init.d/nginx sudo chmod +x /etc/init.d/nginx sudo /usr/sbin/update-rc.d -f nginx defaults
Servidor web NGINX Los archivos de configuración se encuentran en /etc/nginx/. Configuraciones de NGINX en el archivo /etc/nginx/nginx.conf user www-data; #Usuario que administra el servidor nginx worker_processes 4; #Cuantas instancias de nginx se pueden ejecutar pid /run/nginx.pid; #ID del proceso maestro de nginx events { worker_connections 768; # multi_accept on; }
Servidor web NGINX Sección HTTP de /etc/nginx/nginx.conf (1) http { #Configuraciones básicas sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream;
Servidor web NGINX Sección HTTP de /etc/nginx/nginx.conf (2) #Opciones de registro access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Configuraciones Gzip para reducir el consumo de ancho de banda ## gzip on; gzip_disable "msie6";
Servidor web NGINX: Host virtual 1. Crear un directorio en la ruta deseada para la raíz del sitio (/) # mkdir /var/www/innova 1. Agregar en /etc/hosts el nombre del dominio. Ej: direccion_ip www.innova.co 1. En /etc/nginx/sites-available/nombre_dominio ej: innova.co #cp /etc/nginx/sites-available/default /etc/nginx/sitesavailable/innova.co 1. Modificar /etc/nginx/sites-available/innova.co con la configuración propuesta (en el siguiente slide). 2. Crear enlace simbólico en /etc/nginx/sites-enable/ del sitio configurado #ln -s /etc/nginx/sites-available/innova.com /etc/nginx/sites-enabled/innova.com
Servidor web NGINX: Host virtual server { listen 169.254.7.16:80; server_name www.innova.co; location / { root /var/www/innova/; index index.html; autoindex on; } location /shbox/ { proxy_pass http://127.0.0.1:4200; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/innova$fastcgi_script_name; } }
Servidor web NGINX: Host virtual Para la ejecución de scripts php: Instalar php5-fpm php5-cli En /etc/php5/fpm/php.ini cambiar o cgi.fix_pathinfo=1 => cgi.fix_pathinfo=0 En /var/www/innova/ crear el archivo info.php con: o <?php phpinfo();?> Reiniciar los servicios: o # service nginx restart o #service php5-fpm restart Ir al sitio http://www.innova.co/info.php
Servidor web NGINX: Host virtual Ejemplo configuración ssl en nginx: server { listen 443; server_name www.innova.co innova.co; location / { root /var/www/test/a; index index.html; autoindex off; } ssl on; ssl_certificate /etc/apache2/servidor.crt; ssl_certificate_key /etc/apache2/servidor.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+ LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; } location /shbox/ { proxy_pass http://127.0.0.1:4200; }
Servidor web NGINX: Host virtual Probamos la conección ssl con shellinabox: #apt-get install shellinabox ir al sitio 127.0.0.1:4200 o shell vía navegador Con la configuración ssl anterior, ir al sitio http://www.innova.co/shbox e inmediatamente redirigirá hacía 127.0.0.1:4200
Compartir archivos con Windows usando Samba Samba: Conjunto de servidores que implementan los protocolos SMB/CIFS Y NetBIOS/WINS para unix. Se puede utilizar para compartir archivos con windows o entre máquinas Unix. Servicios: smbd: Para autenticación, autorización y ficheros e impresoras compartidas. nmbd: Servidor de nombres. Para recorrido de los recursos compartidos y servidor WINS. winbindd: para utilizar cuentas de usuario en un dominio Microsoft.
Compartir archivos con Windows usando Samba Se encuentra en /etc/samba/smb.conf La sintaxis de los archivos de configuración de Windows es retornada por secciones: [global]: Ajustes globales del servidor. [homes]: Directorios de usuarios compartidos [printers]: Impresoras compartidas Ej: [global] workgroup = MYGROUP #nombre de grupo de trabajo netbios = posten #nombre netbios de la máquina (la que actua como servidor) security = share #método de autenticación
Configurando samba Hacer una copia del archivo /etc/samba/smb.conf # cd /etc/samba # mv smb.conf smb.conf.master # testparm -s smb.conf.master > smb.conf
Configurando samba Ejemplo del archivo smb.conf [global] workgroup = WORKGROUP netbios name = MOONLIGHT security = user server string = %h server map to guest = Bad User obey pam restrictions = Yes pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully*. unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 dns proxy = No usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d idmap config * : backend = tdb [homes] comment = Home Directories valid users = %S create mask = 0700 directory mask = 0700 browseable = No
Configurando samba Adicionar usuarios a la BD de samba: #smbpasswd -a edycop Adicionar el usuario al grupo users del sistema (o cualquier otro grupo): #adduser edycop users O editar el archivo /etc/group, buscar users y adicionar al final edycop Seleccionar el directorio a compartir, ejemplo /home/edycop/musica Luego agregar al final del archivo smb.conf la configuración para compartir el directorio seleccionado:
Configurando samba [musica-edycop] comment = Directorio personal de Edwin Caldon path = /home/edycop/musica read only = Yes valid users = @users read list = @users users es el grupo predeterminado del sistema, puede ser cualquier grupo Probar la configuración y reiniciar el servicio: #testparm #service samba reload
Probando samba Comprobar el servicio con: $smbclient -L localhost -U% Desde un sistema GNU/Linux se puede usar Nautilus, en la barra escribir: smb://ip_del_servidor_samba Desde un sistema Windows, presionar las teclas win+r y escribir: \\ip_del_servidor_samba Más ejemplos de configuraciones en: http://blog.desdelinux.net/samba-servidor-independiente-en-debian/
Fuente imagen: elaboración propia
Fuente imagen: elaboración propia
Referencias Linux: Preparación para la certificación LPIC-1. Disponible parcialmente en Google books http://books.google.com.co/books?id=rppjaq7xzqac&dq=preparaci%c3%b3n+para+la +certificaci%c3%b3n+linux+sebastien+rohaut+pdf&source=gbs_navlinks_s. Capítulo J FTP p. 479.htaccess http://www.expresionbinaria.com/archivo-htaccess-que-es-y-como-funciona/ Usermod http://www.josedomingo.org/web/mod/page/view.php?id=1950 SSL http://joseantoniovilar.com/2013/07/ssl-en-apache2-y-ubuntu-en-unos-pocos-pasos/ nginx https://www.linode.com/docs/websites/nginx/basic-nginx-configuration https://access.redhat.com/documentation/en- US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-apache-config.html https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-phplemp-stack-on-ubuntu-12-04 nginx+php http://blog.desdelinux.net/samba-servidor-independiente-en-debian/ samba @Edwin Caldon, @Melissa Muñoz
Ejercicio Ejercicio, instalar mediagoblin usando nginx: http://www.ochobitshacenunbyte.com/2014/09/02/mediagoblin-la-plataformaaudiovisual-libre/