Mostrando entradas con la etiqueta Linux Administración. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux Administración. Mostrar todas las entradas

lunes, 14 de octubre de 2013

RHEL / CentOS - Instalar Ajenti



Ajenti es un panel web de código abierto basado en el sistema de gestión de control de la gestión de las tareas de administración de sistema remoto desde el navegador web muy similar al módulo de Webmin. Ajenti es una herramienta muy potente y ligero, que proporciona una interfaz web rápido y sensible para la gestión de servidores pequeños montajes y también la más apropiada para VPS y servidores dedicados. Se ha construido con muchos plugins pre-hechos para la configuración y software de monitoreo y de servicios como Apache, Cron, sistema de archivos, Firewall, MySQL, Nginx, Munin, Samba, FTP, calamar y muchas otras herramientas como el Administrador de archivos, editor de código para el servidor desarrolladores y acceso a la terminal.

Lo primero es instalar el repositorio EPEL

$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Luego, instalamos el repositorio

$ sudo yum install http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm

Después de tener el repositorio, podemos instalar Ajenti

$ sudo yum install ajenti

Ahora, debemos permitir el puerto 8000 a través de IPTables, para eso, debemos hacer lo siguiente:

$sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
$ sudo service iptables restart

Reiniciamos el servicio

$ sudo service ajenti restart

Finalmente, ingresamos a la ip o hostname e indicamos en el puerto 8000

https://<ip>:8000/

Aquí nos pedirá el usuario y contraseña, el cual es:

User: root
Pass: admin

Una vez ingresadas las credenciales, nos enviará al Dashboard de Ajenti


Ahora nos queda sólo explorar Ajenti.

domingo, 13 de octubre de 2013

Linux - Configurando servicios fácilmente

Cuando el sistema inicia, carga diferentes servicios, estos normalmente los encontraremos en /etc/rcX.d/, en Donde X va del 0 al 6. Sin intentar explicar esto, existe una forma de administrar los servicios bastante fácil, esto es gracias a sysv-rc-conf. Para instalarlo debemos:

$ sudo aptitude install sysv-rc-conf


Una vez instalado, simplemente lo ejecutamos en consola:

$ sudo sysv-rc-conf


Aquí nos encontraremos con algo similar a lo siguiente:


Como podemos ver, nos muestra los diferentes servicios, y del 0 al 6, por lo cual podemos activar o desactivar según nosotros estimemos conveniente.

  • Con la tecla espacio podemos marcar o desmarcar un servicio en un nivel de ejecución, al tener la “X” significa que estará activado.
  • Con la combinación “Ctrl + N” pasamos a la siguiente página, al igual que lo podemos hacer si simplemente empezamos a bajar.
  • Para detener o iniciar un servicio que ya esté en ejecución, utilizamos las teclas “-” y “+”.
  • Para salir, simplemente utilizamos la tecla “q”


lunes, 18 de febrero de 2013

Cambiar zona horaria en RedHat/CentOS 6.x


Para cambiar la zona horaria, lo primero que debemos hacer es editar el siguiente fichero:

# nano /etc/sysconfig/clock

Nos encontraremos con algo parecido a:

ZONE="America/New_York"
UTC=True

Lo que debemos hacer es cambiar la ZONE por la que nosotros necesitemos, para saber las disponibles, simplemente:

# ls -l /usr/share/zoneinfo

Una vez sabido lo modificamos. Ya modificado, debemos hacer un enlace simbólico, por ejemplo, aquí haremos un enlace simbólico de Buenos Aires al localtime.

# ln -sf /usr/share/zoneinfo/America/Buenos_Aires /etc/localtime

Echo esto, comprobamos que la hora esté correcta con el comando date.

# date
Thu Nov  8 10:26:25 ART 2012

domingo, 11 de noviembre de 2012

Habilitar User/Group para cada VirtualHost

Para realizar esto, debemos utilizar mpm-itk, el cual lo podemos instalar desde los repositorios
# yum install httpd-itk
Una vez hecho esto,  editamos a nuestro VirtualHost, por ejemplo: mivh
# nano /etc/httpd/conf.d/mivh
Ahora, dentro del bloque <VirtualHost *:80></VirtualHost > debemos agregar lo siguiente:
<IfModule mpm_itk_module>   AssignUserId <UserName> <GroupName></IfModule>

*No olvidar agregar el Include correspondiente en /etc/httpd/conf/httpd.conf*

Ahora debemos editar:
# nano /etc/sysconfig/httpd
Y agregar la siguiente línea:
HTTPD=/usr/sbin/httpd.itk
Esto puede generar un conflicto con php, para esto debemos editar:
# nano /etc/httpd/conf.d/php.conf
Y modificar esto:
<IfModule prefork.c>   LoadModule php5_module modules/libphp5.so</IfModule>
Por:
LoadModule php5_module modules/libphp5.so
Luego debemos reiniciar Apache
# sudo service httpd restart
Y listo, debiese cargar el usuario definido, cabe considerar que el dueño de la carpeta a trabajar, debe ser el mismo que especificamos con la variable AssignUserID, lo podemos hacer de la siguiente forma:
# chown UserName:GroupName /path/to/webroot

jueves, 27 de septiembre de 2012

Debian - Configurando servidor DHCP

En palabras sencillas, al tener un servidor DHCP lo que hacemos es entregar direcciones IP a distintos dispositivos que contengan una conexión a Internet, ya sea por alámbrica o inalámbricamente. Del mismo modo, puedo hacer que este dispositivo que tenga asignada una dirección IP por defecto por lo que podemos segmentar más nuestra red e ir organizándose. Otra ventaja que posee montar un servidor DHCP es justamente el hecho de que tenemos una infinidad de posibles variables, una de ellas, es que por ejemplo podemos definir cuántas direcciones asignaremos dinámicamente, es decir, definir un pool de direcciones.

Esto lo quiero tomar como un laboratorio, para llevarlo a cabo pueden montar 2 máquinas virtuales, yo usaré Virtualbox, una máquina virtual la ocuparemos como Servidor (obviamente Debian) y la otra puede ser cualquier distribución, en mi caso lo haré con un CentOS 6 minimal.

En el caso del servidor, creamos la máquina virtual, luego vamos a la configuración de la máquina virtual, vamos a red y creamos una interfaz en modo bridge (puente) y otra interfaz en modo intnet (red interna). En el caso del cliente sólo creamos una interfaz en modo intnet (red interna). Ahora instalamos el sistema operativo normalmente.

La configuración la haremos todo en el servidor, lo primero que debemos hacer es configurar nuestras interfaces de red, para esto editamos el fichero de configuración con nuestro editor de texto, en este caso con nano:

# nano /etc/network/interfaces

Aquí debemos configurar nuestras 2 interfaces de red, lo que haremos es que nuestra interfaz, la configuración eth0 la dejaremos como DHCP ya que este recibirá directamente la dirección IP, en cambio nuestra eth1 la dejaremos como interfaz estática, para esto dentro del fichero debemos configurarlo de forma parecida a esto:
#loopback
auto lo
iface lo inet loopback

#eth0
auto eth0
iface eth0 inet dhcp

#eth1
auto eth1
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0

  • Al agregar auto <interfaz> lo que hacemos es indicar que esa interfaz se levante automáticamente.
  • La palabra iface es para indicar la configuración de la interfaz asociada.
  • Para configurar una interfaz en DHCP, simplemente escribimos iface <interfaz> inet dhcp
  • Para configurar una interfaz en modo estático, simplemente escribimos iface <interfaz> inet static, seguido de esto escribimos address que es la dirección IP que tendrá la interfaz, netmask que es la máscara de red y network, que es el segmento al cual pertenece. Tenemos más configuraciones, pero está configuración mínima sirve para para el ejemplo.
  • Tenemos que tener en cuenta el segmento de nuestra eth0 y eth1, ya que no deben ser el mismo, por ejemplo, si nuestra eth0 recibe el segment0 192.168.1.0, nuestra eth1 puede ser cualquier segmento menos el de la eth0.
Una vez configuradas nuestras interfaces de red, hacemos lo siguiente:

# service networking restart && ifup eth0 && dhclient eth0 && ifup eth1

Con hacer un ifconfig podemos ver la configuración de nuestras interfaces, seguido de esto, instalamos los servicios necesarios:

# aptitude install dhcp3-server isc-dhcp-server

Ahora comienza la configuración, primero:

# nano /etc/default/isc-dhcp-server

Aquí encontraremos una línea que dice INTERFACES="", lo que debemos hacer es indicar la interfaz que repartirá las direcciones DHCP, en nuestro caso es la interfaz eth1, por lo que nos quedaría INTERFACES="eth1"

Ahora debemos configurar el último fichero de configuración, pero antes como medida de precaución, hacemos una copia de seguridad de nuestro fichero:

# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.original

Ya con nuestra copia de seguridad hecha, lo primero que haremos será vaciar el fichero para que sólo tenga nuestra configuración

# cat /dev/null > /etc/dhcp/dhcpd.conf

Ahora si, finalmente, configuramos:

# nano /etc/dhcp/dhcpd.conf

Aquí agregaremos una configuración mínima

authoritative;
ddns-update-style interim;
ignore client-updates;

subnet <segmento-red> netmask <máscara-red> {
  option routers                  <ip-gateway, este caso eth1>;
  option subnet-mask              <máscara-red-de-subred>;
  option domain-name              "<nombre-dominio-dns>";
  option domain-name-servers   <ip-dns>;
  option time-offset   -18000; 

  range dynamic-bootp 192.168.0.100 192.168.0.200;
  default-lease-time 600;
  max-lease-time 7200;
}

Un ejemplo según nuestra configuración sería:

authoritative;
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
  option routers                   192.168.0.1;
  option subnet-mask               255.255.255.0;
  option domain-name               "mired.cl";
  option domain-name-servers 192.168.0.1;
  option time-offset         -18000; 

  range dynamic-bootp 192.168.0.100 192.168.0.200;
  default-lease-time 600;
  max-lease-time 7200;
}

Como comentamos anteriormente, también podemos asignar ip estáticas, simplemente agregando lo otro segmento de configuración

host nombrecliente { 
hardware ethernet MAC; 
      fixed-address IP; 

Inclusive podemos hacer que los equipos que no estén en la lista, no puedan obtener una dirección IP gracias a:

deny unknown-clients;

Un ejemplo completo podría ser:

authoritative;
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
  option routers                   192.168.0.1;
  option subnet-mask               255.255.255.0;
  option domain-name               "mired.cl";
  option domain-name-servers 192.168.0.1;
  option time-offset         -18000; 

  range dynamic-bootp 192.168.0.100 192.168.0.200;
  default-lease-time 600;
  max-lease-time 7200;
}

deny unknown-clients;

host cliente {
        hardware ethernet 08:00:27:5B:C6:44;
        fixed-address 192.168.0.199;
}

Luego simplemente:

service dhcpd restart
chkconfig dhcpd on

Con lo que reiniciamos el servicio y hacemos que este inicie con el sistema.

martes, 25 de septiembre de 2012

SSH - Generar llave de confianza en solo 3 pasos


Cuando nos conectamos mediante ssh nos pide la contraseña del usuario para realizar con éxito la conexión, esto si bien es cierto es un grado de seguridad, puede resultarnos útil que a nuestra máquina no le pida la contraseña, esto se logra creando una relación de confianza, lo que hace es que nuestra máquina sea reconocida por la máquina remota como equipo de confianza y sólo a la máquina la deje ingresar sin contraseña, las demás les pedirá dicha contra.

El tutorial lo dividiré en 3 partes, la primera parte contendrá sólo las sintaxis, la segunda parte tendrá un ejemplo de conexión y la tercera parte será un bash script que podemos ejecutar para automatizar esto.

Primera parte - Sintaxis

PASO 1: Con nuestro usuario (no con root) debemos generar la key:

$ ssh-keygen

Aquí nos saldrá una serie de preguntas, simplemente apretamos enter y dejamos todo en blanco.

PASO 2: Copiar nuestra key pública al host remoto

$ ssh-copy-id -i ~/.ssh/<> <usuario>@<host remoto>

Luego de esto nos pedirá ingresar la contraseña del usuario remoto, la ingresamos y nos deberá aparecer un mensaje diciendo: “now try logging into the machine, with "ssh '<usuario>@<host>'" lo que significa que ya podemos loguearnos sin necesidad de la contraseña

PASO 3: Conectarse a la máquina remota por SSH

$ ssh <usuario>@<host>



Segunda parte - Ejemplo

Ejemplo 1

PASO 1: Con nuestro usuario (no con root) debemos generar la key:

$ ssh-keygen

PASO 2: Copiar nuestra key pública al host remoto

ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.1.105

PASO 3: Conectarse a la máquina remota por SSH

ssh root@192.168.1.105


Ejemplo 2

PASO 1: Con nuestro usuario (no con root) debemos generar la key:

$ ssh-keygen -t id_dsa.pub -b 1024

PASO 2: Copiar nuestra key pública al host remoto

ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.1.105

PASO 3: Conectarse a la máquina remota por SSH

ssh root@192.168.1.105


Como podemos darnos cuenta, en tan solo 3 pasos podemos generar una llave de confianza, tenemos que tener en cuenta que tipo de key hemos creado, ya que podemos crear una key dsa o una rsa, también podemos agregar opción como el -t para elegir el tipo (rsa o dsa) -b para ver la cantidad de bits, etc. Todo esto lo podemos ver en el manual haciendo

$ man ssh
$ man ssh-keygen
$ man ssh-copy-id



Tercera parte - Bash Script

Como amante de la línea de comandos y de Bash, debemos generar un Bash Script para generar una llave de confianza automatizada, aquí dejo el script.

#!/bin/bash
#
# author:       Nicolás Ormeño
# email:        ni.ormeno at gmail dot cl
# license:      GPL V3
# date:         2012-09-25
# description:  Script para generar llaves de confianzas SSH BASICAS!
#
read -p "Crear llave? (s/n) " key

if [ $key == s ]; then
       read -p "rsa o dsa? " type
       ssh-keygen -t $type
fi
read -p "ip del host: " host

ssh-copy-id -i ~/.ssh/id_dsa.pub root@$host

viernes, 21 de septiembre de 2012

Comando GCP, un CP mejorado

En Linux, como todos sabrán, para copiar ficheros por consola tenemos el comando cp, si bien es cierto funciona a la perfección, no nos detallada el progreso del fichero, normalmente esto no es problema, pero que pasa si queremos copiar un fichero de varios megas o gigas? esto se vuelve más complejo, ya que no sabemos cuanto deberemos esperar, para solucionar esto tenemos GCP, para instalarlo simplemente
# aptitude install gcp
Luego simplemente en vez de copiar con cp, copiamos con gcp, adjunto un screenshot para que vean su función



Algunas personas prefieren reemplazar cp por gcp, en mi caso no es así, ya que son comandos diferencias y no me cuesta nada trabajar con cp o agregarle una letra g y trabajar con gcp, en el caso que quieran hacerlo, deben hacer es crear el alias correspondiente.
echo "alias cp='gcp'" >> $HOME/.bashrc

martes, 4 de septiembre de 2012

Linux – Programando tareas con Cron/Crontab

En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.

El demonio cron inicia de /etc/rc.d/ o /etc/init.d dependiendo de la distribucion. Cron se ejecuta en el background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron en búsqueda de tareas que se deban cumplir. Como usuario podemos agregar comandos o scripts con tareas a cron para automatizar algunos procesos. Esto es útil por ejemplo para automatizar la actualización de un sistema o un buen sistema de respaldos.

Crontab es un simple fichero de texto que guarda una lista de comandos a ejecutar en un tiempo especificado por el usuario. Crontab verificará la fecha y hora en que se debe ejecutar el script o el comando, los permisos de ejecución y lo realizará en el background. Cada usuario puede tener su propio archivo crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab, entonces utilizaremos el comando crontab.

Para poder entrar al fichero crontab y editar/agregar tareas debemos ejecutar:
crontab -e
Una vez hecho esto, se nos abrirá un fichero que podemos editar, la sintaxis a utilizar es la siguiente:
m h ddm M dds usr com
En donde:
  • m: Minuto en el que se debe ejecutar, su valor va de 0 a 59
  • h: Hora en el que se debe ejecutar, su valor va de 0 a 23
  • ddm: Día del mes en el que se debe ejecutar, su valor va de 1 a 31
  • M: Mes en el que se debe ejecutar, su valor va de 1 a 12
  • dds: Día de la semana en el que se debe ejecutar, su valor va de 0 a 7, 0 es Domingo
  • usr: Usuario que ejecutará el comando. Este campo, puede no incluirse
  • com: Comando que se ejecutará
Aquí dejo una imagen encontrada en Internet que la encontré super buena ya que donde es gráfica hace más fácil entender.



Algunos ejemplos para clarificar, si se fijan, no incluimos el campo usuario.

01 * * * * <fichero.sh>
Ejecuta fichero.sh todos los días al minuto 1 de cada hora. 
20 * * 1 6 <fichero.sh>
Ejecuta fichero.sh al minuto 20 de cada hora de los sábados de enero 
10 1 * 12 1 <fichero.sh>
Ejecuta fichero.sh a las 1:10hrs todos los lunes de diciembre 
45 19 1 * * <fichero.sh>
Ejecuta fichero.sh a las 19:45hrs del primero de cada mes 
00 5 * * 0 <fichero.sh>
Ejecuta fichero.sh a las 5 a.m. todos los domingos 
59 11 * 1-3 1,2,3,4,5 <fichero.sh>
Ejecuta fichero.sh a las 11:59hrs de lunes a viernes, de enero a marzo 
10,30,50 * * * 1,3,5 <fichero.sh>
Ejecuta fichero.sh En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes 
* 12 1-10/2 2,8 * <fichero.sh>
Ejecuta fichero.sh todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero y agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1) 
0 */5 1-10,15,20-23 * 3 <fichero.sh>
Ejecuta fichero.sh cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles 
45 * 10-25 * 6-7 <fichero.sh>
Ejecuta fichero.sh al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo


Basado en información de: http://www.linuxtotal.com.mx/
http://usemoslinux.blogspot.com/


domingo, 2 de septiembre de 2012

Linux - Permisos

En todo sistema es necesario manejar los permisos de los ficheros y directorios, obviamente Linux no es la excepción. Los permisos que maneja Linux son los clásicos de Unix (Leer-Escribir-Ejecutar). Para saber los permisos de un directorio/fichero simplemente ejecutamos el comando “ls -l” y nos mostraría algo parecido a esto:
-rwxr-xr-x 1 user1 grupo1 128931 ago 28 2012 gpl.txt
Los primeros 10 caracteres (de izquierda a derecha) son los caracteres de permisos, lo que podemos visualizar en ellas son 5 letras y un signo
  • - : Significa que no posee la propiedad.
  • l : Significa que es un enlace simbólico
  • d : Se refiere a que es un directorio y no un fichero.
  • r : Posee la propiedad Read.
  • w : Posee la propiedad Write.
  • x : Posee la propiedad eXecute
Estos 10 caracteres los podemos dividir en 4 segmentos,
  • Carácter 1: esta entrada nos indica si es un fichero o un directorio. En caso de ser un fichero, aparece el carácter “-”, en de que este sea un enlace simbólico aparece una “l”, mientras que si es directorio aparece una “d”. 
  • Caracteres 2, 3, 4: nos indican, respectivamente, los permisos de lectura, escritura y ejecución para el propietario del fichero. En caso de no tener el permiso correspondiente activado, encontramos el carácter “-” y no “r”, “w” o “x”, según si lo podemos leer (Read), escribir (Write) o ejecutar (eXecute). En el tercer carácter, además, podemos encontrarnos una “s”, que nos indica si el archivo es de tipo SetUserId, que quiere decir que al ejecutarlo obtendrá los permisos del propietario del fichero. Si sólo tiene el permiso “x”, cuando el programa se ejecuta lo hace con los permisos de quien lo haya lanzado.
  • Caracteres 5, 6, 7: estos caracteres tienen exactamente el mismo significado que anteriormente, pero hacen referencia a los permisos concedidos a los usuarios del grupo al que pertenece el fichero.
  • Caracteres 8, 9, 10: igual que en el caso anterior, pero para los otros usuarios del sistema.

Después de estos 10 caracteres encontramos una cifra que nos indica el número de enlaces fuertes que tiene el fichero. Para los directorios, este número indica cuántos directorios hay dentro de él además de los enlaces fuertes que tiene (cuando no hay ninguno, el número es 2, debido a la gestión interna del operativo).

A continuación vemos el propietario y el grupo del archivo, seguido del tamaño (en bytes) que ocupa y la fecha de la ultima modificación. Les dejo una imagen que encontré en Internet que me parece que está bastante bien explicado.


Si por alguna razón, necesitamos cambiar los permisos de algún directorio/fichero, tenemos que utilizar el comando “chmod” el cual nos permite esto, este comando nos permite trabajar de 2 formas, una es con números y la otra con letras.

Para trabajar con números debemos utilizarlo de la siguiente forma: “chmod XXX nombreFichero”, donde las “X” deben ser tres números entre 0 y 7. El primer número indica los permisos que queremos establecer para el usuario, el segundo, para el grupo y el tercero, para el resto.


Ejemplos de utilización:

# chmod 644 <directorio/fichero> Damos permiso “rw” al usuario y “r” al grupo y otros.
# chmod 777 <directorio/fichero> Damos permisos “rwx” al usuario, grupo y otros.
# chmod 664 <directorio/fichero> Damos permisos “rw” al usuario y grupo y permisos “r” a otros.
# chmod 700 <directorio/fichero> Damos permisos “rwx” al usuario y ningún permiso al grupo y otros.

Como mencione anteriormente, la otra forma de trabajar es trabajar (por llamarlo de alguna forma) con letras. . La manera de hacerlo es indicando, primero, si nos referimos a los permisos del usuario, grupo o al resto con las letras “u”, “g” u “o” respectivamente. Seguidamente, debemos añadir un “+” o “-” según si queremos añadir o eliminar el atributo, que indicaremos con “r”, “w”, “x” o “s” (este último para el SetUserId). Además, podemos hacer todas las combinaciones posibles, refiriéndonos a más de un permiso y/o usuarios.

Ejemplos de utilización:

# chmod ug+wrx <directorio/fichero> Damos permisos “wrx” al usuario y al grupo.
# chmod go -x <directorio/fichero> Quitamos permisos de ejecución al grupo y otros.
# chmod go+rw <directorio/fichero> Damos permisos “rw” al grupo y otros.


Dato: El mecanismo de SetUserId es muy útil cuando un programa necesita tener los permisos de su propietario para acceder a ciertos archivos o hacer algún tipo de operación en el sistema. De todos modos, debemos vigilar mucho con este tipo de ficheros porque pueden suponer fallos de seguridad en el sistema si son mal utilizados.





Basado en: Sistema Operativo GNU/Linux Básico - UOC


miércoles, 27 de junio de 2012

Debian / CentOS / RHEL - Instalación y configuración del FTP VSFTP

Quizás el protocolo FTP sea uno de los más utilizados, a pesar de que no sea el más seguro. En primer lugar, debemos saber que es FTP.

“FTP (File Transfer Protocol) o Protocolo de Transferencia de Archivos (o archivos informáticos) es uno de los protocolos estándar más utilizados en Internet siendo el más idóneo para la transferencia de grandes bloques de datos a través de redes que soporten TCP/IP. El servicio utiliza los puertos 20, y 21, exclusivamente sobre TCP. El puerto 20 es utilizado para el flujo de datos entre cliente, y servidor. El puerto 21 es utilizando para el envío de órdenes del cliente hacia el servidor.”

Fuente: http://www.alcancelibre.org

Ahora que tenemos un poco más claro, que es FTP, debemos saber de lo que estamos hablando, es decir, saber que es VSFTP

“Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar servidores de archivos a través del protocolo FTP. Se distingue principalmente porque sus valores predeterminados son muy seguros, y por su sencillez en la configuración, comparado con otras alternativas como ProFTPD, y Wu-ftpd. Actualmente se presume que vsftpd podría ser quizá el servidor FTP más seguro del mundo.”

Fuente http://www.alcancelibre.org/


Estando más claro conceptualmente, debemos pasar a la parte práctica, y obviamente lo primero que debemos hacer es instalar VSFTP, para lo cual: Debian:
$ sudo aptitude install vsftp
CentOS:
$ sudo yum install vsftp
Con VSFTP instalado, y como medio de seguridad, respaldaremos la configuración por defecto, para tener un respaldo en caso de que cometamos algún error. Debian:
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 
CentOS:
$ sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
El fichero de configuración trae varias líneas ya configuradas, para trabajar de una manera más limpia, lo que haremos será vaciar el fichero. Debian:
$ sudo cat /dev/null > /etc/vsftpd.conf
CentOS:
$ sudo cat /dev/null > /etc/vsftpd/vsftpd.conf
Teniendo listo el fichero, comenzaremos a trabajar en él, aquí podemos utilizar nuestro editor de texto preferido (nano, vi, vim, etc), en mi caso, utilizaré nano. Debian:
$ sudo nano /etc/vsftpd.conf
CentOS:
$ sudo nano /etc/vsftpd/vsftpd.conf
Aquí debemos realizar la configuración, la cual es la siguiente: Debian:
anonymous_enable=YES #Permite usuarios anónimos (YES/NO)
write_enable=YES
use_localtime=YES #Hora local en vez de GTM (YES/NO)
dirmessage_enable=YES #Mensaje de directorio (YES/NO)
xferlog_enable=YES #Generación de log en /var/log/xferlog (YES/NO)
ftpd_banner=Bienvenido
pam_service_name=vsftpd #Nombre del servicio PAM
local_enable=YES #Conexión de usuarios del sistema (YES/NO)
chroot_local_user=YES
chroot_list_enable=YES #Los usuarios no pueden ver otros directorios (Enjaular)
chroot_list_file=/etc/vsftpd.chroot_list #Indica ubicación del fichero vsftpd.chroot_list
#Permitir modo pasivo
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30300
pasv_address=XX.XX.XX.XX #ip que resuelve
Centos:
listen=YES #Trabajar en modo independiente (YES/NO)
anonymous_enable=YES #Permite usuarios anónimos (YES/NO)
write_enable=YES
use_localtime=YES #Hora local en vez de GTM (YES/NO)
dirmessage_enable=YES #Mensaje de directorio (YES/NO)
xferlog_enable=YES #Generación de log en /var/log/xferlog (YES/NO)
ftpd_banner=Bienvenido
pam_service_name=vsftpd #Nombre del servicio PAM
local_enable=YES #Conexión de usuarios del sistema (YES/NO)
chroot_local_user=YES
chroot_list_enable=YES #Los usuarios no pueden ver otros directorios (Enjaular)
chroot_list_file=/etc/vsftpd/chroot_list #Indica ubicación del fichero chroot_list
#Permitir modo pasivo
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30300
pasv_address=XX.XX.XX.XX #ip que resuelve
Si tenemos iptables activados, debemos permitir el puerto 20 y 21, u otro puerto si es que queremos
# iptables -I INPUT 5 -p tcp -m tcp --dport 20 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 21 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 30000:30300 -j ACCEPT
# service iptables save
# service iptables restart
En el caso de CentOS / RHEL tenemos SELinux, y si no lo hemos desactivado, debemos permitir todo lo necesario para trabajar con FTP, esto lo trabajamos como boolan, es decir: 0 = no permitir 1 = si permitir Lo básico que debemos agregar es lo siguiente:
$ sudo setsebool -P ftp_home_dir 1
Aquí hay una lista de lo que podemos o no permitir


Booleans
Description
ftp_home_dir
Allows FTP to read and write files in the users’ home directories.
allow_ftpd_full_access
Allows FTP servers to log in to local users and read/write all files on the system, governed by DAC.
allow_ftpd_use_nfs
Allows FTP servers to use NFS for public file transfer services.
allow_ftpd_anon_write
Allows FTP servers to upload files used for public file transfer services. Directories must be labeled public_content_rw_t.
ftpd_connect_db
Allows FTP servers to connect to the MySQL database.
allow_ftpd_use_cifs
Allows FTP servers to use CIFS for public file transfer services.
httpd_enable_ftp_server
Allows httpd to act as an FTP server by listening on the FTP port.



Respecto a los usuarios para lograr la conexión, en este ejemplo estamos utilizando los usuarios del sistema, y estos deben ser añadidos en: Debian
/etc/vsftpd.chroot_list
CentOS / RHEL
/etc/vsftpd/chroot_list
Y dentro de este, escribimos el usuario línea a línea, por ejemplo
usuario1
usuario2
usuario3
Además, estos usuarios deben pertenecer al grupo ftp del sistema, para lograr eso debemos:
# gpasswd -a  ftp
Una buena recomendación es que se programe para que el servicio vsftpd inicie con el sistema.
# chkconfig vsftpd on
Finalmente, hacemos una conexión FTP, puede ser a través del comando ftp, o de un cliente como filezilla u otro.

sábado, 16 de junio de 2012

CentOS - Instalación y configuración básica de un servicio DHCP

Este es un ejemplo sencillo de como poder montar un servidor DHCP en CentOS. Para realizar esto, puede ocupar máquinas virtuales, así fue como lo hice yo, en una hice una instalación mínima de CentOS 6 y en otra máquina hice una instalación por defecto de Linux Mint Debian Edition (LMDE). CentOS actuará obviamente como servidor y LMDE actuará como cliente de dicho servicio. Como instalar los sistemas operativos me lo saltaré, ya que para el ejemplo, simplemente pueden darle a instalar por defecto y no entrar a particionar, ese no es el fin del tutorial.

La configuración de las máquinas virtuales es practicamente la que viene por defecto, a excepción las redes.

En el servidor (CentOS) debemos colocar 2 adaptadores, el primero como brigde o puente, y el adaptador dos, como red interna.

En el caso del cliente (LMDE) debemos configurar solo 1 adaptador, el cual debe ser red interna.

Esto se configura así, por que el servidor al tener su adaptador 1 como puente, recibe la conexión de la WAN, y con el adaptador 2, al estar en red interna, podemos controlar las demás máquinas virtuales para asignarles IP a través del servicio DHCP.

Una vez instalado CentOS, lo primero que debemos hacer es configurar nuestras interfaces de red. Si es que no aparecen es que deben estar down, por lo que generamos un up
# ifconfig ethX up
Donde X es el número de la interfaz, normalmente es eth0 y eth1. Luego de esto, configuramos dichas interfaces, dejaremos eth0 como dhcp y eth1 como static.

Para configurar eth0 debemos modificar con nuestro editor de texto favorito el fichero cfg-eth0
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:97:B0:FE
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
Nombre del dispositivo, lo dejamos tal cual.
Mac del dispositivo, lo dejamos tal cual.
le damos yes, es para que se levante con el sistema.
Le indicamos dhcp, para que tome el protocolo indicado.
Tipo de conexión.
Para ver que no inicia con ipv6
al indicar no, los usuarios no pueden controlar el dispositivo.

Para configurar eth1 debemos modificar con nuestro editor de texto favorito el fichero cfg-eth1
# nano /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 
HWADDR=08:00:27:66:68:5e
ONBOOT=yes
IPADDR=192.168.1.105
BOOTPROTO=none
NETMASK=255.255.255.0
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
                Nombre del dispositivo, lo dejamos tal cual.
Mac del dispositivo, lo dejamos tal cual.
                Le damos yes, es para que se levante con el sistema.
                Indicamos la ip que queremos que tenga la interfaz.
                Antes lo dejamos en dhcp, ahora lo dejamos en none.
La máscara de red que queremos que tenga la interfaz.
Tipo de la conexión.
Para ver que no inicia con ipv6
Al indicar no, los usuarios no pueden controlar el dispositivo.
Indicar ip del gateway.
Estos son los DNS, aquí estoy indicando los de Google, pero tengo entendido que no

Ya configurado todo esto, reiniciamos el servicio.
# /etc/init.d/dhcpd restart
Ahora deben instalar el servicio dhcp. Si no saben como se llama, hacen un search.
# yum search dhcp
En mi caso, al hacer eso, me aparece lo siguiente:
dhcp-common.i686 : Common files used by ISC dhcp client and server
dhcp-devel.i686 : Development headers and libraries for interfacing to the DHCP server
sblim-cmpi-dhcp.i686 : SBLIM WBEM-SMT DHCP
sblim-cmpi-dhcp-devel.i686 : SBLIM WBEM-SMT DHCP - Header Development Files
sblim-cmpi-dhcp-test.i686 : SBLIM WBEM-SMT DHCP - Testcase Files
dhclient.i686 : Provides the dhclient ISC DHCP client daemon and dhclient-script
dhcp.i686 : Dynamic host configuration protocol software
dnsmasq.i686 : A lightweight DHCP/caching DNS server
Ya sabiendo el nombre, simplemente lo instalamos
# yum -y install dhcp
Al terminar de instalar DHCP, lo que primero debemos hacer es indicar que interfaz utilizará el servicio, para esto modificamos:
# nano /etc/sysconfig/dhcpd
y escribimos
DHCPDARGS=eth1
Así indicamos que eth1 será el encargado de entregar dhcp.

Ahora haremos un respaldo de nuestra configuración por defecto.
# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.original
Así en caso que tengamos cualquier inconveniente, podemos volver a su estado. Ya con esto listo, lo mejor es copiar la configuración de ejemplo que nos brindan.
# cp cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
Nos preguntará si sobre-escribimos, a lo que respondemos que si. Deben tener en cuenta que en la parte de /dhcp-4.1.1/ puede cambiar, ya que los números corresponden a la versión instalada.

Una vez hecho todo esto, entramos a configurar DHCP, abrimos el fichero /etc/dhcp/dhcpd.conf con su editor favorito, en mi caso trabajaré con nano.
# nano /etc/dhcp/dhcpd.conf
Verán muchas configuraciones, pero como esté es un ejemplo sencillo, solo deben fijarse en dejar lo siguiente:
# dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.200 192.168.1.250;
        option routers 192.168.1.105;
        option domain-name-servers 8.8.8.8,8.8.4.4;
        option domain-name "ServerDeConexion";
        option broadcast-address 192.168.1.255;
        option subnet-mask 255.255.255.0;
}
host vmlmde{
hardware ethernet 08:00:27:e5:7e:e6;
              fixed-address 192.168.1.245;
}
  • Subnet es el segmento de red como nuestra interfaz es 192.168.1.105, el segmento es 192.168.1.0, y obviamente la máscara antes indicada
  • range: es el rango de ip que entregada, en este caso indicamos que de la 200 a la 250.
  • option routers: IP del router, en este caso, indicamos la del mismo servidor.
  • option domain-name-server: Servidores DNS, ocupe los de Google, para separar ocupar coma (,).
  • option domain-name: “nombre del servidor”
  • option broadcast-address: Dirección IP del broadcast.
  • Option subnet-mask: Dirección de la máscara de red.
Ya con esto deberiamos estar entregando dinámicamente IP's, aunque es muy buena opción que además de asignar una IP dinámica. Indiquemos que un equipo tenga una IP estática dentro del rango que indicamos, por ejemplo, si tenemos otra especie de servidor, vamos a querer que su ip no sea dinámica, es aquí donde actúa el siguiente bloque:
  • host: indicamos nombre de host, en este caso vmlmde
  • hardware ethernet: es la dirección mac que tiene el cliente.
  • Fixed-address: Es la ip que le asignaremos al cliente.
Ya con esto podemos estar corriendo un servidor DHCP básico. Les dejo un screenshot del Cliente para que vean que su IP concuerda con lo descrito anteriormente.



martes, 12 de junio de 2012

Linux - Trabajando con SSH

SSH (Secure SHell, en español: intérprete de órdenes segura) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix y Windows) corriendo.

Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.

SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión; aunque es posible atacar este tipo de sistemas por medio de ataques de REPLAY y manipular así la información entre destinos.

Conectarse a una máquina mediante ssh

Para conectarnos mediante ssh a una máquina, simplemente debemos ejecutar:
ssh <usuario>@<ip o host>
ejemplo:
ssh root@192.168.1.2
copiado de ficheros a través de ssh

Para poder copiar ficheros a través de ssh simplemente:
$scp ruta/fichero_a_copiar usuario@<ip o host remoto>:/ruta/donde/dejamos/el/fichero
ejemplo:
$scp /home/miusuario/imagen.jpg root@192.168.1.2:/root/imagen.jpg

Generación de relación de confianza.

Cuando nos conectamos mediante ssh nos pide la contraseña del usuario para realizar con éxito la conexión, esto si bien es cierto es un grado de seguridad, puede resultarnos útil que a nuestra máquina no le pida la contraseña, esto se logra creando una relación de confianza, lo que hace es que nuestra máquina sea reconocida por la máquina remota como equipo de confianza y SOLO a la máquina la deje ingresar sin contraseña, las demás les pedirá dicha contraseña, para realizar esto, debemos:

Antes de comenzar a escribir comandos, debemos saber la diferencia entre rsa y dsa, para así saber cual de estos queremos aplicar.
RSA: Es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye y otra privada, guardada en secreto por su propietario.Su funcionamiento reside en el uso de expresiones exponenciales dentro de la aritmética modular. Obteniendo una completa seguridad, debido a que aún no se conocen formas óptimas de factorizar un número grande en sus factores primos utilizando ordenadores personales.El RSA se basa en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA. El descifrado completo de un texto cifrado con RSA es computacionalmente intratable. Por otro lado la factorización de números grandes proponen métodos para longitudes de 600-700 bits de longitud. Y generalmente, las claves RSA usan entre 1024-2048 bits.

DSA: (Digital Signature Algorithm o Algoritmo Estándar de Firmado) es el algoritmo de firmado digital incluido en el DSS (Digital Signature Standard o Estándar de Firmas Digitales) del NIST Norteamericano. Está basado en el problema de los logaritmos discretos y únicamente puede emplearse para las firmas digitales. A diferencia del RSA, que puede emplearse también para encriptar.La elección de este algoritmo como estándar de firmado generó multitud de críticas puesto que perdía bastante flexibilidad respecto al RSA.
Sabiendo esto, comenzamos a teclear.
usuario@maquinalocal:$ssh-keygen -t <rsa/dsa>
Nos aparecera una sería de preguntas le tecleamos a todas ENTER dejando vacías las respuestas. Esto nos creará un directorio .ssh, dentro del home de nuestro usuario, ahora en la maquina remota, hacemos el mismo proceso:
usuario@maquinalocal:$ssh root@<ip_maquina_remota>
usuario@maquinaremota:#ssh-keygent -t <rsa/dsa>
Ahora nuevamente desde nuestra maquina local, copiamos nuestro id_rsa.pub o id_sda.pub, ingresamos a la máquina remota (ingresaremos por última vez la contraseña) y colocamos nuestro fingerprint como relación de confianza.
usuario@maquinalocal:$scp .ssh/id_rsa.pub usuario@<ip>:/root/.ssh/id_dsa.pub
usuario@maquinaremota:#cat .ssh/id_rsa.pub >> .ssh/authorized_keys
El fichero authorized_keys no existe, pero al hacer la instrucción descrita lo creará.

Una vez hecho esto, cada vez que ingresemos a la máquina remota, ingresaremos sin necesidad de ingresar nuevamente la contraseña.

viernes, 1 de junio de 2012

Linux - tips dmidecode

dmidecode es una herramienta fundamental en la administración de sistemas Linux, ya que este nos muestra el hardware de nuestro equipo que es reconocido por nuestra BIOS.

Lo interesante del comando dmidecode es todo lo que nos puede mostrar por pantalla, por ejemplo el fabricante del Sistema, Modelo Exacto , número de serie, versión del BIOS ,Memorias, Cuanta Memoria soporta ,Modelo de Memoria,Modulo,Procesador, etc.

La información que nos muestra dmidecode es sumamente extensa es por esto que les recomiendo guardar el resultado en fichero, esto lo debemos usar con privilegios de super usuario.
# dmidecode >> resultado_dmidecode
Otra forma más amigable es usar el pipe more.
# dmidecode | more
Este es usado también en caso de errores, ya que si notamos dificultad con algún hardware, podremos saber si la BIOS lo está reconociendo correctamente.

Como tips, les puedo dejar un uso que le di al dmidecode, el uso fue cuando quisé comprar una memoria RAM para el laptop y no recordaba el tipo de memoria, por lo que ejecute lo siguiente:
# dmidecode --type 17
Y como resultado, obtuve lo siguiente:
Handle 0x0019, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x0018
Error Information Handle: No Error
Total Width: 64 bits
Data Width: 64 bits
Size: 2048 MB
Form Factor: SODIMM
Set: 1
Locator: M1
Bank Locator: Bank 0
Type: DDR3
Type Detail: Synchronous
Speed: 667 MHz
Manufacturer: 04CB
Serial Number: 00000000
Asset Tag: 1040
Part Number: AD73I1B1674EU
Rank: Unknown
Si se fijan me mostro que el tipo era DDR3, lo que hice con –type 17, es similar a hacer un pipe como el grep, con el cual hago una búsqueda más exacta. La lista de los tipos es la siguiente:

0 BIOS
1 System
2 Base Board
3 Chassis
4 Processor
5 Memory Controller
6 Memory Module
7 Cache
8 Port Connector
9 System Slots
10 On Board Devices
11 OEM Strings
12 System Configuration Options
13 BIOS Language
14 Group Associations
15 System Event Log
16 Physical Memory Array
17 Memory Device
18 32-bit Memory Error
19 Memory Array Mapped Address
20 Memory Device Mapped Address
21 Built-in Pointing Device
22 Portable Battery
23 System Reset
24 Hardware Security
25 System Power Controls
26 Voltage Probe
27 Cooling Device
28 Temperature Probe
29 Electrical Current Probe
30 Out-of-band Remote Access
31 Boot Integrity Services
32 System Boot
33 64-bit Memory Error
34 Management Device
35 Management Device Component
36 Management Device Threshold Data
37 Memory Channel
38 IPMI Device
39 Power Supply
Por lo que según esta lista, simplemente vamos cambiando el type para realizar una búsqueda mucho más exacta.

Fuente: http://julio-linux.esdebian.org/32607/herramienta-dmidecode

miércoles, 21 de marzo de 2012

Linux - Usuario y grupos

Los sistemas operativos actuales son multiusuarios y multitareas, producto de esto es que poseen administración de los mismos, como por ejemplo sistema de identificación (login), programas por usuario, ficheros por usuarios, etc.

Los sistemas Linux organizan toda la información en usuarios y grupos, además de tratar de aumentar la seguridad, esto quiere decir que la contraseña es cifrada, esto quiere decir que cuando ingresamos al sistema, la contraseña ingresada es cifrada y es comparada con la guardada en el sistema, y si es correcta, la identificación es true (positiva) y permite el acceso, de lo contrario, lo niega.

En Linux podemos escoger 2 tipos de cifrados, el 3DES y MD5. 3DES viene de los inicios de Unix pero posee un gran inconveniente, el cual es que solo acepta hasta 8 letras, si se escriben más se ignoran. Al contrario en MD5 podemos escribir una contraseña del largo que queramos.

La diferencia entre un usuario y un grupo es que un usuario es un individuo en particular que entra al sistema, en cambio el grupo es un conjunto de usuarios que acceden al sistema con características parecidas, por ejemplo el grupo administrador tiene ciertos privilegios que el grupo usuarios no posee. Todo usuario debe estar al menos en un grupo y puede estar en n grupos.

Toda la información de usuarios y grupos se guarda en los siguientes archivos:
  • /etc/passwd: información (nombre, directorio home, . . . ) del usuario.
  • /etc/group: información sobre los grupos de usuarios.
  • /etc/shadow: contraseñas cifradas de los usuarios y configuración para su validez, cambio, etc.
Utilizar el archivo de shadow es opcional. En un principio, las contraseñas cifradas de los usuarios se guardaban en el mismo fichero de passwd, pero, por razones de seguridad (muchos mecanismos deben poder leer este fichero, con lo cual era muy fácil hacerse con él e intentar “crackear” las contraseñas) se optó por cambiar este mecanismo para hacer que el fichero de shadow sólo fuera accesible para algunos usuarios con privilegios especiales en el sistema.

Esta opción es configurable en el proceso de instalación del sistema y suele ser recomendable utilizarla. Todos estos ficheros están organizados por líneas, donde cada una de ellas identifica a un usuario o grupo (dependiendo del fichero). En cada línea hay diversos campos separados por el carácter “:”. En tareas de administración, es importante saber qué son estos campos, por lo que vamos a explorarlos con un poco más de detalle:

passwd

  1. Login: el nombre del usuario. No puede haber dos nombres iguales, aunque sí alguno que coincida con un grupo del sistema.
  2. Contraseña cifrada: si no se utiliza el fichero de shadow, las contraseñas cifradas se almacenan en este campo. Si utilizamos el fichero de shadow, todos los usuarios existentes en este fichero deben existir también en el de shadow y en este campo se pone el carácter “x”.
  3. User ID: número de identificación del usuario. Es el número con el cual el sistema identifica al usuario. El 0 es el único que está reservado para el root.
  4. Group ID: el número de grupo al cual pertenece el usuario. Como un usuario puede pertenecer a más de un grupo, este grupo se denomina primario.
  5. Comentarios: campo reservado para introducir los comentarios que queramos sobre el usuario. Se suele utilizar para poner el nombre completo o algún tipo de identificación personal.
  6. Directorio home: el directorio home del usuario es donde éste podrá guardar todos sus ficheros. Suelen ponerse todos en alguna carpeta del sistema (generalmente /home/) y organizados por grupos.
  7. Intérprete de comandos: un intérprete de comandos (shell ) es un programa que se encarga de leer todo lo que escribimos en el teclado y ejecutar los programas o comandos que le indiquemos. Hay decenas de ellos, aunque el más utilizado es, sin duda, el bash (GNU Bourne-Again SHell). Si en este campo escribimos /bin/false no permitiremos que el usuario ejecute ningún comando en el sistema, aunque esté dado de alta en el mismo.
group
  1. Nombre del grupo.
  2. Contraseña cifrada: la contraseña de un grupo se utiliza para permitir que los usuarios de un determinado grupo se puedan cambiar a otro o para ejecutar algunos programas con permisos de otro grupo (siempre que se disponga de la contraseña).
  3. Group ID: número de identificación del grupo. Es el número con el cual el sistema identifica internamente a los grupos. El 0 es el único que está reservado para el grupo del root (los administradores).
  4. Lista de usuarios: los nombres de los usuarios que pertenecen al grupo, separados por comas. Aunque todos los usuarios deben pertenecer a un determinado grupo (especificado en el cuarto campo del fichero de passwd), este campo se puede utilizar para que usuarios de otros grupos también dispongan de los mismos permisos que tiene el que se está referenciando.
shadow
  1. Login: debe ser el mismo nombre que se utiliza en el fichero de passwd.
  2. Contraseña cifrada.
  3. Días que han pasado, desde el 1 de enero de 1970, hasta que la contraseña ha sido cambiada por última vez.
  4. Días que deben pasar hasta que la contraseña pueda ser cambiada.
  5. Días que han de pasar hasta que la contraseña deba ser cambiada.
  6. Días antes de caducar la contraseña en el que se avisará al usuario de que debe cambiarla.
  7. Días que pueden pasar después de que la contraseña caduque, antes de deshabilitar la cuenta del usuario (si no se cambia la contraseña).
  8. Días, desde el 1 de enero de 1970, desde que la cuenta está deshabilitada.
  9. Campo reservado.
Cuando un usuario entra en el sistema, se le sitúa en su directorio home y se ejecuta el intérprete de comandos (shell) configurado. De este modo ya puede empezar a trabajar. Sólo el root del sistema (o los usuarios de su grupo) tienen permiso para manipular la información de los usuarios y grupos, darlos de alta, de baja, etc. Existen muchos comandos para manipular todo esto. Cada uno de ellos tiene, además, varios parámetros diferentes para gestionar todos los campos que hemos visto anteriormente de forma amena. A continuación mostramos algunos de estos comandos:

  • adduser: nos sirve para añadir un nuevo usuario al sistema. La forma como éste se añade (si no le especificamos nada) se puede configurar en el fichero /etc/adduser.conf. Se le pueden pasar multitud de opciones diferentes para especificar el directorio home, el shell que hay que utilizar, etc.
  • useradd: crea un nuevo usuario o cambia la configuración por defecto de los mismos. Este comando y el anterior nos pueden servir para realizar las mismas acciones.
  • usermod: con este comando podemos modificar la mayoría de los campos que se encuentran en el fichero de passwd y shadow, como el directorio home, el shell, la expiración de la contraseña, etc.
  • chfn: cambia la información personal del usuario, contenida en el campo de comentarios del fichero de passwd.
  • chsh: cambia el shell del usuario.
  • deluser: elimina un usuario del sistema, borrando o guardando todos sus ficheros según los parámetros que le pasemos, haciendo copia de seguridad de los mismos o no, etc. La configuración que se utilizará por defecto con este comando está especificada en el fichero /etc/deluser.conf.
  • userdel: comando con las mismas posibilidades que el anterior.
  • passwd: nos sirve para cambiar la contraseña de un usuario, la información de expiración de las mismas o para bloquear o desbloquear una determinada cuenta.
  • addgroup: permite añadir un grupo al sistema.
  • groupadd: lo mismo que el comando anterior, pero con diferentes parámetros.
  • groupmod: nos permite modificar la información (nombre y GID)
  • de un determinado grupo.
  • delgroup: elimina un determinado grupo. Si algún usuario todavía lo tiene como primario, no se podrá eliminar.
  • groupdel: igual que en el caso anterior.
  • gpasswd: nos sirve para cambiar la contraseña del grupo.

Este material a sido en algunas partes basado en su fuente y en otras a sido escrito textual.

Fuente: Sistema operativo GNU Linux Básico