Mostrando entradas con la etiqueta Consola. Mostrar todas las entradas
Mostrando entradas con la etiqueta Consola. Mostrar todas las entradas

sábado, 1 de noviembre de 2014

Securizando ssh con fwknop

La seguridad informática es un problema que preocupa a todos, bueno, lamentablemente esto no es del todo cierto, pero la verdad es que es un tema que cada día preocupa a mas gente del sector. Es algo que siempre tenemos que tener en cuenta, ya que al hacerce mas popular el uso de la tecnología, el botín es mas tentador y hay mas gente intentando adueñarse de lo ajeno.

También es verdad que gracias a internet tenemos mas disponibilidad de toda esta tecnología sin estar fisicamente delante de ella. Para eso necesitamos acceso remoto. Para tener acceso remoto, debemos exponer nuestros equipos a la inseguridad del mundo exterior, y es aquí cuando entra en juego el dilema de cuanto mas necesitamos, mas exponemos y menos seguro estamos. En seguridad informática siempre se intenta primar el mínimo punto de exposición, pero cuanto menos exponemos, menos acceso y mas incómodo resulta el trabajo.

Para seguir con la pauta del menor punto de exposición y aún así, no perder servicios, es para lo que existe la técnica del “port knocking”, literalmente “golpeo de puertos”. Que consiste en tener todos los puertos cerrados exceptuando los del demonio del servicio de port knocking, cuando el demonio detecta una determinada secuencia de “golpeo” en esos puertos determinados, abre el puerto necesario para la comunicación con el host que realizo la “llamada”. Este método se utiliza mucho con ssh.

fwknop es una vuelta de tuerca mas a esta técnica, ya que no utiliza una secuencia de puertos, sino que usa certificados.

Instalar fwknop es muy fácil, veamos como se instala en el servidor y en el cliente.

$sudo apt-get update
$sudo apt-get install fwknop-server

En el cliente es:

$sudo apt-get update
$sudo apt-get install fwknop-client

Creamos las llaves, en el cliente y en el servidor debemos hacer lo mismo:

$gpg --gen-key
$gpg --list-keys
/home/linuxsers/.gnupg/pubring.gpg
------------------------------
pub   2048R/SSSSSSSS 2014-10-31
uid                  linuxsers (linuxsers) <linuxsers@correo.com>
sub   2048R/4BEB2434 2014-10-31

Necesitamos el identificador de la llave pública (en el ejemplo usaremos SSSSSSSS para el identificador del lado servidor y CCCCCCCC del lado cliente), para exportarlo a un archivo, tanto en el servidor como en el cliente:

linuxsers@servidor:~$gpg -a --export SSSSSSSS > servidor.asc
linuxsers@cliente:~$gpg -a --export CCCCCCCC > cliente.asc

Copiamos el archivo del cliente en el servidor y el del servidor en el cliente:

linuxsers@servidor:~$scp linuxsers@cliente:~/cliente.asc .
linuxsers@servidor:~$scp servidor.asc linuxsers@cliente:~

Importamos los archivos:

linuxsers@servidor:~$gpg --import cliente.asc
linuxsers@cliente:~$gpg --import servidor.asc

Firmamos los certificados, el certificado del servidor lo firmamos en el cliente y el del cliente en el servidor:

linuxsers@servidor:~$gpg --edit-key CCCCCCCC
gpg>sign
gpg>save
linuxsers@cliente:~$gpg --edit-key SSSSSSSS
gpg>sign
gpg>save

Modificamos el archivo de configuración de fwknop:

linuxsers@servidor:~$ sudo nano /etc/fwknop/access.conf

SOURCE  ANY;
OPEN_PORTS tcp/22
FW_ACCESS_TIMEOUT 30
REQUIRE_SOURCE_ADDRESS Y
DATA_COLLECT_MODE PCAP
GPG_REMOTE_ID CCCCCCCC
GPG_DECRYPT_ID SSSSSSSS
GPG_DECRYPT_PW (contraseña del certificado)
GPG_HOME_DIR /home/usuario/.gnupg

Ahora resta crear las reglas del cortafuegos, del siguiente modo, sin olvidar guardarlas:

linuxsers@servidor:~$sudo iptables -A INPUT -i eth0 -p tcp --dport 22 
         -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
linuxsers@servidor:~$sudo iptables -A INPUT -i eth0 -p tcp --dport 22 
         -j DROP
linuxsers@servidor:~$sudo iptables-save

Reiniciamos el servicio fwknop-server e ufw:

linuxsers@servidor:~$sudo service fwknop-server restart
linuxsers@servidor:~$sudo service ufw restart

Para conectarse desde el cliente hay que hacer 2 pasos:

linuxsers@cliente:~$ fwknop -A tcp/22 --gpg-recip SSSSSSSS 
         --gpg-sign CCCCCCCC -a IP_CLIENTE -D IP_SERVIDOR
Enter passphrase for signing: 
linuxsers@cliente:~$ ssh linuxsers@IP_SERVIDOR
linuxsers@IP_SERVIDOR's password: 

linuxsers@servidor:~$ tail /var/log/syslog 
Oct 31 23:34:33 servidor fwknopd[4803]: (stanza #1) SPA Packet from IP:
         IP_CLIENTE received with access source match
Oct 31 23:34:33 servidor fwknopd[4803]: Added Rule to FWKNOP_INPUT 
         for IP_CLIENTE, tcp/22 expires at 1414794903
Oct 31 23:35:03 servidor fwknopd[4803]: Removed rule 1 from FWKNOP_INPUT
         with expire time of 1414794903
linuxsers@servidor:~$

Eso es todo por ahora!

martes, 5 de agosto de 2014

Permisos de archivos

Linux, por su arquitectura, dispone de usuarios que pertenecen a grupos. Dichos usuarios poseen permisos para trabajar en el sistema y acceder, o no, a ciertas partes del sistema. A su vez los archivos del sistema pertenecen a usuarios y a grupos. Es por ello que se deben definir qué permisos tienen los diferentes usuarios sobre los diferentes archivos.

Para gestionar la pertenencia y los permisos de los archivos y directorios, existen los comandos chown y chmod, respectivamente.

chown (change owner, cambiar dueño) se utiliza para definir a que usuario y/o grupo pertenecerá el archivo y chmod (change mode, cambiar modo) para definir que permisos tienen los usuarios sobre los archivos.
Un archivo, cuando es listado tiene el siguiente aspecto

[picrobot@umbriel ~]$ ls -la /etc/passwd 
-rw-r--r--. 1 root root 992 ago  3 13:49 /etc/passwd

Junto con el tamaño que ocupa, la fecha de modificación y el nombre del archivo, nos está indicando que el archivo pertenece al usuario root, al grupo root y los permisos que poseen los usuarios sobre él. En este caso el usuario root puede leer y escribir en él, pero los demás usuarios solo podrán leerlo.

La forma que tiene Linux de representar los permisos de los archivos es un poco particular, lo que no significa que sea complicada una vez se explica.

Los permisos son, básicamente 3, permiso de lectura, de escritura y de ejecución. Y significan que, según los tenga activado o no, un usuario podrá, o no, leer, escribir o ejecutar dicho archivo.

En el ejemplo anterior, los permisos resultantes son rw-r--r--. Y se leen de la siguiente forma, las tres primeras letras representan los permisos que tendrá el propietario sobre el archivo, las siguientes 3, los permisos que tendrá el grupo al cual pertenece el archivo y las últimas 3, los permisos que tendrán el resto de usuarios, los que no sean ni el propietario ni pertenezcan al grupo propietario. Un guión, en lugar de la letra correspondiente, significa que ese permiso no está activado.

Veamos un ejemplo práctico:

[picrobot@umbriel ~]$ ls -l archivo.txt 
-rwxrw-r--. 1 picrobot lab 39 ago  3 13:49 archivo.txt

Suponiendo que tengamos una estructura de usuarios como sigue:

UsuarioGrupo
picrobotlab
juanlab
pedroinvitados

El usuario picrobot, podrá leer, escribir y ejecutar el archivo archivo.txt. El usuario juan podrá leerlo y modificarlo, mientras que pedro solo podrá leerlo.

Ahora bien, ¿cómo modificar esos permisos?, muy fácil, con el comando chmod, que se puede utilizar de la siguiente forma:

chmod MODO-OCTAL FICHERO

En MODO-OCTAL se debe poner un número de 3 dígitos, en el cuál cada dígito representa al usuario, al grupo y a otros usuarios respectivamente. Para entender como se forman esos números, primero hay que echar un vistazo a la siguiente tabla y sumar el valor correspondiente de cada atributo si se desea establecer ese permiso.

PermisoValor
Lectura4
Escritura2
Ejecución1

Respecto a la tabla anterior podemos generar el número correspondiente, sumando el número correspondiente al permiso que se desea asignar en cada cifra. De esta forma estamos dotando de los permisos necesarios a uno o varios archivos y/o directorios.

El fichero actualmente tiene los siguiente permisos

PermisoPropietarioGrupoResto de usuarios
Lectura444
Escritura22-
Ejecución1--
Total764


De modo que actualmente el valor de permisos de archivo.txt es 764. Pero para cambiarle los permisos, deberíamos hacer la suma de los valores con los nuevos permisos deseados.

Supongamos que necesitamos hacer que el propietario pueda leer, escribir y ejecutar el archivo, los usuarios pertenecientes al grupo propietario, solo puedan leerlo, mientras que el resto de usuario no pueda leerlo, ni modificarlo, ni ejecutarlo.

La tabla con los permisos, es la siguiente.

PermisoPropietarioGrupoResto de usuarios
Lectura44-
Escritura2--
Ejecución1--
Total740


Y sabiendo el número, podremos pasar a la acción, ejecutando el comando correspondiente.

[picrobot@umbriel ~]$ ls -l archivo.txt 
-rwxrw-r--. 1 picrobot lab 39 ago  3 13:49 archivo.txt 
[picrobot@umbriel ~]$ chmod 740 archivo.txt 
[picrobot@umbriel ~]$ ls -l archivo.txt 
-rwxr-----. 1 picrobot lab 39 ago  3 13:49 archivo.txt 

Primero hemos hecho un ls para poder ver los valores actuales de los permisos, después pasamos a cambiarle dichos permisos y hemos vuelto a realizar un ls para comprobar que, efectivamente se han realizado los cambios.

El comando chmod aparte de la representación octal de los permisos acepta otra, el modo caracter.

chmod [ugoa][-+=[rwx]] FICHERO

Todo lo que esté dentro de corchetes [] significa que es opcional.

Con esta sintaxis podremos establecer, quitar o añadir permisos a usuarios y/o grupos sobre los archivos indicados en FICHERO.

Primero debemos indicar a quien o que le asignaremos dichos permisos, puede ser el usuario propietario (u), al grupo propietario (g), a otros (o) o a todos (a).

Seguidamente indicaremos si deseamos asignarle permisos (=), quitárselos (-) o añadírselos (+) a los que ya tienen.

Y después qué permisos serán, que ya vimos cuales hay disponibles. Por ejemplo siguiendo con el archivo del ejemplo podríamos querer ahora quitarle el permiso de ejecución al propietario, lo haríamos del siguiente modo

[picrobot@umbriel ~]$ ls -l archivo.txt 
-rwxr-----. 1 picrobot lab 39 ago  3 13:49 archivo.txt
[picrobot@umbriel ~]$ chmod u-x archivo.txt 
[picrobot@umbriel ~]$ ls -l archivo.txt 
-rw-r-----. 1 picrobot lab 39 ago  3 13:49 archivo.txt

Hacemos un listado largo del archivo archivo.txt y vemos que el usuario propietario tiene todos los permisos activados, luego de ejecutar el comando chmod y hacer un nuevo ls, observamos que ahora el propietario del archivo ya no tiene permiso de ejecución (x).

Ahora queremos que todos los usuarios del sistema solo puedan leer el contenido del archivo. Para ello le estaríamos asignando un valor octal de 444, pero para el ejemplo lo haremos con el modo carácter. Podríamos asignarle directamente los permisos con el modo carácter, de una forma similar a como lo haríamos con el modo octal, pero para que sea mas didáctico, quitaremos el permiso de escritura al usuario propietario y le añadiremos el permiso de lectura al resto de usuarios. Para ello debemos poner dos opciones, separadas por una coma (,).

[picrobot@umbriel ~]$ ls -l archivo.txt 
-rw-r-----. 1 picrobot lab 39 ago  3 13:49 archivo.txt
[picrobot@umbriel ~]$ chmod u-w,o+r archivo.txt 
[picrobot@umbriel ~]$ ls -l archivo.txt 
-r--r--r--. 1 picrobot lab 39 ago  3 13:49 archivo.txt

Para completar la explicación de los permisos, falta aclarar el tema de la propiedad de los archivos. Como se dijo anteriormente, la propiedad de un fichero se establece con el comando chown, cuya sintaxis es la siguiente.

chown [PROPIETARIO][:[GRUPO]] FICHERO

Debemos especificar un usuario y/o un grupo al cual pertenecerá FICHERO. Por ejemplo, si quisiéramos cambiar el propietario del fichero archivo.txt deberíamos ejecutar la siguiente instrucción.

[root@umbriel picrobot]# chown pedro archivo.txt 
[root@umbriel picrobot]# ls -la archivo.txt 
-r--r--r--. 1 pedro lab 39 ago  3 13:49 archivo.txt

Obsérvese que la acción se ha hecho con el usuario root. Ahora mismo archivo.txt pertenece al usuario pedro, pero sigue perteneciendo al grupo lab, mientras que el usuario pedro pertenece al grupo invitados. Para el ejemplo no habría problemas ya que todos los usuarios del sistema tienen los mismos derechos sobre el archivo, pero imaginemos que los permisos del archivo vuelven a estar como al principio del artículo.

[root@umbriel picrobot]# ls -la archivo.txt 
-rwxrw-r--. 1 pedro lab 39 ago  3 13:49 archivo.txt

Esto último puede implicar un problema de seguridad, puesto que el propietario tiene plenos derechos sobre el archivo y los usuarios pertenecientes al grupo tienen derecho de lectura y escritura, mientras que el resto solo de lectura. Pero como el grupo del archivo es lab y no invitados como el del usuario, podemos estar dando permisos a otros usuarios sin querer. Para ello, seleccionaremos el grupo al cual pertenece el archivo del siguiente modo.

[root@umbriel picrobot]# chown :invitados archivo.txt 
[root@umbriel picrobot]# ls -l archivo.txt 
-rwxrw-r--. 1 pedro invitados 39 ago  3 13:49 archivo.txt

De mas está decir que se podría haber cambiado el usuario y grupo del archivo en un solo comando, simplemente con la siguiente instrucción.

[root@umbriel picrobot]# chown pedro:invitados archivo.txt 

Eso es todo por ahora.

miércoles, 27 de marzo de 2013

Actualizar Ubuntu

Una vez tengamos instalado Ubuntu 12.04 LTS, deberíamos actualizarlo, y también las aplicaciones que vienen instaladas por defecto.
Una gran comodidad que tiene Linux es que no necesitamos liarnos buscando nuevas versiones de todo el software que tenemos instalado en el ordenador, si no que el SO lo hace por nosotros.
Esta tarea en Ubuntu se hace automáticamente pero no significa que no podamos hacerla manualmente, para ello deberemos lanzar un terminal. Se puede hacer gráficamente desde Centro de software Ubuntu, pero eso no tiene mayores inconveniente es seguir un asistente y listo.
Como lo que queremos es aprender, si no no utilizaríamos Ubuntu, lo haremos desde un Terminal.

Para ello hacemos click sobre el icono de la Terminal que previamente anclamos a la Barra de Unity, si no sabes como hacerlo puedes consultar la entrada Personalizar la Terminal de este blog,  donde se explica como hacerlo y como cambiarle los colores a la Terminal.

domingo, 24 de febrero de 2013

Personalizar la Terminal

La Terminal es una herramienta muy importante en entornos Linux, ya que nos permite realizar cualquier tarea de mantenimiento del sistema desde esta, inclusive muchas veces se pueden hacer mas cosas que desde el entorno gráfico.

Primero abriremos una terminal, si recién terminas de instalar Ubuntu 12.04 LTS observarás que no aparece en la Barra de Unity, para ello hacemos click en Inicio y en el cuadro de búsquedas escribimos terminal, luego hacemos click sobre el icono de la  terminal para abrirla.



sábado, 2 de febrero de 2013

Instalar Java en Mozilla Firefox

Una de las cosas que más se usan hoy en día para mejorar la experiencia en la navegación por internet son las páginas dinámicas. Y muchas de estas páginas implementan el uso de frameworks, que son ni mas ni menos como una especie de ventana incrustada donde se ejecuta un mini programa, por así decirlo.

Uno de estos framework es Flash, que se está dejando de utilizar o eso se intenta, el otro es Java y es del que nos encargaremos en este artículo.