|
CONFIGURACIÓN DE UN SERVIDOR GNU/LINUX |
|
Nombre: Daniel Clemente Laboreo Tutor: Joan Canudas Curso: 2º BACH. C Centro: IES Bruguers (Gavà) Fecha: Enero 2003 http://www.danielclemente.com/servidor/ |
Índice
1 INTRODUCCIÓN 1
1.1 Contexto 1
1.2 Justificación 2
1.3 Objetivos 3
2 CONFIGURACIÓN DEL SERVIDOR 4
2.1 Preparación 4
2.1.1 Estado inicial de los ordenadores 4
2.1.2 Métode a seguir 5
2.1.3 Elección del ordenador 6
2.2 Instalación de Linux 7
2.2.1 Elección de la distribución 7
2.2.2 Proceso de instalación 12
2.2.3 Configuraciones básicas 15
2.3 Servicios básicos 18
2.3.1 Integración con la red de Windows 18
2.3.2 Servidor web para la Intranet 25
2.3.3 Servidor de FTP 28
2.3.4 Configuración del proxy 32
2.4 Servicios secundarios 39
2.4.1 Soporte de PHP en la web 39
2.4.2 Soporte de CGIs en la web 42
2.4.3 Estadísticas de acceso a la web 44
2.4.4 Conexiones por Secure Shell 46
2.4.5 Web para Internet 48
2.4.6 Servidor DNS 52
2.4.7 Firewall 56
3 CONCLUSIONES 64
3.1 Evaluación general 64
3.2 Otras utilidades 66
4 ANEXOS 67
4.1 Comandos importantes 67
4.2 Seguridad 70
4.3 Mantenimiento 72
4.4 Glosario de términos 73
4.5 Licencia FDL de la GNU 77
5 BIBLIOGRAFÍA 78
Soy un alumno del instituto IES Bruguers, de Gavà (Barcelona), usuario habitual de Linux, programador y webmaster. Mi Trabajo de Investigación consistirá en el reciclaje de un ordenador viejo de una de las aulas de informática para convertirlo en un ordenador central del instituto que ofrezca diferentes servicios a alumnos y profesores; y sólo utilizando Linux y otro software libre de código abierto.
El ordenador pondrá al alcance de los alumnos y visitantes una página web con contenidos dinámicos, diferentes formas de compartir archivos entre los departamentos, servicio de proxy para acelerar la navegación, y otras características avanzadas como los dominios DNS, las conexiones SSH al ordenador, el filtrado de paquetes, el PHP y los CGIs.
Todo esto se hará sin tener que comprar programas profesionales, ya que todo el software usado es gratuito y legal. Además, hará el instituto mucho más profesional al utilizar un sistema operativo del nivel de Linux.
El trabajo está orientado a lectores que ya tengan una cierta experiencia en cualquier distribución de Linux utilizando la consola de comandos, o, al menos, que tengan interés por aprender (esto es lo más importante). No se explicarán las órdenes básicas ya que hay muchos tutoriales más apropiados en Internet.
También supondremos que el lector entiende algo de inglés (el inglés relacionado con la informática), porque así los conceptos quedarán más claros.
He escogido este tema por muchos motivos::
En primer lugar, me gusta mucho Linux -el único sistema operativo que uso- y pienso que todos deberían saber que existe y que hay alternativas a Windows; claro está que cada uno usa el sistema operativo que quiere, pero mucha gente no quiere saber nada sólo porque piensan que “eso es sólo para expertos”. Este trabajo no servirá para demostrar que sea muy fácil de usar, porque precisamente usaremos una de las distribuciones más complicadas: Debian. Mandrake o Knoppix son más adecuadas para los principiantes, pero no para la finalidad de este trabajo.
También he hecho el servidor porque he visto que hacía falta un ordenador central en una red cada vez más grande; hacía falta un lugar común que sirviese para compartir archivos entre los diferentes departamentos, y para simplificar las tareas de mantenimiento (instalación de un nuevo programa en cada máquina, actualización del antivirus, etc). Además, algunas instalaciones lo requerían (por ejemplo, para alcanzar la velocidad máxima de la línea ADSL había que montar un proxy).
Además, creo que poner un sistema operativo como Linux, para el que existen miles de aplicaciones profesionales desde hace tiempo, elevará el nivel de las instalaciones informáticas del centro, ya que abrirá las puertas a muchísimas posibilidades para los alumnos y profesores: se podrán hacer prácticas de programación en cualquier lenguaje, comprobar los conocimientos sobre redes y telecomunicaciones, instalar filtros e instrumentos de protección como en los ordenadores de las grandes empresas, monitorizar el estado de toda la red, y cualquier otra cosa que podamos imaginar. El ordenador será del mismo nivel que los que se pueden encontrar en las universidades de informática.
El trabajo también servirá para contribuir a la documentación de Linux en catalán (su idioma original), pero esta vez con un caso práctico hecho por apartados, y con las opiniones, problemas, ideas y errores que han aparecido durante su realización.
Finalmente, este trabajo también lo he hecho con intención de ayudar a los futuros informáticos que están aprendiendo y que quieren conocer cosas nuevas. Lo hago porque a mí me hubiera gustado enterarme antes de la existencia de Linux.
¿Qué se quiere conseguir con el trabajo? No sólo es montar un ordenador que lo haga todo, sinó que...:
se quiere mejorar la calidad de las instalaciones del centro, utilizando programas profesionales
se quiere promover el uso de Linux y del software libre, siguiendo el ejemplo de Debian (la distribución menos comercial de todas)
se quieren aprovechar los ordenadores viejos que no funcionan con otros sistemas operativos
y, claro, se quiere montar un ordenador con las siguientes características:
que sea fácil de usar
con servidor web: uno para Internet y otro para la red interna
que el servidor web tenga soporte para scripts CGI (contadores, por ejemplo) y lenguaje PHP
que también muestre gráficamente las estadísticas de acceso a la página
con servidor de DNS para no tener que recordar IPs
con servidor de FTP para poder compartir archivos
que esté integrado en la red de Windows y que pueda compartir carpetas
que acepte conexiones remotas para administrarlo desde cualquier lugar
que esté protegido contra alumnos traviesos...
La red del instituto Bruguers consta de dos aulas, una en cada piso, más los ordenadores de los diferentes departamentos que hay en ambos pisos. El servidor se montará en una de las dos aulas de informática.
Los ordenadores no son todos iguales; hay diferentes marcas y modelos: algunos tienen mejor hardware que otros o no tienen determinados periféricos (por ejemplo, no todos tienen tarjeta de sonido). Todos utilizan el sistema operativo Windows 98, pero incluso el idioma es el catalán en algunos y el castellano en otros.
Hay un ordenador que no usa Windows 98 sinó Windows NT 4 y que gestiona la red y los diferentes grupos de trabajo en los que se clasifican los ordenadores. Cuando integremos nuestro servidor en esta red, lo tendremos en cuenta y lo pondremos junto a este servidor NT.
Una nota curiosa es que en la red no sólo hay ordenadores sinó que también hay otros periféricos conectados, por ejemplo un JetDirect y una fotocopiadora (con IP y página de configuración).
Todo esto es sólo para ver que, aunque los ordenadores y dispositivos son muy diferentes entre ellos, todos tienen algo en común: forman parte de la misma red. Por tanto, se comportarán de manera idéntica al acceder al servidor.
Esta red es de clase C (255 ordenadores como máximo), y su dirección IP es 192.168.0.0./24 (o sea, que la máscara de subred es 255.255.255.0).
Toda la red está conectada a Internet mediante 2 líneas ADSL de 2 Mbits/s cada una, pero una de ellas está desactivada. La que funciona está controlada por un router Cisco al que no podemos modificar la configuración porque pertenece a la xtec (Xarxa Telemàtica Educativa de Catalunya). Por lo tanto, para hacer un servidor web donde se pueda entrar desde Internet habrá que pedir permiso a esta entidad.
El trabajo práctico está dividido en tres bloques: instalación, servicios básicos y servicios secundarios.
Instalación: escogeremos la distribución más apropiada, borraremos todo lo que haya en el ordenador y pondremos Linux con la configuración mínima. Después empezaremos a cambiar algún parámetro y a preparar el sistema para la parte difícil.
Servicios básicos: haremos que el ordenador haga las tareas más importantes según las necesidades de la red. Lo integraremos en la red de Windows con el paquete Samba, haremos que sea un servidor web (para la red interna) con Apache, pondremos un servidor FTP con pure-ftpd y haremos que funcione como proxy para poder controlar las conexiones y además acelerar la navegación.
Servicios secundarios: ampliaremos los de la primera parte y añadiremos otros. Por ejemplo, haremos que el servidor web acepte conexiones tanto de la red interna como de Internet y que las trate de forma distinta. También lo mejoraremos dándole soporte para PHP y CGIs y subiremos una página a la que podremos entrar para ver estadísticas sobre las visitas al servidor (páginas más visitas, número de visitas al día, etc). Haremos que el servidor acepte conexiones por SSH (parecido a Telnet pero más seguro) con el fin de administrar el PC desde cualquier lugar. Otros puntos muy importantes de esta parte son la configuración del servicio DNS (traductor de nombres de dominio a las IPs adecuadas) y el cortafuegos (que protegerá el servidor de los curiosos).
También pensaremos en el mantenimiento del ordenador una vez acabada toda la instalación, y en cómo actuar cuando empiece a quedarse anticuado o surjan problemas.
No hace falta un ordenador muy potente para que haga de servidor de una red pequeña.
Aunque podamos ver anuncios de servidores con varios GigaBytes de memoria RAM, dos o más procesadores que funcionan a la vez, y mucho más disco duro que un ordenador estándar, también es cierto que muchos particulares y pequeñas empresas compran especialmente un ordenador de segunda mano para hacer un servidor.
¿Cómo se puede explicar esta diferencia tan importante? No es muy difícil: todo depende del uso que le queramos dar al servidor. Las grandes empresas reciben cada día miles de visitas a su página web, y tienen que controlar el uso que hacen su red los cientos de ordenadores que acceder constantemente a los servicios de impresión, proxy, firewall, correo electrónico, etc.
En cambio, nuestro servidor no siempre estará usándose, y cuando tenga que responder a alguna conexión, servir páginas web o ejecutar procesos de los usuarios conectados difícilmente llegará al 100% de uso. Además, Linux -a diferencia de otros sistemas operativos muy usados- aprovecha perfectamente los recursos del ordenadores, pudiendo ejecutarse hasta en 386 con 4 Mb de RAM y menos de 100 Mb de disco duro.

El
ordenador asignado
Procesador Pentium I a 100 MHz
48 Mb de memoria RAM
Disco duro de 1'2 Gb
CD-ROM y disquetera.
Tarjeta de red Realtek 8139
Pantalla a color, teclado y ratón estándars.
Este ordenador tiene todo lo que necesitamos y más para funcionar como servidor de un instituto. No usaremos el CD-ROM ni el ratón (aunque se puede), porque con pantalla, teclado y la red ya lo podemos hacer todo.
Como Linux es software libre que puede ser modificado y adaptado por todos, se han creado muchas versiones distintas del sistema operativo, tantos que ni se pueden contar. Hay distribuciones especializadas en aspectos muy concretos, y también las hay dirigidas al público general.
En principio, para el uso que le daremos, tendrá que cumplir las siguientes condiciones:
Seguridad: ¡muy importante! Ningún sistema operativo es 100% seguro (tampoco Linux) y hemos de estar seguros de que ningún hacker pueda acceder a nuestro servidor. Para mantener la seguridad habrá que hacer actualizaciones del sistema muy a menudo.
Fácil de actualizar: tendremos que tener siempre las últimas versiones de los programas para corregir todos los posibles errores.
Estabilidad: no queremos que se 'cuelgue': como es el ordenador central, de él depende toda la red interna y algunos servicios externos. Tenemos que tener en cuenta que puede tardar mucho en encenderse.
Simplicidad: no queremos nada del otro mundo: para lo que queremos no hace falta ni usar el modo gráfico. Usaremos sólo órdenes desde la terminal. Así nos ahorraremos los problemas que da la configuración de la tarjeta gráfica.
Como no tenemos ninguna necesidad extremadamente especial, compararemos sólo las 10 distribuciones más utilizadas. Las versiones analizadas quedan anticuadas en pocos meses, pero la filosofía de los programadores y el tipo de distribución de cada una seguirá siendo el mismo.
|
Distribución |
|
|
|
|
|
|
|
|
|
|
|||
|
Mandrake |
Red Hat |
Debian |
Gentoo |
SuSE |
Slackware |
Lycoris |
Beehive |
Turbolinux |
Caldera |
||||
|
8.2 Download |
7.3 Standard |
3.0r0 Woody |
1.2 Linux |
8.0 Personal |
8.1 Linux |
Amethyst2 Desktop/LX |
0.5.0 Linux |
8.0 Workstation |
3.1.1 Workstation |
||||
|
Precio (US$) |
25 |
60 |
- |
- |
40 |
40 |
20 |
- |
124 |
99 |
|||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Origen |
Francia |
USA |
- |
USA |
Alemania |
USA |
USA |
USA |
Japón |
USA |
|||
|
Soporte |
Soporte web 30 días para la instalación |
Soporte web 30 días para la instalación |
Listas de correo |
Listas de correo, foros |
Soporte web 60 días para la instalación |
En la instalación, y soporte técnico limitado |
Soporte por e-mail 60 días |
Listas de correo |
Para TurboTools; ilimitado para la instalación |
Soporte web 60 días para la instalación |
|||
|
CDs |
3 |
7 |
7 |
1 |
3 |
4 |
3 |
1 |
7 |
6 |
|||
|
Versión del kernel |
2.4.18 |
2.4.18 |
2.2.20 |
2.4.19 |
2.4.18 |
2.4.18 |
2.4.18 |
2.4.18 |
2.4.18 |
2.4.13 |
|||
|
Instalación |
Gráfica |
Gráfica |
Texto |
Texto |
Gráfica |
Texto |
Gráfica |
Texto |
Gráfica |
Gráfica |
|||
|
Gestor por defecto |
KDE |
Gnome |
- |
- |
KDE |
KDE |
KDE |
KDE |
KDE |
KDE |
|||
|
Tipo de paquetes |
rpm |
rpm |
deb |
src |
rpm |
tar.gz |
rpm |
tar.gz |
rpm |
rpm |
|||
Es curioso, pero, de estas diez, sólo las cinco primeras son las realmente conocidas -especialmente Red Hat, Suse y Mandrake- por su facilidad de instalación y uso. Es bueno que usemos una distribución conocida porque así nos costará poco encontrar manuales, ayuda o soporte técnico.
No obstante, vamos a compararlas punto por punto:
Precio: los precios que vemos en la tabla son sólo para las distribuciones compradas en tiendas. Estas versiones incluyen un gran número de CDs con todos los programas que puedan hacer falta, toda la documentación disponible, y soporte técnico. La alternativa a comprar estos paquetes es bajarse los CDs de Internet. Esta vía es exactamente igual de legal, con la diferencia de que no obtenemos documentación impresa ni soporte técnico. Por tanto, el precio lo podemos ignorar.
Soporte: el soporte técnico sólo está disponibles para los que compren el paquete entero en una tienda. Como podemos encontrar toda la información en Internet, no nos hará falta soporte.
Número de CDs: incluso en las distribuciones de 7 CDs y más, sólo son imprescindibles los dos o tres primeros. Además, como tenemos una conexión a Internet rápida y queremos estar actualizados, siempre que necesitemos un programa lo bajaremos directamente. Por tanto, es otro criterio que podemos eliminar.
Versión del kernel: la versión del núcleo del sistema operativo es importante sobre todo cuando tenemos problemas de hardware. Necesitaremos una 2.4.18 o superior. Si no es el caso, hemos de pasar por el tedioso proceso de bajar un kernel nuevo, compilarlo y probarlo hasta que funcione. Hay que destacar la excepción de que sistemas como Debian tengan kernels precompilados listos para ser bajados e instalados sin problemas.
Tipo de instalación: como utilizaremos el Linux en modo texto (consola), la instalación también será así.
Gestor de ventanas: como no usaremos el modo gráfico no nos hace falta. En caso de que más tarde quisiéramos poner uno, uno sencillo sería suficiente.
Tipo de paquetes: para instalar los programas que nos bajemos, lo podemos hacer de diferentes formas:
tar.gz: estos ficheros comprimidos -llamados Tarball- contienen el código fuente del programa en lenguaje C o C++. Para instalarlo lo tendremos que compilar para nuestro modelo de ordenador, proceso que puede tardar varias horas dependiendo del tamaño del programa, y que también puede dar algunos problemas. Funciona en todas las distribuciones Linux, por eso todos los programas que busquemos estarán como mínimo en este formato.
RPM: formato de ficheros originariamente para Red Hat, pero que se ha adaptado a otras distribuciones. Es rápido y fácil de usar, pero tiene los inconvenientes de que hemos de encontrar los paquetes para nuestro modelo en concreto de ordenador. Además, suelen dar problemas de dependencias.
DEB: formato propio de Debian. Similar al RPM, pero más seguro. La gran ventaja que presenta es el llamado apt, que sirve para gestionar los paquetes instalados y añadir nuevos o quitar otros sin prácticamente ningún esfuerzo.
Filosofía: algunas distribuciones (sobre todo Suse, Red Hat y Mandrake) son muy comerciales: se anuncian por Internet, sacar a la venta packs y nuevos productos, ediciones especiales o ofrecen más soporte técnico. Por otra parte, distribuciones como Debian siguen la filosofía del software libre: no hay ninguna empresa detrás, sinó que está formada por voluntarios de todo el mundo que trabajan y se organizan conjuntamente. Como no hay presión de comercial, no están obligados a sacar nuevas versiones, y se dedican más a comprobar que las que sacan funcionen perfectamente.
Otras características: cada distribución está orientada a un tipo de usuario en concreto. Por ejemplo, Red Hat está orientada a grandes empresas, Mandrake a principiantes y Gentoo a profesionales. Esta última no es apropiada para nuestro caso porque hay que compilar cada uno de los programas que se instalan, y eso nos haría perder muchas horas.
Después de haber hecho esta comparación, creo que la distribución más apropiada para el instituto es Debian, porque, además de representar al software libre, es simple y muy estable. Es una de las distribuciones más aptas para hacer de servidor. Aparte de ésta, también se usa mucho FreeBSD, que es un sistema basado en UNIX (como Linux).
No utilizamos Mandrake, Red Hat ni Suse por ser demasiado orientadas a usuarios domésticos y principiantes. Gentoo es demasiado complicada y difícil de configurar, y Slackware, Lycoris, Beehive, Turbolinux y Caldera son poco conocidas (si tuviésemos un problema sería difícil encontrar medios para solucionarlo).
Debian desarrolla a la vez tres ramas de su sistema operativo: la versión estable, la inestable y la 'en pruebas'. Las diferencias entre versiones son:
Estable (“stable”): la más recomendada. Está muy probada y teóricamente no debería fallar nada.
Inestable (“unstable”): la que van mejorando los programadores cada día. No es seguro que funcione perfectamente. Cuando pasa un tiempo, se dedican a probarla a fondo (se convierte en 'en pruebas') hasta que llega a ser 'stable'.
En pruebas (“testing”): la versión inestable bloqueada, a la cual no añaden nada más y sólo se dedican a probarla a fondo. Cuando, después de unos meses, ven que puede salir al público, la convierten en 'stable'.
Cada versión lleva un nombre clave (Potato, Buzz, Rex, Bo, Slink, etc), que, por cierto, son los nombres de los personajes de la película Toy Story. En el momento de escribir esto (septiembre de 2002), la versión estable es la Woody (es la versión 3.0), la 'en pruebas' se llama Sarge (será la versión 3.1) y la inestable se llama Sid.
La que usaremos para el servidor será la versión estable; no podemos arriesgarnos probando una inestable o una 'testing' porque pueden tener bugs y otros problemas con la seguridad. Igualmente, no hemos de olvidar actualizar bastante a menudo el sistema.
Por tanto, nos decidimos por una Debian estable.
Podemos instalar Debian de diversas maneras, de las cuales las más comunes son los CDs con las imágenes y la instalación por Internet. También lo podemos comprar en alguna tienda por un precio muy reducido. Toda la información la encontraremos en http://www.debian.org, (en el pie de página podemos cambiar el idioma a castellano o catalán).
Como no nos hace falta más que los programas básicos, es más que rentable hacer la instalación por Internet, ya que si nos tuviésemos que bajar un CD entero (650 Mb) no lo aprovecharíamos. Además, no nos hará falta usar una grabadora de CDs, sinó sólo unos cuantos disquets vacíos.
El proceso es sencillo:
Bajamos las imágenes de los disquets del mismo FTP de Debian. Las imágenes de tamaño disquet para la versión estable y un procesador x86 las encontraremos en:
ftp://ftp.debian.org/debian/dists/stable/main/disks-i386/current/images-1.44
En este directorio hay muchos ficheros .bin de
1'4 Mb cada uno. Para empezar necesitamos bajar los siguiente;
driver-1.bin,
driver-2.bin,
driver-3.bin,
driver-4.bin,
rescue.bin y
root.bin.
NOTA: Si podemos usar otro ordenador a la vez, no hace falta usar un disco distinto para cada fichero BIN: podemos hacerlo sólo con dos si los vamos turnando de manera que mientras uno se está leyendo el otro se esté grabando, y viceversa.
Grabamos las imágenes en disquetes
de 1'4 Mb. Esto lo podemos hacer desde Linux con el comando dd
if=nombre-de-la-imagen.bin of=/dev/fd0 o desde Windows
con programas como rawrite2 u otros que transfieran el archivo
byte por byte hacia el disquete.
Insertamos el disquete correspondiente a
rescue.bin y
encendemos el ordenador. Cuando aparezca boot:
pulsamos Intro. Al cabo de un tiempo nos pedirá el
disquete correspondiente a root.bin
y continuará la instalación.
Vamos siguiendo la instalación de forma normal, fijándonos especialmente en los siguientes puntos:
Particiones: son necesarias dos: una swap
(tipo 82) no muy grande (más o menos el mismo número
de Mb que la RAM del ordenador, aunque un valor entre 50 y 100 Mb.
ya va bien), y el resto del disco destinado a la otra partición,
de tipo Linux Native (número 83), con punto de montaje en la
raíz (“ /
“). Si es posible, mejor crear primero la Native y luego la
swap para poder llamarlas después /dev/hda1
y /dev/hda2
respectivamente. También hay que marcar la Native como
bootable.
Cuando pregunte dónde está el
kernel, le diremos que en la disquetera: /dev/fd0
y vamos metiendo los disquets que nos pida.
Módulos del kernel: como mínimo
hay que añadir ahora los drivers para la tarjeta de red. Si
no lo hacemos, no podremos instalar nada desde Internet. En nuestro
caso añadiremos el módulo rtl8139
de la categoría net.
Si queremos añadir alguno más (para usb, sistemas de
archivos, impresoras, dispositivos especiales, etc) lo podemos
hacer ahora, aunque una vez instalado también es muy fácil
añadir y quitarlos con modconf.
Nombre de host: lo podemos cambiar en
cualquier momento, pero mejor decidir uno ahora y no cambiarlo. Por
ejemplo, bruguers.
IP del ordenador: normalmente se pone la IP de la red, acabada en un número pequeño. Por ejemplo, en nuestro caso podemos poner 192.168.0.2 (192.168.0.1 es para el router).
Lilo: no hace falta porque sólo tenemos un sistema operativo, pero tampoco pasa nada por instalarlo. Irá bien si queremos poder arrancar con diferentes kernels.
Disco de arranque: no hace falta, pero siempre va bien tener uno.
Después de reiniciar, continuaremos con la personalización del sistema. Seleccionaremos las opciones recomendadas, asegurándonos de activar la opción de contraseñas shadow.
A la hora de crear usuarios, tendremos que escribir la contraseña de root., el usuario más importante del sistema. Es extremadamente importante escoger una buena contraseña. Además, por seguridad no trabajaremos siempre con el usuario root (es peligroso) sinó que nos crearemos otra cuenta de usuario normal (con nuestro nombre o nick).
Cuando nos pregunte desde dónde
instalar los paquetes, le decimos que por ftp y escogemos uno de
la lista (por ejemplo, ftp.debian.org). Entonces, Debian
utilizará apt
para bajar las últimas versiones de cada programa.
Tendremos que decidir qué grupos de programas decidimos
instalar. Seguiremos estas indicaciones:
No nos harán falta las X (para el modo gráfico), pues todo lo necesario se puede hacer desde consola.
Juegos y programas de ocio tampoco; con la configuración del Linux tendremos entretenimiento para un buen rato.
Servidores web, DNS, mail, etc. los instalaremos individualmente en los diferentes apartados, o sea que tampoco deben ser marcados.
Herramientas C y C++: son básicas para compilar los programas. Se tienen que instalar.
Entorno en español: opcional. Si lo marcamos, algunas páginas de ayuda saldrán en español, pero quizás no estén tan actualizadas.
Marcando pocos paquetes nos aseguramos de que no quede instalado nada que no nos haga falta. Si no lo hacemos así, al acabar la instalación serían tantos los servicios disponibles que alguna persona se podría aprovechar y entrar al servidor sin permiso.
Cuando todo esté listo, aparecerá la lista de paquetes a bajar y lo que ocupan. Le decimos que continúe y dejamos el ordenador encendido mientras baja cada paquete junto con sus dependencias. Cuando acabe, tendremos que configurar algunos mientras que otros se descomprimirán e instalarán automáticamente. Si pregunta cómo configurar el correo, le diremos que no lo queremos configurar; así evitaremos muchos bugs innecesarios.
Al final acabaremos en la pantalla de login, que aparecerá cada vez que encendamos el ordenador para pedirnos el nombre de usuario y la contraseña.
Ahora que tenemos el sistema operativo instalado hay que hacer unas configuraciones sencillas, que deben hacerse antes de empezar a poner programas y demonios. Lo primero que hace falta es identificarse como root (con la contraseña que pusimos en la instalación).
Lo que haremos será:
Configuración de apt: apt es el sistema de control de paquetes exclusivo de Debian. Cada vez que haga falta instalar un programa, sólo habrá que escribir su nombre y apt se conectará al FTP de Debian, bajará la última versión y sus dependencias, haciendo la instalación sin ningún problema.
Por defecto ya tenemos una buena
configuración de los servidores en el fichero
/etc/apt/sources.list,
pero podemos ejecutar apt-setup
(como root) y decidir según nuestras preferencias si
queremos tener software totalmente libre (estilo Debian) o
aceptamos cualquier programa, aunque tenga partes de código
cerrado. También hemos de escoger un servidor.
Preferiblemente usaremos el de Estados Unidos ftp.debian.org (el
central) porque los situados en España suelen ser más
lentos.
Actualización
de paquetes: una vez definidos los
servidores de apt, haremos apt-get
update para actualizar la información sobre los
nuevos paquetes con el servidor. No se instalará nada
aún; sólo se sincronizan.
Para actualizar los paquetes instalados con
las nuevas versiones disponibles hay que hacer un apt-get
upgrade -u (el -u es para mostrar los nombres). Después
de mostrar la lista de paquetes a bajar, respondemos (Y/n) y
sólo habrá que esperar a que acabe. Puede que
mientras los instale aparezca alguna pregunta, pero normalmente
da suficiente información para saber qué hay que
responder.
Si queremos algún paquete adicional
sólo hay que hacer apt-get
install nombre. Podemos instalar programas en cualquier
momento, a medida que los necesitemos. En el anexo hay una lista
de programas recomendados. También es recomendable
instalar ahora gpm
para poder utilizar el ratón en la consola (se
configura con gpmconfig).
Locales:
podemos decirle a Debian que preferimos los programas y la ayuda
en español haciendo un dpkg-reconfigure
locales y seleccionando es_ES
y es_ES@euro.
Así podremos usar acentos y
otros símbolos especiales como el del euro, además
de ver la mayoría de mensajes y programas en español
y no en inglés.
Hora
del sistema: no es sólo para poder
consultarla y no tener que mirar el reloj: en Linux hay muchas
acciones que dependen del tiempo. Por ejemplo, at
y crontab
ejecutan tareas programadas puntuales o periódicamente.
Podemos ver la hora y la fecha con date.
Recordamos que nuestra zona horaria es la CET, y que tiene un
desfase de +1 h. respecto de la UTC
(que podemos ver con date
-u y que debe ser de una hora menos que nuestra hora).
Para cambiar el día y la hora podemos
poner comandos como: date
-s “25/12/2003” o date
-s “13:15:42”
Tareas
programadas: hay acciones que se ejecutan
cada día, cada semana o cada mes; el problema es que
quizás el ordenador no esté encendido a las horas
que hay puestas por defecto (6:25, 6:47 y 6:52). Sólo hay
que cambiar en /etc/crontab
el segundo número de cada línea -que representa la
hora de una acción programada- por una más
apropiada que a las 6 de la mañana; por ejemplo, las 10
de la mañana.
Hagamos
más cómoda la shell: al
principio de /etc/profile
podemos poner las líneas que se
ejecutarán cada vez que iniciemos sesión. Algunos
comandos útiles que podemos poner son alias
ls=”ls --color” para ver el listado de
ficheros en colores sólo escribiendo ls,
o setleds +num
para activar NumLock. Podemos definir muchos más alias,
como alias “cd..”=”cd
..”, alias
i=”apt-get install”, alias
u=”apt-get update && apt-get upgrade -u”,
y muchos más. Para órdenes más largas,
mejor hacer un script y colocarlo en el PATH (por ejemplo en
/usr/bin).
Protección
de algunos archivos importantes:
hay archivos que un usuario normal no tiene que necesitar ver.
Por eso quitaremos los permisos de lectura, escritura o
ejecución de cada uno de ellos, usando el comando
chmod.
chmod
o-x /etc/passwd /etc/exports /etc/*netd.conf
( /etc/passwd
tiene información sobre los usuarios del sistema y sus
privilegios, /etc/exports
dice a qué directorios se puede acceder remotamente, y
/etc/inetd.conf
o xinetd.conf
dice qué servicios se cargan cada vez que se enciende el
PC).
Instalación
de un kernel nuevo, si hay: no es
necesario si no tenemos problemas con el actual, pero es
recomendable porque soluciona problemas de seguridad que afectan
a todo el sistema. Además, algunas cosas cambian, como
por ejemplo la forma de implementar las reglas del cortafuegos
que montaremos (con el 2.4). Podemos ver la versión del
kernel actual con uname
-a. Los nuevos kernels se encuentran precompilados, o
sea, que sólo hace falta bajarlos con apt-get. Para saber
el nombre y tipo de kernel que necesitamos, podemos buscar en la
base de datos local de paquetes con apt-cache
search kernel-image y fijarnos en todos los disponibles.
La versión ha de ser superior al actual y la plataforma
ha de ser la de nuestro sistema (p. ej. 386 para un 80386, 586
para Pentium I, 686 para Pentium 2, 3, 4 y Celerons, k6/k7 para
AMD, etc.). No hay que bajar una versión SMP ya que estas
siglas son de “Symmetric Multiprocessor”, cosa que
no tenemos.
Pero antes hay que hacer una pequeña
modificación en /etc/lilo.conf
(si no la hacemos ahora nos lo recordará al bajar el
kernel). Se trata de buscar la línea donde pone
image=/vmlinuz
y añadir justo debajo (o en el mismo párrafo) la
opción initrd=/initrd.img
. Entonces ya podemos hacer un apt-get
install kernel-image-versión-arquitectura (ej.
apt-get install
kernel-image-2.4.18-686) y pedirle que nos cree el enlace
simbólico initrd.img cuando lo pregunte.
A partir de ahora el Lilo (gestor de
arranque) nos pedirá si queremos entrar en Linux o en
LinuxOld, la versión antigua del kernel. Si no nos
funciona una podemos entrar usando la otra. Es recomendable
reiniciar ahora y probar el nuevo kernel; si no funcionase
habría que hacer predeterminado al otro modificando
/etc/lilo.conf
Como en el instituto los ordenadores están conectados mediante una red y un servidor Windows NT, sería interesante incluir también nuestro servidor Linux para poder compartir carpetas o acceder a las de otros ordenadores. También pondremos al alcance del servidor las impresoras compartidas en la red, aunque habrá que configurarlas en Linux.
Todo esto lo haremos fácilmente y de forma segura con las herramientas que nos ofrece Samba. Samba es una implementación para Linux del protocolo SMB (Server Message Block), creado por IBM en 1985, redefinido después por Microsoft, y presente en otros sistemas operativos. Con Samba podremos acceder (por TCP/IP) a servidores SMB como cliente, o montar un servidor SMB propio.
Como siempre, hacemos un apt-get
install samba y decimos que sí queremos que nos haga
unas preguntas para adaptar el fichero de configuración
smb.conf, aunque
después los revisaremos.
Nos preguntará las siguientes opciones:
Grupo de trabajo: hay que
poner el mismo que el de las otras máquinas Windows. Para
evitar problemas, mejor lo ponemos tal como sale en los demás
ordenadores (probablemente esté todo en mayúsculas).
En nuestro caso es 99PIENT22.DOM
¿Utilizar contraseñas cifradas? ¡Sí! Si no lo hacemos, aparecerán problemas extraños cuando intentemos entrar a recursos compartidos de un Windows NT. Además, es obvio que las contraseñas cifradas dan más seguridad que las estándar.
¿Cómo
queremos que se ejecuten los procesos de Samba, como demonios o
como una parte del demonio inetd?
Es mejor que se ejecuten como demonios (como los otros servidores),
ya que así se podrán controlar mejor.
Crearemos el fichero de contraseñas cifradas tal como nos pide.
Después de esto ya
tenemos los dos procesos de Samba funcionando: smbd
y nmbd (hacen
referencia a los demonios de SMB y Netbios respectivamente). Si
queremos que Debian nos vuelva a preguntar todo lo anterior podemos
hacer un dpkg-reconfigure
samba
Con Samba podemos hacer básicamente cuatro operaciones:
Compartir una unidad Linux con máquinas Windows
Compartir una unidad Windows con máquinas Linux
Compartir una impresora Linux con máquinas Windows
Compartir una impresora Windows con máquinas Linux
Hay que tener muy claro qué queremos que haga el servidor, y actuar en consecuencia. Si ponemos configuraciones por defecto o cambiamos cosas sin saber qué son, no funcionará exactamente como queremos, y arreglarlo puede costar mucho.
En nuestro caso, las decisiones que hemos tomado son:
Hemos de compartir sólo una carpeta del servidor (con sus directorios) a todos los usuarios de Windows de la red. Otra alternativa es hacer que cada usuario de Windows pueda acceder a su carpeta personal del servidor, pero como hay muchos preferimos compartir todo en un lugar común que permita interactuar a todos los usuarios, y dejar el FTP para necesidades más concretas.
El servidor estará preparado para acceder a los recursos compartidos de cualquier ordenador, y para montarlos como si se tratara de un disquete o un CD.
No tenemos ninguna impresora conectada al servidor, por tanto Linux no tiene que compartir ninguna.
Lo que sí que podemos hacer, si tenemos tiempo, es que una impresora conectada a la red de Windows se pueda usar también en Linux, por si acaso hace falta imprimir algo importante directamente desde un programa no disponible para otros sistemas operativos. El problema principal por el que no lo haremos es que hay que configurar la impresora en Linux.
Ya avisamos que es muy probable que salga un problema (muy común) si usamos tanto máquinas Windows NT/2000 como Windows 9x a la vez, debido a su forma de enviar las contraseñas y a los requisitos de cada implementación. Para entender estas complicaciones hay que ver unas cuantas diferencias entre el SMB de Win98, WinNT y Samba:
Los Windows 98 envían
contraseñas encriptadas por defecto, mientras que Samba las
suele recibir en formato de texto normal. Esto tiene solución
fácil añadiendo la directiva encrypt
passwords = yes al fichero de configuración.
Los Windows NT y Samba son muchísimo más configurables que el SMB de Windows 98 (que casi no tiene opciones). Entre otras cosas, con WinNT y Samba podemos especificar el nombre de usuario y contraseña con los que queremos acceder a un recurso compartido. Esto quiere decir que con Windows 98, la única forma de acceder con un nombre de usuario en concreto es ser ese usuario (de todas maneras, crear un nuevo usuario cuesta poco).
Samba y Windows NT no
aceptan 'invitados' (usuarios no autentificados) por defecto. Los
podemos activar, pero provocan muchos problemas de seguridad (por
eso se han desactivado). Este es un tema muy delicado en Windows
NT, donde es muy fácil encontrar sistemas a los que se puede
entrar usando Invitado
(o guest) como
nombre de usuario y dejando en blanco la contraseña ...
Bien, pues podemos empezar: lo primero de todo será crear un usuario en el servidor que sea el único que pueda tener acceso a los recursos compartidos. Es el usuario que usarán todos los ordenadores que accedan, y, tal como hemos dicho antes, es necesario que este usuario esté creado en todos los Windows y tenga la misma contraseña. Podemos hacer una excepción con los Windows NT ya que, como hemos explicado antes, permiten escribir un nombre de usuario y contraseña al acceder, independientemente del nombre del usuario conectado. Nota: no hace falta que vayamos ordenador por ordenador creando este usuario, ya que se creará automáticamente cuando alguien ponga su nombre y contraseña en la pantalla de inicio de sesión
En nuestro caso a este usuario
lo llamaremos bruguers
y le daremos una contraseña pública y fácil de
memorizar (¡pero no de adivinar!). La contraseña es
opcional, pero el no poner representa un agujero de seguridad muy
importante (sobre todo cuando hablamos de sistemas Microsoft).
Añadimos el usuario al
servidor con adduser
bruguers (no es necesario escribir ningún dato más),
y lo añadimos a la lista de usuarios de Samba -que se
encuentra en /etc/samba/smbpasswd-
con el comando smbpasswd -a
bruguers, y poniendo la misma contraseña.
Ahora hemos de editar el fichero
de configuración /etc/samba/smb.conf.
Al principio encontraremos las opciones que pusimos al instalar
Samba; mejor comprobamos que haya un workgroup
= NOMBRE_DEL_GRUPO_DE_TRABAJO. Además, la siguiente
opción, server
string, nos permite poner la descripción del ordenador
que se verá al navegar por la red. Por defecto pone server
string = %h server (Samba %v), donde %h
es el nombre de host del equipo y %v
la versión de Samba.
Habrá una línea
comentada con el carácter ;
que pone:
;
guest account = nobody
Es bueno saber que si la
cambiamos a guest account =
bruguers haremos que dejar el nombre de usuario y contraseña
en blanco equivalga a entrar con el usuario bruguers
(sin contraseña). Como hemos decidido que había que
poner contraseña, dejaremos la línea comentada, pero si
vemos que es más fácil sin, sólo hay que
modificar eso.
En esta sección también hay que añadir la siguiente línea para evitar uno de los métodos de intrusión más usados desde hace muchos años: el de los recursos compartidos.
hosts
allow = 192.168.0. localhost
Y también haremos que
sólo permita el acceso al usuario bruguers.
Si se crean más habrá que ponerlos aquí también.
valid
users = bruguers
Ahora localizamos la sección
titulada Share Definitions
y, en concreto, este fragmento:
[homes]
comment
= Home Directories
browseable
= no
#
By default, the home directories are exported read-only. Change next
#
parameter to 'yes' if you want to be able to write to them.
writable
= no
#
File creation mask is set to 0700 for security reasons. If you want
to
#
create files with group=rw permissions, set next parameter to 0775.
create
mask = 0700
#
Directory creation mask is set to 0700 for security reasons. If you
want to
#
create dirs. with group=rw permissions, set next parameter to 0775.
directory
mask = 0700
Según nuestros intereses, lo cambiaremos a (omitimos los comentarios):
[homes]
comment
= Home Directories
browseable
= yes
writable
= yes
create
mask = 0777
directory
mask = 0777
Todo ese fragmento hace que se
compartan las carpetas personales de los usuarios ([homes]).
En nuestro caso sólo hay un usuario, que se llama bruguers.
Éste tiene permiso para escribir en su directorio
(writable=yes) y
todo lo que se cree podrá ser leído, modificado o
ejecutado por cualquier usuario del sistema (por eso ponemos los
permisos a 777, o, lo que es lo mismo, u=rwx g=rwx o=rwx). El
browseable=yes hace
que el recurso se pueda ver al navegar por los recursos compartidos
del servidor.
El siguiente párrafo, que
empieza por [printers],
lo comentaremos entero con un carácter #
en cada línea, porque no tenemos impresoras para compartir
conectadas al servidor.
Reiniciamos el servicio con
/etc/init.d/samba restart
y probamos a acceder desde un ordenador Windows explorando la red (en
'Entorno de red' o
'Mis sitios de red').
Veremos un ordenador llamado 'Bruguers',
y dentro, la carpeta compartida, donde podemos entrar y dejar
archivos. También veremos el icono para gestionar las
impresoras.
Probablemente no funcione a la primera debido a las diferencias entre cada Windows. Los problemas que hay entre Samba (Linux) y Windows son los mismos que los que Windows 98 y Windows NT se ocasionan mutuamente. Básicamente, se resumen en: “se puede acceder desde 98 a NT pero desde 98 a NT no”. A continuación presentamos los más típicos, junto con algunas posibles soluciones:
En Windows NT/2000, no deja
entrar en el servidor ('Acceso
denegado').
Probablemente esté
desactivada la opción de utilizar contraseñas
encriptadas. Hay que añadir encrypt
passwords = yes al fichero de configuración. No
deberíamos tener ningún problema más con Windows
NT/2000, ya que es el sistema operativo que mejor ha desarrollado el
protocolo SMB.
En Windows 98, no se ve
ningún ordenador de la red, y al entrar en “Toda
la red” da un mensaje de error.
La causa es que al entrar en
Windows, cuando pedía nombre de usuario y contraseña,
hemos escogido 'Cancelar',
y por tanto no hemos iniciado sesión dentro de la red
Microsoft. Hay que entrar como un usuario con nombre (y contraseña
opcional). Sólo entrando ya se habrá creado el usuario,
pero los podemos gestionar desde 'Mi
PC' -> 'Panel de
control' -> 'Usuarios'.
En Windows 98, se ve el
servidor, pero al intentar entrar pide la contraseña del
recurso IPC$

El
famoso cuadro IPC$
Otra solución es activar
el usuario invitado, llamado 'guest'
o 'Invitado' y con
contraseña en blanco; pero hemos de evitar hacer esto a toda
costa ya que pondría en peligro las unidades y carpetas
compartidas.
Sin duda es más fácil
crear el usuario en Windows 98: sólo hay que escribir bruguers
en vez de cualquier otra cosa en el cuadro de inicio de sesión
y poner la contraseña correcta para crear este usuario.
Por tanto, lo dejamos de forma que sólo los usuarios autentificados puedan acceder a los recursos compartidos del servidor; si alguien no pone nombre de usuario al iniciar sesión o se inventa otro es que no tiene permiso para entrar.
Otras utilidades que nos irán
bien son testparm
para comprobar la configuración y smbstatus
para ver quién está conectado.
Nos queda explicar cómo
acceder a la red de Windows desde Linux. No es difícil, pero
hay muchas opciones de todo tipo. Por ejemplo, hay programas gráficos
como komba y
xfsamba, y también
se puede hacer desde consola. Algunos comandos son:
smbclient
-L host mostrará los recursos compartidos del equipo
host. Podemos
especificar el usuario (la contraseña
la preguntará) con smbclient
-L host -U NombreUsuario
smbmount
//host/nombredelrecurso /mnt/samba monta la carpeta o unidad
compartida especificada en el directorio local
que se le indique (que ha de existir), como si fuese un disquete.
Después podremos acceder de manera
normal, y copiar archivos, borrar, crearlos, cambiar los permisos,
etc. Nota: para especificar el nombre de usuario
hay que usar smbmount
//host/nombredelrecurso /mnt/samba -o username=NombreUsuario
smbumount
/mnt/samba desmonta el recurso. Hay que hacerlo antes de que
se apague el ordenador Windows porque sinó saldrán
mensajes de error.
nmblookup
host nos da la IP del equipo host,
presente en la red.
nbtscan
192.168.0.0/24 escanea toda la red (de tipo C, con máscara
255.255.255.0) y muestra los equipos que comparten recursos.
Pero, como hemos dicho,
programas como komba
o algunos navegadores de archivos con soporte SMB hacen esta tarea
mucho más fácil. Eso sí, requieren usar el modo
gráfico, pero no es necesario que se ejecuten en el servidor
con Debian; como estamos trabajando en red, ésta se podrá
explorar desde cualquier ordenador.
El servidor web es un demonio que escucha en el puerto de HTTP (el 80 TCP) y responde las peticiones de documentos HTML (u otros formatos). En el mercado hay muchos, y en concreto que funcionen bajo Linux también (Jigsaw, GoAhead, Roxen, Stronghold, Zeus, Abyss, Apache, ...). Incluso podemos programar uno sencillo con Netcat, haciendo que escuche en el puerto 80 y devuelva cada página pedida. Pero en Internet los servidores más usados son claramente dos: Apache y Microsoft IIS (Internet Information Server). Obviamente, IIS es sólo para Windows, así que para nuestro ordenador usaremos Apache para Linux.
¿Es una buena elección? Podemos consultar las estadísticas sobre los servidores más utilizados mundialmente en una importante página dedicada sólo a este tema: de http://www.netcraft.com/survey obtenemos este gráfico:


Hay que añadir que “Microsoft” incluye todos los servidores web de esta marca (no sólo IIS), y que iPlanet es el conjunto de todos los servidores Netscape e iPlanet. Esto deja bastante claro que Apache es el mejor servidor y que no nos hemos equivocado en la decisión.
De momento la web la haremos accesible sólo a la red interna; desde Internet no se podrá acceder porque el router no tiene abierto el puerto 80. Más adelante estudiaremos como poner dos páginas distintas, una para la red interna y otra para Internet.
Integrar Apache en Debian es tan
sencillo como hacer un apt-get
install apache (se supone que la base de datos de apt-get ya
está actualizada mediante apt-get
update) y automáticamente se bajarán todos los
paquetes necesarios. Podemos hacer una pequeña comprobación
escribiendo la IP del servidor en el navegador de cualquier ordenador
de la red. Si lo hemos hecho bien, aparecerá una página
de prueba de Apache.
No es buena costumbre dejar la
configuración por defecto, ya que podría no hacer todo
lo que queremos o, peor aún, hacer más cosas de las que
suponemos. Por lo tanto, vamos a revisar el archivo de configuración
del demonio HTTP en /etc/apache/httpd.conf:
En el archivo ya podemos ver algunos parámetros preconfigurados. Por ejemplo:
La configuración
está en /etc/apache
El directorio de la web es
/var/www
Se usa el puerto 80
Los logs (registros) están
en /var/log/apache/access.log
Lo único que hace falta cambiar es:
En ServerAdmin
podemos poner (o quitar) el e-mail del administrador, que saldrá
cuando haya errores. (Por ejemplo, “Error 404. La página
no existe. Si continua teniendo problemas, contacte con el
administrador: email@email.com”).
ServerName:
podemos poner el nombre de host o la IP. Todos los hosts se graban
en /etc/hosts,
pero no hace falta modificar el fichero porque la IP del servidor
ya tiene un nombre de host asociado (es el que nos preguntó
en la instalación). En nuestro caso es bruguers,
por tanto escribiremos ServerName
bruguers. Si no lo hacemos, cogerá
la IP del ordenador, pero saldrán mensajes de aviso cada vez
que se inicie el servidor.
No hay que hacer más
cambios, pero antes de reiniciar el servidor borraremos el contenido
del directorio donde está la web (/var/www)
y pondremos una sencilla creada por nosotros, con enlaces e imágenes.
A la página principal la llamaremos index.htm
para ver si también funciona (la original era index.html).
Por ejemplo, podemos hacer un index.htm
muy sencillo así:
<BR><BR>
<CENTER>Has
entrado en el <B>nuevo servidor web</B> del
instituto.<BR><BR>
<IMG
SRC=”obreros_trabajando.jpg” ALT=”En construcción”>
</CENTER>
Esta página ya nos sirve
para probar si acepta nombres largos de fichero, si acepta
extensiones que no sean HTM/HTML, si se ven las imágenes, si
el texto llega como HTML (y no como texto plano) y si un .HTM
funciona bien como página principal. Sería interesante
darse cuenta de que también es 'Case sensitive', o sea, que
index.HTM es
diferente de index.htm.
Lógicamente, la razón es que el sistema de archivos de
Linux ya es así.
Después de colocar en
/var/www el fichero
index.htm y alguna
imagen, reiniciaremos el servidor haciendo un apachectl
restart y volveremos a comprobar en el navegador si sale la
página correcta. correcta.
Y por último, crearemos
un usuario llamado web,
porque después pondremos un servidor FTP, y nos irá muy
bien poder administrar los ficheros de la página web desde el
FTP. Hay que hacer un adduser
web como root, poner una buena
contraseña, y después modificar el /etc/passwd
para cambiar el directorio de inicio a /var/www
, que es donde se encuentran todos los archivos de la web. Podemos
borrar el directorio HOME creado por defecto, /home/www.
También tenemos que hacer suyos todos los archivos de la web,
ya que si el directorio pertenece a root
ningún usuario lo podrá modificar. Lo hacemos con chown
web.web /var/www -R (el R
hace que cambie los permisos de forma recursiva: al directorio y a
todo lo que haya dentro).
Este Apache en principio sirve webs a cualquier PC (local o remoto), por tanto habrá que cerrar el puerto 80 del router si queremos que sea accesible sólo a la Intranet o abrirlo si lo queremos hacer público.
El FTP sirve para transferir archivos de forma rápida y sencilla entre ordenadores. Permite compartir -con nombre y contraseña- todos los archivos o sólo algunas carpetas a cada usuario, pudiendo establecer los permisos que tienen sobre cada elemento. Por ejemplo, podemos hacer que sólo puedan bajar cosas, o sólo subir y no cambiar nada.
Servidores de FTP para Linux
también tenemos muchísimos. Algunos muy conocidos son
proftpd
y wu-ftpd,
pero como se han encontrado muchos bugs que afectan a características
extra normalmente no utilizadas, mucha gente prefiere servidores más
sencillos que cumplan únicamente su propósito de
compartir archivos.
Por lo tanto, buscaremos un servidor con pocas funciones adicionales, sencillo, y que ocupe poco (cuando más pequeño sea, menos fallos puede tener en el código). El que más se adapta a estas condiciones es PureFTPd.
Probamos a hacer apt-get
install pureftpd (y con pure-ftpd),
pero ninguno funciona. La razón es que PureFTPd no viene
incluido en esta versión de Debian. Lo podemos
comprobar con apt-cache
search pure: veremos que no hay ningún paquete en el
que salga “pure”. La forma de instalar el programa es,
entonces, ir a la página web (http://www.pureftpd.org)
y a la sección de Downloads y bajar en formato .tar.gz
la última versión. Lo que hemos bajado son las fuentes
(en inglés, “sources”) del programa, en lenguaje
C, por tanto, las tendremos que compilar para crear el ejecutable que
funcione en nuestra máquina. Nos hará falta como mínimo
el gcc (GNU C
Compiler) y un poco de tiempo (depende del ordenador, pero es casi
seguro que menos de una hora).
Como root, descomprimiremos el archivo en algún
sitio (por ejemplo /usr/src)
con:
tar
zxvf archivo.tar.gz -C /usr/src
Entonces podemos entrar en el directorio creado y
leer los ficheros README
e INSTALL, que
normalmente están en todos los programas que hay que compilar.
Si vemos que no hay que hacer nada especial -como es el caso-
seguiremos el procedimiento habitual para compilar:
Ejecutar ./configure
para generar un script de compilación adecuado para
nuestra máquina en concreto. Si falta algún
programa o librería, parará y lo mostrará
de forma clara. Podemos desactivar o activar muchas opciones
(ver ./configure
--help). En nuestro caso, hemos comprobado que al
compilar sin ninguna opción especial, el binario
resultante no aceptaba la opción -n,
que sirve para limitar el espacio de cada usuario. Por lo tanto,
es buena idea activar directamente la opción adecuada con
./configure
--with-quotas.
Ejecutar make,
la verdadera compilación. Este proceso -completamente
automatizado- puede tardar segundos, minutos o horas dependiendo
del programa y del ordenador. No tiene que fallar; si lo hace
será más complicado solucionar
el problema ya que probablemente se encuentre dentro del código
fuente de algún fichero del proyecto (o sea, que no es
culpa nuestra). Eso sí, es probable que aparezcan
mensajes de “warning” (advertencias), que podemos
ignorar a menos que puedan provocar algún problema grave.
Este paso es opcional. make
check hará unas comprobaciones para ver si se ha
compilado bien. Si alguna prueba falla no hay que continuar.
make
install copiará los ejecutables (el resultado de
la compilación) a los directorios donde se encuentran
todos los demás programas de Linux. Hacen falta
privilegios de root.
Hecho esto ya hemos conseguido crear el fichero
ejecutable e integrarlo en el sistema; por tanto podemos borrar el
directorio que hemos creado en /usr/src
(a menos que queramos hacer algún cambio al código y
volverlo a compilar).
Ahora, cada vez que encendamos el ordenador
tendremos que ejecutar pure-ftpd
(se puede dejar en segundo plano) y el servicio estará activo,
con los usuarios actuales del sistema. Para evitar repetir esta
acción cada vez, podemos crear un script que arranque el
servicio con las opciones más apropiadas (que habremos
consultado en la ayuda con pure-ftpd
--help):
/usr/local/sbin/pure-ftpd
-B -A -u 100 -C 5 -n 1000:800
echo
“Arrancando el servidor pure-ftpd...”
Descripción de las opciones:
El -B
es para que se ejecute en segundo plano
El -A
hace que todos los usuarios estén en un entorno chroot(), o
sea, que ven su directorio personal como /
y no pueden salir de ahí. Por tanto, están
'encerrados' dentro de su directorio personal. Es teóricamente
imposible salir de esta jaula, aunque en la práctica se
puede hacer (aunque en la del FTP costaría mucho más).
No obstante, aunque un usuario consiguiera acceder al exterior no
podría estropear muchas cosas porque no sería el
propietario. Estaría en la misma situación que un
usuario del sistema sin privilegios.
El -u
100 es el UID mínimo que haca falta para conectarse.
Por lo tanto, los usuarios que tengan un UID menos (que son el
administrador y los usuarios especiales y de sistema) no podrán
conectarse. Esto es bueno para la seguridad general del ordenador
(recordemos que la contraseña de FTP viaja sin encriptar).
-C
5 hace que sólo se puedan hacer 5 conexiones por
host. Es poco probable que un usuario con buenas intenciones
necesite hacer más de una a la vez, pero
tampoco hay que limitarlo a una, así que dejaremos
cinco.
El -n
1000:100 limita cada usuario a 1000 archivos o 800 Mb, más
que suficiente para traspasar ficheros grandes. En algunas
versiones esta opción requiere compilar con la opción
de cuotas activada. Si sólo hemos puesto ./configure
y vemos que después no acepta la opción -n,
haremos ./configure
--with-quotas y después el make
y el make install.
Grabaremos este script en /etc/init.d/pure-ftpd,
le daremos permisos de ejecución a todos con chmod
a+x /etc/init.d/pure-ftpd, y crearemos enlaces dentro de los
niveles de ejecución en los que nos interese que corra este
proceso. Recordamos los niveles de ejecución (“runlevels”):
0 --> Halt (parar el sistema y apagarlo)
1 --> Modo monousuario
2 --> Modo multiusuario sin soporte de red
3 --> Modo multiusuario completo
4 --> (Sin usar)
5 --> Modo multiusuario completo con login gráfico
6 --> Reboot (reiniciar el sistema)
Por lo tanto, los niveles en los que nos interesa que actúe nuestro script son el 1, 2, 3 y 5. Crearemos los enlaces simbólicos con:
ln -s
/etc/init.d/pure-ftpd /etc/rc1.d/S80pure-ftpd
ln -s
/etc/init.d/pure-ftpd /etc/rc2.d/S80pure-ftpd
ln -s
/etc/init.d/pure-ftpd /etc/rc3.d/S80pure-ftpd
ln -s
/etc/init.d/pure-ftpd /etc/rc5.d/S80pure-ftpd
El prefijo S80 tiene su explicación: S significa que es un script 'Startup', que sirve para iniciar algo. En caso contrario llevaría una K ('Kill'). El número indica el orden en el que se ejecutarán los scripts de un mismo directorio rc. Hay que asegurarse de que se inicie en un buen momento, cuando la red ya está preparada y las operaciones importantes ya han acabado; por tanto, 80 ya es un buen número.
Sería correcto añadir en los runlevel 0 y 6 un script que matase al servidor, pero no hace falta porque el propio proceso de apagado ya se encarga de matar todos los procesos.
Ya sólo queda reiniciar (o hacer un init
3) y probar a hacer un FTP desde fuera. Hay que recordar que
en el router los puertos 20 y 21 de TCP tienen que estar abiertos (el
20 es para la transmisión de datos).
También es el momento de probar a entrar
como usuario web
desde cualquier cliente de FTP (o con un navegador, con
ftp://web@IP_DEL_SERVIDOR
), poner la contraseña y comprobar que podemos subir y bajar
archivos al servidor web.
NOTA: hay que evitar usar cuentas de usuario
importantes en el FTP, porque los datos viajan sin
encriptar, y un usuario que tuviese privilegios de root podría
interceptar los paquetes y ver las contraseñas. Para evitarlo
podemos crear cuentas adicionales sólo para el FTP, o usar el
programa sftp que
viene incluido en el SSH.
En cualquier red los usuarios acceden a páginas web prohibidas, ya sea porque no están relacionadas con el trabajo que hay que hacer con el ordenador, o porque son pornográficas o de contenidos ilegales.
Una forma de denegar el acceso a ciertas páginas es configurar cada navegador web de forma que pida contraseña cuando se entra en unas direcciones web o IPs preestablecidas. También podemos utilizar software de filtrado de contenidos que analice las palabras o incluso las imágenes.
El problema que presentan estos métodos (aparte del elevado precio) es que requieren manipular cada uno de los ordenadores de la red individualmente, cuando lo ideal sería tener que crear la 'lista negra' sólo en un ordenador. Es aquí donde intervienen los proxy: un proxy es un ordenador que recoge todas las peticiones de la red, busca las páginas correspondientes en Internet y devuelve cada página al ordenador que la ha pedido. De esta manera, es sólo este ordenador el que se conecta a Internet, y por lo tanto es fácil prohibir o admitir IPs.
Puede parecer que el proxy hace más lenta la navegación ya que un sólo ordenador tiene que hacer el trabajo de muchos, pero de hecho el proxy también está diseñado para agilizarla actuando como caché. 'Caché' hace referencia a una zona de la memoria o del disco, que almacena información durante un tiempo y que va vaciándose a medida que llegan nuevos datos para llenarla.
Por lo tanto, un proxy-caché funciona así:
Recibe una petición HTTP de un ordenador.
Consulta en su caché buscando la página pedida.
Si no tiene la página en la caché, la baja de Internet y queda grabada en la caché. En cambio, si ya la tenía no es necesario que se vuelva a conectar a Internet.
Devuelve la página de la caché al ordenador que la había pedido.
Periódicamente hace comprobaciones para evitar que la caché se llene, borrando los datos más antiguos o los menos pedidos. Además, registra los accesos en los ficheros de log, como casi todos los demás servidores que hemos visto.
En conclusión, un proxy-caché ayuda a reducir mucho el ancho de banda usado en una red (debido principalmente a las consultas web). No es ningún problema la velocidad de transmisión; será la adecuada porque disponemos de tarjetas de red 10/100 Mbits/s para enviar datos de un ordenador a otro (por la Intranet), mientras que la conexión a Internet llega como mucho a los 2 Mbits/s si es una línea ADSL. Además, hay que recordar que casi todos los navegadores actuales tienen su propia caché web local, y por tanto se evitarán peticiones web a Internet, o en este caso al ordenador proxy.
El proxy-caché para Linux más conocido y usado es Squid. Tiene soporte para HTTP, FTP, SSL, SNMP, DNS, control de acceso (ACL), jerarquías de proxies (protocolo ICP), y muchas opciones más. Su web es http://www.squid-cache.org
Una de las características más interesantes de Squid es que puede actuar como proxy transparente: funciona de manera parecida a la explicada anteriormente, pero el cliente (el ordenador que pide páginas web) no se entera de que está pasando por un proxy ya que éste último actúa como si realmente fuera el servidor web de Internet. El inconveniente de este método es que el proxy tiene que actuar como servidor web en el puerto 80, y nosotros ya tenemos un servidor Apache en este puerto; por lo tanto el proxy que pondremos será estándar.
Haremos un apt-get
install squid para bajarlo e instalarlo, pero tenemos que
modificar la configuración por defecto. Hay que cambiar, por
ejemplo, el puerto usado (ahora es el 3128, pero en Europa se usa más
el 8080). Antes de modificar el fichero de configuración
(/etc/squid.conf),
comprobamos que squid
no esté funcionando con privilegios de root (eso sería
un problema de seguridad):
bruguers:~#
ps axu | grep squid
root
336 0.0 1.1 3824 1124 ? S 12:38 0:00
/usr/sbin/squid -D -sYC
proxy
338 0.9 5.5 8556 5308 ? S 12:38 0:19 (squid) -D
-sYC
root
374 0.0 0.7 1748 716 pts/0 S 13:11 0:00 grep squid
bruguers:~#
Podemos ver que, aunque lo llame
root, el proceso está con el conocido como “setuid
proxy”, o sea, que se ejecuta con los privilegios del usuario
“proxy”.
Es mejor que esté así porque en versiones anteriores se
ejecutaba como root, y eso comportaba mucho más peligro
delante de cualquier bug que se encontrase, ya que un usuario que
usase un exploit conseguiría una shell de root. Con la
configuración actual, si un usuario aprovecha un bug (por
ejemplo un buffer overflow, los más comunes) podría
acceder al sistema como si fuera un usuario normal.
Ahora vamos a por la
configuración del proxy Squid, que se encuentra en
/etc/squid.conf.
Tendremos que cambiar los siguientes parámetros:
http_port
3128
http_port
8080
Este es el puerto usado por el proxy (por defecto 3128). Hemos añadido el 8080, pero tampoco es necesario quitar el 3128; Squid puede recibir peticiones por ambos puertos. Lo dejamos por compatibilidad por otros programas.
Además, si hacemos escaneos de puertos cuando todo funcione, veremos que también usa el 3130 de UDP.
cache_peer
proxy.xtec.es parent 8080 0 no-query no-digest default
Esto hace que nuestro proxy tenga un 'padre' y trabaje en jerarquía con él: todo lo que los usuarios de la red pidan al servidor se buscará en su caché, y si no se encuentra, la petición pasará al proxy padre. Si este padre tampoco lo encuentra en su caché, lo buscará en Internet, por tanto evitamos todo lo posible las peticiones innecesarias.
El instituto usa el proxy
proxy.xtec.es por el
puerto 8080 (el
habitual de los proxy-cachés). Hemos desactivado las opciones
ICP (protocolo usado por los proxys) poniendo los parámetros 0
como puerto ICP y no-query.
El no-digest lo
ponemos porque el fichero de digests es innecesario cuando hay un
sólo padre, y el default
hace que el servidor use por defecto este padre para encontrar todo
lo que no tenga en la caché.
Obviamente, si no disponemos de proxy padre (o sea, si queremos tener Internet como padre) no hay que poner esta línea.
#
cache_mem 8 MB
Dejamos la opción por defecto de 8 Mb. para la memoria RAM usada como caché. Se recomienda dejar una cuarta parte de la RAM total del ordenador, pero como nuestro servidor tiene poca (48 Mb) y además se tiene que encargar de muchas más cosas, dejaremos este valor, que de todas maneras es lo bastante grande como para grabar los objetos más pedidos (entendiendo objeto como una imagen, una página, un vídeo, o cualquier otro elemento web). Hay que tener en cuenta que aparte de la RAM usada como caché, el proceso de Squid necesita más RAM para poder ejecutarse (como cualquier otro proceso), por lo tanto no hay que poner valores muy grandes.
cache_dir
ufs /var/spool/squid 150 16 256
Es aquí donde decimos a
Squid que use el directorio /var/spool/squid
como caché. ufs
es el sistema de archivos de Squid. En los parámetros le
indicamos que puede usar150 Mb. y que organice los objetos creando 16
directorios, cada uno con 256 subdirectorios y con los ficheros
dentro.
Hemos asignado 150 Mb. porque el disco duro del ordenador puede llegar a ser más lento que Internet si hay que buscar un archivo entre miles de ellos, teniendo en cuenta también que 150 Mb. son suficientes para guardar casi todas las páginas que se usarán a menudo en el instituto.
Un detalle: tenemos que
asegurarnos de que el propietario del directorio usado como caché
sea el mismo que ejecuta el proceso squid,
sinó no podrá acceder. Es poco probable que no sea así
ya que se ha creado durante la instalación.