15 mar 2017

Copia de seguridad de Ubuntu en Windows

En una entrada anterior vimos el uso del comando mount. Con él, vamos a crear un script que nos permitirá realizar copias de seguridad en Windows, almacenando la fecha del backup. Esto es muy útil si automatizamos la ejecución del script con el cron.

Lo primero que debemos hacer es crear un directorio en la raíz al que llamaremos scripts y al que daremos permisos totales de forma recursiva, para todos los usuarios.
|| sudo mkdir scripts
|| sudo chmod 777 -R scripts

Yo ya tengo creado el script, por lo que mostraré el código y su funcionamiento:
|| sudo nano backup.sh

|| sudo ./backup.sh

La copia se realiza correctamente.

Alias

Los alias son herramientas muy útiles que sirven para crear comandos personalizados. Consiste en darle un valor a una orden para escribir este valor en lugar de la orden original.

Se pueden crear 2 tipos de alias:
1. Sólo en lo que dura la sesión.
|| alias comandoinventado=”comando original”
Ej. alias actualizar=”sudo apt-get update"


2. Si queremos que el alias quede permanentemente lo añadiremos en el fichero:
|| ~/.bashrc

Listas de Control de Acceso - ACL

Una lista de control de acceso añade un nivel mayor de seguridad, permitiendo personalizar permisos de lectura, escritura o ejecución a usuarios específicos o a grupos. Lo primero es instalar la aplicación ACL
|| sudo apt-get install acl

La instalación montará ACL en nuestras unidades existentes.

Para ver nuestros discos duros (unidades), utilizamos el siguiente comando:
|| df

Podemos comprobar si está montado en la unidad con el siguiente comando
|| sudo tune2fs -l /dev/sda1 | grep “Default mount options”


Comprobamos que sí, en la unidad sda1 está montado ACL


Para dar permisos a un usuario de lectura, escritura o ejecución lo haremos del siguiente modo.:
|| sudo setfacl -m u:usuario:rwx /ruta/nombrearchivo

Para ver la lista de permisos de un archivo: test.txt
|| sudo getfacl /home/test.txt


Si tratamos de acceder con un usuario que no tiene permisos se mostrará el mensaje permission denied.

Para dar permisos de forma recursiva a un directorio y a todo su contenido añadimos el parámetro -R
|| sudo setfacl -R -m u:usuario:rwx /ruta/nombrearchivo

Para quitar permisos, a grupos, usuarios…
|| sudo setafcl -b /home/test.txt

Si sólo queremos modificar los permisos tenemos que darlos de nuevo, no se pueden eliminar parcialmente con este método.

IMPORTANTE→ si queremos dar, por ejemplo, permisos de lectura y escritura, se indica como r-x. El campo w no queda vacío, se indica con guión.

El parámetro -d deja los permisos que estaban por defecto.
|| sudo setfacl -d -m g:grupo:rw /ruta/nombrearchivo

Comando cut

Sirve para cortar caracteres y campos, con la posibilidad de usar delimitadores u otras opciones, para finalmente poder extraer las partes seleccionadas de cada fichero.
  • -d → indica qué delimitador utilizamos
  • -f → indica el contenido entre qué delimitadores se va a mostrar

Nomenclatura
Se puede utilizar de dos modos diferentes
  1. cat /etc/passwd | cut -d “:” -f1
  2. cut -d “:” -f1 /etc/passwd

Esto puede utilizarse, por ejemplo, para mostrar los usuarios o los grupos del sistema.
  • Los usuarios se almacenan en /etc/passwd
  • Los grupos se almacenan en /etc/group

Podemos ver que las separaciones de los parámetros es el símbolo de dos puntos (:). Por tanto, este será el delimitador.

Si quisiéramos mostrar los usuarios del sistema por terminal:
cut -d ":" -f1 /etc/passwd
 
Esto puede ser útil para volcar diferentes salidas a un archivo mediante redireccionamientos. Así observaríamos los cambios de usuarios del sistema a lo largo del tiempo.

Programación de tareas

En Ubuntu al igual que en Windows podemos automatizar tareas. Estas tareas se configuran en una utilidad llamada cron.

Para editarlo y añadir tareas
|| sudo nano /etc/crontab


Las columnas son, por orden:
  • minuto (0-56)
  • hora (0-23)
  • día del mes (0-31)
  • mes (0-12)
  • día de la semana (0-6), siendo 0 el domingo
  • usuario
  • comando

Algunos valores se pueden representar de diversos modos, pero no entraremos a detallarlos.
Por otra parte hay valores especiales:
  • Guión (-): Sirve para separar un intervalo. Ej. 1-20 tomará todos los valores intermedios, incluidos los indicados.
  • Coma (,): Sirve para concretar valores específicos. Ej. 1,4,6
  • Asterisco: Sirve para indicar todos los valores aceptados

El usuario es a través de quién se ejecutan las instrucciones, utilizando sus permisos. Lo normal es utilizar al usuario root, aunque pueden aparecer otros.

El comando es la orden que ejecutamos. Por ejemplo, una tarea que nos apague el equipo: shutdown now


Aquí se muestra una tarea que apagaría el equipo de lunes a viernes a las 14:30


15 feb 2017

Apache - Php - MySQL - FTP

Para instalar un servidor Apache
|| sudo apt-get install apache2

Instalamos PHP
|| sudo apt-get install php

Instalamos la base de datos MySQL y las librerías.

|| sudo apt-get install mysql-server mysql-client php-mysql


Reiniciamos el servidor:

|| sudo service apache2 restart

Vamos a comprobar que funciona nuestro php. Para ello creamos un fichero llamado info.php con el siguiente contenido en el directorio /var/www/html

<?php
       phpinfo();
?>

Si no funciona eliminamos el php y lo instalamos por módulos:

Eliminamos:

|| sudo apt-get purge php* 


Instalamos

|| sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-simplexml php7.0-xml


Reiniciamos el servidor Apache

|| sudo service apache2 restart

Escribimos localhost/info.php en el navegador y comprobamos que funciona:

Para instalar un servidor FTP:
|| sudo apt-get install vsftpd

Editamos el fichero de configuración
|| sudo nano /etc/vsftpd.conf


# Desactivamos el acceso anónimo
anonymous_enable=NO
#
# En la siguiente línea se define la ruta de la carpeta del usuario anónimo. Por defecto, si no aparece es:
#anon_root=/srv/ftp
#
# Descomentamos la línea para que se puedan conectar
local_enable=YES
#
# Permitimos a usuarios locales escribir
write_enable=YES

La línea write_enable viene comentada, la descomentamos y guardamos los cambios

Para conectarnos utilizaremos un cliente de Windows. Al entrar con un usuario por FTP, apareceremos en su directorio personal:

Samba

Samba es un paquete que hace de librería Windows. Permite crear recursos compartidos entre sistemas Linux y Windows.

Instalamos Samba:
|| sudo apt-get install samba cifs-utils

Para compartir recursos con Samba antes debemos crear una carpeta compartida en Windows, donde deberemos tener una cuenta de usuario, y configurar correctamente el uso compartido de archivos y carpetas.

Creamos el directorio compartido en la raíz de Windows. Lo llamamos por ejemplo, server. A continuación con clic secundario > propiedades, compartiremos la carpeta y daremos todos los permisos a todos los usuarios.

  • Pestaña Compartir > Uso compartido avanzado > Compartir esta carpeta



  • Pestaña Seguridad > Editar... > Agregar... Todos


Marcamos todos los permisos y aceptamos.

  • Panel de control > Redes e Internet > Centro de redes y recursos compartidos > Configuración de uso compartido avanzado

- Elegimos el perfil de red que estemos usando, en este caso "Casa o trabajo".
- Activamos la detección de redes, el uso compartido de archivos e impresoras.
- El uso compartido de la carpeta pública.
- Habilitamos el uso compartido para dispositivos que usan cifrado de 40 ó 56 bits 
- Desactivamos el uso compartido por contraseña.

Creamos un documento de texto plano en la carpeta compartida para comprobar si podemos verlo en nuestro Ubuntu.


Una vez hecho esto, nos vamos al servidor.

  • Creamos un directorio para compartir en /media/compartida
|| sudo mkdir /media/compartida

  • Montamos el recurso compartido en la carpeta que hemos creado
|| sudo mount -t cifs //IP/RecursoWindows /media/carpeta -o user=usuario,password=password

Podemos desmontarlo con sudo umount /media/compartida

Cambiar idioma a Webmin

Si queremos o necesitamos cambiar el idioma de nuestro Webmin a español, podemos hacerlo desde Webmin > Webmin Configuration > Language

En Display in language indicamos Spanish (ES.UTF-8), clic en Change Language y reiniciamos el navegador y el servicio de webmin:
|| sudo service webmin restart

Webmin

Webmin es una aplicación para Linux que sirve para centralizar toda la configuración del sistema, desde un navegador web.

Para instalar Webmin iremos a su página oficial desde nuestro servidor: http://www.webmin.com/download.html y descargaremos el instalador con extensión .deb, que será el que necesitaremos para Ubuntu.

Una vez descargado utilizaremos el siguiente comando para instalar webmin:
|| sudo dpkg -i webmin_1.831_all.deb

Si nos falla la instalación porque faltan paquetes de dependencias podemos forzar la instalación de webmin y sus dependencias:
|| sudo apt-get -f install

Webmin utiliza el protocolo https y el puerto 10000 por defecto. Para acceder Webmin necesitaremos entrar al navegador e introducir la siguiente dirección:
|| https://localhost:10000
Si no indicamos el protocolo https en la dirección, nos aparecerá un enlace de redirección.

La primera vez que conectemos el navegador nos dirá que el certificado de la dirección no está firmado. Le daremos a Avanzado > Añadir excepción...

De ahora en adelante nos aparecerá la ventana de login, donde nos identificaremos como sudoer. 
Y accederemos a Webmin:

Para poder realizar esta instalación es imprescindible instalar Apache antes que Webmin.

Network Manager

Network Manager es una aplicación que se utiliza mediante el entorno gráfico que permite realizar nuestras configuraciones de red, en lugar de como lo veníamos haciendo editando el fichero /etc/network/interfaces

Para utilizar Network Manager como aplicación de configuración de red, editamos el fichero /etc/NetworkManager/NetworkManager.conf con un editor de texto.
|| sudo mousepad /etc/NetworkManager/NetworkManager.conf

Cambiamos el valor de managed a true, guardamos los cambios y reiniciamos el servicio:
|| sudo service network-manager restart

Ahora se nos conecta mediante Network Manager como muestra esa ventana informativa. Nos aparece el icono de las dos flechas desde el que podemos acceder a la configuración de nuestra red.

En Editar las conexiones... podremos editar la configuración de red de nuestros adaptadores. Nos iremos a la pestaña Ajustes de IPv4 e indicaremos la configuración de red que requiramos.

Para terminar editaremos el fichero /etc/network/interfaces para evitar conflictos con los adaptadores de red. Comentaremos todas las líneas a excepción de las de localhost:
|| sudo nano /etc/network/interfaces

Ahora podremos ver nuestra configuración de red por consola con el comando:
|| sudo ip addr

Para ver la configuración de red del cliente podemos usar nmcli. Sin parámetros, muestra información sobre todas las opciones posibles.

Aplicaciones al inicio

Podemos configurar las aplicaciones que arrancan al inicio o añadir algunas nuevas. Para ello seguimos vamos a Inicio > Toda la configuración > Sesión e inicio

En la pestaña Autoarranque de aplicaciones tendremos un listado de aplicaciones que vendrán marcadas o desmarcadas, dependiendo de si se inician al ejecutar el sistema. Podemos añadir aplicaciones que no se encuentren en el sistema con el botón Añadir.

Para realizar una configuración más precisa se recomienda hacer la configuración por comandos, abriendo los archivos de configuración de las aplicaciones con un editor de texto.

Los archivos .desktop son los que arrancan al inicio, para editarlos iremos a la ruta ~/.config/autostart que es donde se encuentran.

Si no aparece ninguna aplicación significa que los tendremos configurados en la siguiente dirección: /etc/xdg/autostart/

Abrimos cualquiera con Mousepad u otro editor de texto:
|| sudo mousepad xscreensaver.desktop
Se mostrán un gran número de variables, la mayoría serán Name y Comment, ya que hay uno por cada idioma.

Algunos ejemplos de líneas de contenido que podemos encontrarnos son las siguientes:
  • Name[es]=Nombre del programa mostrado
  • Comment[es]=Es el texto que aparece al dejar el ratón encima del icono o viendo sus propiedades.
  • OnlyShowIn=XFCE;GNOME; → entornos gráficos en los que se muestra, si no está soportado por alguno se quita.
  • NotShowIn=KDE; no ejecutar en los entornos gráficos indicados.
  • Terminal=false → especifica que no se ejecuta en terminal porque utiliza entorno gráfico. Si apareciera como true, primero se ejecutaría el entorno gráfico y luego la aplicación.




14 feb 2017

Servicios o demonios

Un demonio es un programa que se ejecuta en segundo plano cuya función más común es la de ofrecer servicios a otros programas.

Los servicios pueden estar iniciados o detenidos. Sus parámetros más comunes son:
  • start: Incia un servicio.
  • restart: Detiene e inica nuevamente un servicio.
  • stop: Detiene un servicio.
  • status: Muestra información sobre un servicio.

Los servicios instalados en un equipo se encuentran en el directorio /etc/init.d/
Podemos cambiar su estado o introducir diversos parámetros del siguiente modo:
|| sudo /etc/init.d/apache2 stop
Detenemos Apache

consultamos su estado:
|| sudo /etc/init.d/apache2 status
Consultamos el estado de Apache

lo iniciamos de nuevo:
|| sudo /etc/init.d/apache2 start
Iniciamos Apache

Podemos ver un listado de los servicios instalados en el equipo con:
|| ls /etc/init.d

También podemos utilizar el comando service para cambiar el estado de los servicios. En algunas ocasiones será obligatorio hacerlo de este modo.
|| sudo service apache2 restart
Reiniciamos Apache

Enlaces simbólicos y enlaces duros

Existen 2 tipos de enlaces que podemos crear a otros archivos o directorios en Linux. Estos enlaces son los enlaces simbólicos (soft link) y los enlaces duros (hard link)

Un vínculo simbólico es similar a un acceso directo de Windows. Si actualizamos lo enlazado únicamente se actualiza el original. No es necesario ir buscando todos los vínculos para actualizarlos.

Para crear un vínculo simbólico:
|| ln -s archivo vinculo-simbolico-a-archivo

Un vínculo duro a un archivo o directorio es tratado por el sistema como si fuera el original. Es útil, por ejemplo, en caso de borrar un programa y no recordar en qué ubicación estaba almacenado. 

Para crear un vínculo duro:
|| ln archivo vinculo-duro-a-archivo

Synaptic

Synaptic es un gestor de paquetes que utiliza el entorno gráfico. Nos permitirá instalar, actualizar o desinstalar paquetes. Synaptic utiliza el archivo de repositorios sources.list y no funcionará si hay otro programa ejecutándolo.

Para empezar nos descargamos Synaptic:
|| sudo apt-get install synaptic

Ejecutaremos el programa como sudo:
|| sudo synaptic

Lo más interesante sería el apartado Estado, bajo Secciones en el lateral inferior izquierdo de la ventana. Nos aparecerán por encima los siguientes menús al clicarlo:

  1. Instalado: Muestra los paquetes instalados en el sistema.
  2. Instalado (actualizable): Muestra versiones más nuevas de los paquetes que tenemos instalados.
  3. Instalado (manual): Muestra los paquetes que hemos instalado nosotros, manualmente.

Por último, para buscar paquetes podremos usar la opción Buscar, que se muestra en el icono con una lupa. Introducimos el texto de búsqueda y la zona en la que deseamos realizar ese criterio de búsqueda, siendo éstas Nombre, Descripción y nombre, o Versión entre otras.

Synaptic tiene la ventaja de que no necesitas conocer el nombre del paquete, lo que facilita su localización e instalación. Recordemos que en sistemas Linux, al instalar un paquete por línea de comandos debemos escribir su nombre exacto.

Redireccionamientos

Una redirección es una forma de trasladar información desde un fichero a otro en Linux. Una posible aplicación de una redirección podría ser guardar el contenido de un fichero, como sources.list (la lista de nuestros repositorios), a un documento .txt. Yo lo haré con algo más sencillo de visualizar.

Desde mi carpeta personal hago un ls para listar todo el contenido de la misma.

Supongamos que quiero guardar el contenido que me muestra este comando por alguna razón, como por ejemplo que vayamos a realizar modificaciones. Para ello podemos utilizar un redireccionamiento.

Guardaré todo el contenido del comando ls de mi carpeta personal en un archivo llamado redireccionamiento.txt
|| ls > redireccionamiento.txt

Mostraré el contenido del txt que he creado
|| nano redireccionamiento.txt

También quedará en el listado nuestro nuevo archivo de texto.

Ahora bien, si quisiéramos guardar una nueva redirección en el fichero para tener un historial con los cambios, no utilizaremos el comando redireccionador anterior porque sobreescribiríamos el archivo txt, si no que utilizaríamos el siguiente:
|| ls -la >> redireccionamiento.txt

El contenido se añadirá al final del archivo 

Ahora supongamos que lo que queremos es mostrar contenido del fichero sin abrirlo. Podemos mostrar varias líneas del principio...
|| head redireccionamiento.txt

... o varias líneas del final
|| tail redireccionamiento.txt

Tanto como para el comando head como para el comando tail, podemos elegir el número de líneas que queremos mostrar. Si por ejemplo, sólo queremos mostrar las 3 primeras líneas escribiremos lo siguiente:
|| head -3 redireccionamiento.txt

Por otra parte, imaginemos que sólo queremos mostrar la tercera línea por abajo. Esto también se haría del mismo modo para head que para tail, simplemente es cuestión de jugar con los parámetros:
|| tail -3 redireccionamiento.txt | head -1
De las 3 últimas líneas, la primera línea
Como veis el redireccionamiento y sus parámetros dan mucho juego, es cuestión de cada cuál adaptarlo a sus necesidades o a su imaginación. No obstante, el redireccionamiento es una herramienta que nos será de gran ayuda.´

Por último, voy a rizar un poco el rizo. Imaginemos que queremos guardar varias líneas de un archivo de texto en otro archivo. Podríamos utilizar la siguiente línea:
|| head -4 redireccionamiento.txt | tail -2 > listas.txt

Si lo abrimos con nano observaremos que hemos copiado las líneas 3 y 4 del fichero redireccionamiento.txt a otro nuevo, lineas.txt