Saltar a contenido

2021

¿Qué es PHP y cómo funciona?

Bienvenido a mi primera entrega de PHP, en esta entrega podrás conocer los conceptos básicos para saber qué es PHP y cómo trabaja. También verás ejemplos de un código PHP programado para una Web y también ejecutado directamente en una consola PHP en tu sistema operativo.

Una vez que acabes de leer esta entrada podrás:

¿Qué es PHP?

PHP viene de las siglas un tanto recursivas en inglés PHP: Hypertext Preprocessor.Es uno de los lenguajes de programación de código abierto más populares que existen en el desarrollo de páginas Web cuyo contenido sea dinámico como puede ser un blog como es el caso de Wordpress; una herramienta de administración de monitorización como puede ser Nconf... por lo que los desarrolladores lo conocerán como un lenguaje que se ejecuta en el lado del servidor y no en el lado del cliente como es el caso de Javascript.

Además de poder trabajar con él generando páginas Web cuyo contenido sea dinámico, también se pueden crear scripts y rutinas conjuntamente con el sistema operativo, ya que posee una consola con la que poder interactuar con él.

Esto permite a PHP ser un lenguaje versátil con el que puedes programar procesos o rutinas que se ejecuten en el sistema mediante metodología de scripting, o bien, programar procesos que trabajen con un servidor Web, un sistema gestor de base de datos... que puedan generar contenido dinámico.

¿Cómo funciona?

A nivel de sistema operativo, cuando tienes una consola, los comandos que se ejecuten en ella, directamente se ejecutará y devolverá un resultado. Esto es válido también para el desarrollo de scripts junto con el sistema operativo. Se pueden crear rutinas y ejecutar código bash a través de una shell de PHP.

Sin embargo, también se puede ejecutar código PHP y que inserte el resultado en una página web con contenido HTML siempre y cuando su extensión sea .php. Además, se puede controlar qué código HTML dependiendo de un resultado como por ejemplo, que quieres que se muestre si estás logueado o no, o si incorporas un sistema con mecanismos de control.

Aquí tienes una explicación simple del funcionamiento de un servidor Web con PHP.

Programando con PHP en terminal

Para abrir una terminal y empezar a trabajar con PHP directamente hay que ejecutar:

php -a
Interactive shell

php >

Verás que el prompt del sistema a cambiado a php >

Se puede ejecutar el código desde un fichero:

Contenido del archivo ejemplo.php
$foo = "Hello world";
echo $foo;

Ejecutamos:
php -f ejemplo.php
Hello world $
  • NOTA: No necesariamente hay que utilizar la extensión .php para que ejecute el código PHP que haya dentro de un archivo.

Trabajando con PHP con un servidor Web

Para trabajar con un servidor Web como NGINX, Apache, Lighthttpd, Cherokee... habrá que respetar la extensión .php en tus archivos. y añadir una etiqueta de apertura para que el servidor interpete el código PHP como código PHP y no código HTML.

Por ejemplo:

/var/www/html/index.php en un servidor X existe el siguiente código:

<?php

    echo "Hello World!" # Contenido de ejemplo que muestra la frase Hello world
?> 

Si el servidor Web y el PHP están correctamente instalados, devolverá el siguiente mensaje:

Hello world!

Automáticamente, se traduce en HTML como un párrafo <p>Hello world!</p>

Se puede mezclar código HTML y PHP siempre y cuando tenga la extensión .php tu archivo:

En /var/www/html/foo.php de un servidor Y:

<!DOCTYPE html>
<html>
    <head>
<title><?php echo$titulo; ?> </title>

<meta charset=”utf-8”>

</head>

<body>

<?php $titulo = “Esto es untitulo”; ?>


<?php $texto= “Esto es unalínea de código”; ?>

<p><?php echo $texto;?></p>

</body>
</html> 

Esto va a generar una página con el siguiente resultado, que será interpretado por el navegador como dos párrafos:

<p>Esto es un título</p>
<p>Esto es una línea de código</p>

Si queremos saber toda la información que tiene la versión que tienes instalada de PHP bastará con:

<?php

    phpinfo():

?>

En la siguiente entrega te encontrarás con: * ¿Cómo instalar PHP? * ¿Cómo configurarlo?

Referencias

Recuperando el acceso al usuario root

¿Qué pasa cuando nos olvidamos de la contraseña de root?

— Cariño, ¿A dónde vas?

— Pues a comprar

— ¿No me das un beso?

— Pero..., si vuelvo en un momento

— Vale, vale...

Creo que tod@s l@s que hemos tenido pareja, entendemos esa escena en la que escuchamos ese Vale vale con cierto rintintín como si estuvieran diciendo "Oye te quedas sin postre esta noche"... Pues esto es igual, pero depende de la gravedad del asunto nos puede resultar un suplicio o podemos pasar un buen rato aprendiendo. Como nos olvidemos de la contraseña del superusuario y no tengamos sudo(1) configurado con las restricciones y permisiones respectivas para poder llevar a cabo tareas de administración la tenemos crudo. Sin embargo, tenemos un método alternativo para asignar una nueva contraseña y salir del apuro.

¡Comencemos!

Requisitos

En primer lugar, necesitamos tener bajo nuestro brazo un live CD/DVD/USB/PXE con el que arrancar un entorno Linux en nuestro ordenador, preferiblemente si tenemos un sistema que corre bajo systemd(1), utilicemos una versión similar, al igual que si usa runit(1) o upstart(1) y sobre todo que sea acorde con vuestra arquitectura instalada, si es ARM, x86 (32 bits), o x86_64/AMD64T (64-bits).

Primeros pasos

Una vez que hemos arrancado el live *, tendremos que saber, qué particiones debemos de montar y sobre todo, cada uno sabrá que esquema de particiones, en nuestro caso vamos ha hacerlo utilizando el siguiente esquema de particionado del disco.

  • /-> Raíz del sistema -> /dev/sda1
  • /boot -> Partición con el contenido de arranque -> /dev/sda2
  • swap -> Partición de intercambio -> /dev/sda3

Solo haremos uso de la partición raíz en este caso

Abriremos una terminal y escribiremos lo siguiente:

su -
mkdir /recuperacion
mount /dev/sda1 /recuperacion
mount --rbind /dev /recuperacion/dev
mount --make-rslave /recuperacion/dev
mount --rbind /sys /recuperacion/sys
mount --make-rslave /recuperacion/sys
mount -t proc /proc /recuperacion/proc

En este bloque de comandos, lo que hacemos es obtener todos los privilegios de superusuario dentro de la imagen Live.

NOTA: En otro post explicaremos que son los usuarios, grupos y qué es ser superusuario.

  1. Creamos un directorio dónde montaremos la partición raíz y la montamos
  2. Montamos los sistemas de archivos virtuales en sus respectivos directorios (dev, proc y sys)

Haciendo chrooting

Un chroot(1) es un comando que nos permite de alguna forma aislar un entorno Linux que hayamos montado en nuestro sistema y seguir trabajando sin problemas en nuestro sistema operativo, es decir, tendremos un Linux dentro de otro Linux y podremos operar con él para según que cosas. Esto es muy útil para gestiones de este tipo, en Gentoo por ejemplo se utiliza para instalar el sistema y en sistemas como FreeBSD tenemos una variante similar llamada jails(1) que es un chroot(1) con esteroides, en la que permiten lanzar servicios o "daemons" de forma aislada y sin tener que instalar un sistema base para poder operar con él.

Bien, pues vamos a por ello:

chroot /recuperacion /bin/bash

NOTA: Depende de la distribución que uses, te interesará recuperar el usuario root o el usuario corriente con sudo(1) configurado. Por ejemplo, las distribuciones como Ubuntu conceden privilegios de administración máximos del sistema a los usuarios corrientes haciendo uso de sudo(1), y las distribuciones como CentOS, Fedora, Gentoo... sin embargo, prefieren separarlo y hacer uso del comando UNIX por excelencia su(1) para autenticarse como root y tener privilegios.

Recuperando la contraseña

En caso de distribuciones con Ubuntu o en las que tengamos nuestr@ usuari@ con sudo(1):

passwd usuario_comun

En caso de distribuciones como Fedora, Gentoo, Archlinux... o que utilicen el usuario root:

passwd root

Cuando nos pida la contraseña y comencemos a escribir, por motivos de seguridad no se mostrará en la terminal, por lo que tenemos que estar seguro de lo que escribimos.

Terminando

Una vez que acabemos, desmontamos todos los sistemas de archivos y reiniciamos.

exit
umount -l /recuperacion
systemctl reboot

Referencias * Gentoo Installation Guide * FreeBSD Handbook ~ Jails * Fedora Reset Password * Google * Man pages ~ chroot(1)

Conexión RS-232-USB

Adaptador RS232-USB StarTech.com

En el siguiente artículo, vamos a ver cómo podemos conectarnos mediante fuera de banda a dispositivos de red como puede ser un switch o un router desde Linux.

¿Qué es conexión fuera de banda?

Es un enlace entre un dispositivo (host) hacia el otro dispositivo que queramos acceder como un router o un switch haciendo uso de un cable especial como un RS-232, USB-MicroUSB, o un adaptador RS-232-USB. Esta conexión no requiere ningún tipo de direccionamiento IP y sólo puede accederse físicamente, a menos que tengamos un sistema de soporte de fuera de banda pero ya eso es otra historia.

Tengo el adaptador, cable... ¿Cómo me conecto?

Para conectarnos necesitaremos un programa especial llamado "Emulador de terminal". Consiste en un software que nos permite ejecutar comandos en los dispositivos a los que queremos conectarnos. Este contiene una serie de parámetros como la velocidad, bit de paridad... que por regla general están determinados en el manual del dispositivo ya sea switch, router...

En los siguientes apartados veremos cómo conectarnos desde Linux, Windows.

Linux

Tenemos una serie de programas en modo CLI como minicom(1)), o también en modo GUI como cutecom, putty(1).

Preferiblemente utilizo screen(1), fácil, rápido y sencillo.

Instalando screen

Lo tenemos disponible en la mayoría de distribuciones de Linux, si es que, no viene ya incluido por defecto.

Fedora 27
su -c "dnf install screen"
Archlinux
sudo pacman -S screen
Gentoo
sudo emerge -av screen
Debian, Ubuntu, Linux Mint...
sudo apt-get install screen
Código fuente
  1. Descargar código fuente
  2. Extraer
  3. Instalar dependencias requeridas para la compilación
  4. Configurar opciones y parámetros opcionales
  5. Compilar
  6. Instalar
  7. Limpiar
Descargar código fuente

Obtenemos el código fuente desde aquí, o bien mediante wget(1). Posteriormente, descargamos la firma para verificar que el archivo no ha sufrido ninguna alteración, puedes hacerlo desde el siguiente enlace

Extraer

Extraemos los archivos en un directorio, por ejemplo /home/sincorchetes/screen, y nos situamos en él.

Dependencias para la compilación

Instalamos todos aquellos archivos que se nos pide en el proceso de compilación. Generalmente suelen venir en un fichero README.

  • GCC
  • autoconf
  • make
  • binutils
  • automake
  • ncurses-devel
Configurar opciones

Según las instrucciones encontradas en el fichero INSTALL: 1. Ejecutar ./autogen.sh 2. Establecer la configuración que queremos que tenga screen, incluyendo el directorio raíz dónde se instalará este software, en mi caso /usr:

./configure --prefix=/usr
  1. Compilar el código

NOTA: Puedes hacer uso de CFLAGS (instrucciones que contiene el procesador para llevar a cabo la compilación más rápida entre otras cosas), o la compilación paralela con -jN, dónde N equivale al número total de CPUs detectados en /proc/cpuinfo

make
  1. Instalar
make install clean
  1. Ejecutar
screen

Identificando el dispositivo

En Linux las conexiones seriales se encuentran en /dev/ttySN, sin embargo, al utilizar un adaptador USB se renombra a /dev/ttyUSBN siendo N el número de dispositivo detectado por orden de conexión.

Una vez que conectemos el adaptador USB, RS-232=USB, ejecutamos: dmesg

Y en las últimas ĺíneas nos debería de aparecer el siguiente mensaje:

[13194.083292] usb 3-1: new full-speed USB device number 2 using xhci_hcd
[13194.232019] usb 3-1: New USB device found, idVendor=0557, idProduct=2008
[13194.232025] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[13194.232028] usb 3-1: Product: USB-Serial Controller D
[13194.232044] usb 3-1: Manufacturer: Prolific Technology Inc. 
[13195.175447] usbcore: registered new interface driver pl2303
[13195.175477] usbserial: USB Serial support registered for pl2303
[13195.175523] pl2303 3-1:1.0: pl2303 converter detected
[13195.204173] usb 3-1: pl2303 converter now attached to ttyUSB0

Ahí podemos ver cómo el dispositivo se encuentra en /dev/ttyUSB0

Conectándonos al dispositivo

Abrimos una terminal:

$ screen /dev/ttyUSB0

Deberá salirte un mensaje como este de información previa al acceso al dispositivo en caso de que lo tuviese:

SAT FEB 17 06:53:48 : LANPOWER (108) info message:
+++ Power Supply #1 Present(0xc)!
+++ 48v Present(0x6)!
+++ Power Supply #1 Up(0xc)!
Successfully sent the I2C read message to NISUP!!

SAT FEB 17 06:53:58 : INTERFACE (6) info message:
+++  NIs are ready 

SAT FEB 17 06:54:28 : REMOTE_CONFIG (142) error message:
+++  DHCP Response not received in 30s. Failed!

SAT FEB 17 06:54:28 : REMOTE_CONFIG (142) info message:
+++ Remote Configuration Download cannot proceed.

login : 

Windows

Para conectarnos desde Windows, tenemos software como PuTTY, TeraTerm...

  1. Descargamos PuTTY for Windows
  2. Instalamos
  3. Verificamos qué ID tiene el adaptador conectado accediendo a:
    • Panel de control -> Administrador de dispositivos -> Puertos (COM & LPT)
  4. Una vez que lo sepamos, lanzamos PuTTY -> Serial -> "Serial Line escribimos": COM5

Como podemos ver en la siguiente imagen: Ventana de administración de dispositivos de Windows y PuTTY

Troubleshooting

En este apartamos intentamos resolver algún que otro problema que nos pueda surgir en los diferentes sistemas.

Linux

No se establece la conexión porque devulve:

/dev/ttyUSB0: Permission denied

Esto es debido a que la distribución que actualmente utilizamos gestiona los dispositivos seriales a través de un grupo como puede ser dialout. Para solucionar este problema:

# gpasswd -a USUARIO dialout
$ newgrp dialout
screen /dev/ttyUSB0

Windows

El sistema no detecta el driver automáticamente, o no viene incluido con el cable. Por lo general hay un driver genérico que podemos obtener a través del siguiente enlace

Referencias

  • Google
  • LPIC-I Ediciones ENI - Tercera edición
  • ArchLinux

Share Your Doc una versión minimalista de Pastebin

Hace unos días acabé una pequeña herramienta Web llamada Share Your Doc, que permite compartir código fuente, mensajes, scripts...etc via Web como si fuese un típico servicio de Pastebin, Fpaste como seguramente conocerás.

Sin embargo, lo bueno que tiene este, es que trabaja conjuntamente con el sistema operativo, no requiere de ningún método para validarse de usuarios, ni tampoco hace uso de conexiones FTP. Simplemente, añades tu código, creas el token y a correr.

Es una herramienta pensada para trabajos de grupo con desarrolladores, administradores de sistemas... aunque puedes darle el uso que quieras. Lo único que necesitas para tenerla instalada, es tener PHP, un servidor Apache, y si acaso, tocar algún que otro permiso en Linux.

Para obtenerla solo te tendrás que clonar el repositorio alojado tanto en Github como en Gitlab.

git clone https://gitlab.com/sincorchetes/shareyourdoc.git
git clone https://github.com/sincorchetes/shareyourdoc.git

O si deseas, también puedes descargar el SRC desde la página del repositorio.

NOTA: Si usas SELinux, asegúrate de tener etiquetados todos los archivos bajo: unconfined_u:object_r:httpd_sys_content_t:s0

¡Espero que os guste, saludos!

Transfersh sube archivos desde terminal

Si quieres compartir archivos desde Bash por ser un curioso, por subir ficheros de un servidor a otro sitio...etc puedes hacerlo mediante transfer.sh.

Este servicio permite alojar archivos de hasta 10GB de capacidad sin coste alguno. También añade una serie de características como seguridad (archivos alojados encriptados), obtienes una URL para descargar los archivos desde cualquier navegador y todo con un plazo de hasta ¡14 días!

Tan solo hay que utilizar curl(1), un programa parecido a wget(1), este permite transferir datos a servidores utilizando algúno de los protocolos soportados como DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET y TFTP). También tiene otras características como soporte para proxy, autenticación de usuari@s, conexión SSL, cookies...etc

¿Cómo funciona el servicio?

Bueno básicamente, con ejecutar:

curl --upload-file fichero_a_subir https://transfer.sh

Este devolverá una URL que apunta al fichero. También se puede hacer directamente, si añades en el apartado "Drag your files here, or click to browse." dará el mismo resultado via Web.

¿Cómo descargo el fichero?

Bien, puedes hacer un simple:

curl https://transfer.sh/NUMERO/NOMBRE_ARCHIVO -o NOMBRE_ARCHIVO

O bien, desde la propia Web.

¡A qué espera a probarlo!

Twister, gestiona tus frameworks frontend más populares desde Bash

Buenas tardes compañer@s, siento no poder llegar a los plazos de las entregas, pero tenemos un ritmo frenético de trabajo, no obstante, tenemos muchas ideas para entregar y sobre todo queremos acabar nuestro Mastering en Bash para/con vosotr@s.

Hemos ideado un script llamado ¡Twister!, ¡Sí!, porque mezclar frameworks es divertido e incrementa las funcionalidades de nuestros sitios Web por menos tiempo!

Twister nos permite crear nuestros proyectos basados en frameworks conocidos del lado del "front-end". Para quiénes no lo sepan, cuando se elabora un desarrollo Web, suelen haber (no siempre) diversos compañer@s que se encargan de diversas capas del proyecto. * Desarrolladores front-end, son aquellas personas que se dedican a elaborar el diseño de la página Web como la plantilla, las ventanas de diálogo, efectos... * Programadores back-end, encargad@s de elaborar todo el contenido que será procesado por servidores, como consultas a sistemas gestores de bases de datos...etc * Redactores de documentación, se encargan de elaborar los manuales de usuari@, de continuación de desarrollo...

Pero.. ¿Qué es un framework?

Ahora bien, ¿Qué es un framework? Un framework o bifurcación en español, es una extensión de un software, aplicación...etc que ya existe, y potenciarlo bajo otro nombre. Ya sea porque el software que está es viejo, ya no se mantiene, y se pretende darle otro aire; por motivos prácticos como pasó cuando Oracle paró el desarrollo de OpenOffice y así nació LibreOffice; enriquecimiento personal...

Sin embargo, en los desarrollos Web es común ver como hay una multitud de frameworks que permiten facilitarnos la vida a tod@s aquell@s que diseñan o elaboran un sitio Web. Ya que, una persona o un conjunto de personas han elaborado otra forma de hacer las cosas, y que, si lo hiciésemos nosotr@s desde 0 tardaríamos meses de trabajo tedioso como es la traducción de mensajes a otros idiomas de cada diálogo que elaboremos, un sistema de login de usuari@s...

Ahora bien, este script permite descargar y crear entorno de trabajo con algunos frameworks más utilizados como es el caso de jQuery, un framework de JavaScript que lleva vigente desde el 26 de agosto del 2006 con el propósito de facilitar la gestión de eventos, efectos y muchas cosas con las que tardaríamos la vida si lo hiciéramos con JavaScript puro.

Bootstrap liderado por Twitter desde agosto de 2011 que consiste en un conjunto de código CSS (hojas de estilo) y JS (JavaScript) apoyado en jQuery que permite obtener una interfaz profesional con poco código utilizado.

Y por último, VUE.js, elaborado en febrero de 2014 por Evan , un desarrollador de Google contribuyó mucho en un framework de JavaScript muy conocido como es AngularJS. Este extrajo algunas partes que consideraba buenas y creó otro framework para desarrollar y facilitar así la programación de eventos, interfaz... así como crear una aplicación Web del lado del cliente. (En otros post explicaremos todo con más detalle).

Más adelante, iremos actualizando el script añadiendo mejoras como, instalar frameworks que se ejecuten en el lado del servidor (backend); menú gráfico; más frameworks interesantes...etc

El Script está elaborado en Bash, licenciado bajo los términos GNU GPL 2.0, y se puede obtener desde GitLab

git clone https://gitlab.com/sincorchetes/Twister.git

¡Un saludo internautas!

Gestión y administración de usuari@s y grupos en Linux

Algunos conceptos

Linux al igual que otro sistema operativo basado en UNIX, por herencia obtiene uno de los hitos que marcó un antes y después en la era de los sistemas, y es el término multiusuario. Esto quiere decir que nos permite tener diferentes cuentas de distintos usuari@s iniciadas en el sistema corriendo n procesos a la vez pertenecientes a cada usuario. Anteriormente, si querías hacer uso del sistema y otra persona quería utilizarlo, no podías ya que tod@s disponían de una sola sesión de usuario, sin embargo con los avances que hicieron en el pasado, sacaron adelante esta magnífica característica, la del multiusuario.

Usuari@s

L@s usuari@s son personas que tienen un determinado nivel de acceso tanto a la empresa dónde resida el equipo al que pueden acceder y operar, como en su equipo personal. A nivel lógico, esto se conoce como cuentas de usuari@, las cuáles contienen como mínimo un nombre para la cuenta siendo este el nombre de usuari@ y una contraseña. No obstante, l@s desarrolladores de sistemas operativos o de cualquier otro tipo de software intentan simplificar el tratamiento de las cuentas de usuarios mediante un ID numérico, ya que se consume menos recursos buscando números que letras.

En Linux, esos ID asignados a los usuarios se les denominan UID User Identifier o identificador de usuario. Según la distribución, el primer usuario o la primera usuaria del sistema, este establece un UID de 1000, y comienza a sumarse +1 a los posteriores UID creados. También, se añade un grupo nuevo al sistema con el mismo nombre de la cuenta del usuario o de la usuaria y se establece como un grupo primario con el mismo ID.

¿Cómo crear un(a) usuari@?

Como norma general y es altamente recomendado hacer uso de los comandos useradd(8) o adduser(8) podríamos crear un(a) usuari@ a mano, haciendo los siguientes pasos y como usuario root o haciendo uso de sudo(1):

  1. Averiguamos cual es el último UID/GID antes de crear nuestr@ usuari@
    • grep 100* /etc/group
    • grep 100* /etc/passwd
  2. Modificar la entrada del fichero /etc/passwd haciendo uso de vipw(8) añadiendo la información mínima para tener un(a) usuari@, vamos ha hacerlo con "pepito":
    • pepito:x:1004:1004::/home/pepito:/bin/bash
  3. Creamos un grupo para nuestro usuario /etc/group
    • pepito:x:1004:
  4. Creamos una entrada en /etc/shadow mediante haciendo uso de vipw -s: NOTA:Para saber que algoritmo cifrado utilizar, podemos comprobarlo en el fichero /etc/login.defs, en la variable ENCRYPT_METHOD lo que pasa que utiliza el sistema un salto o varios (lo desconocemos) para generar la contraseña a parte de la codificiación. Para visualizar el prefijo que necesitamos se puede consultar en man 3 crypt
    • $1$: MD5
    • $2a$: Blowfish
    • $5$: SHA-256
    • $6$: SHA-512

Sin embargo, es altamente recomendable generar una contraseña nueva haciendo uso del comando passwd(1), ya que esta genera la contraseña con el salto correcto, el algoritmo correcto y se genera automáticamente la entrada en /etc/shadow: passwd pepito

  1. Creamos el directorio: /home/nombre_usuari@
  2. Creamos el archivo: /var/spool/mail/nombre_usuari@
  3. Copiamos los archivos /etc/skel/* en /home/nombre_usuari@
  4. Fijamos los permisos correspondientes usuari@/grupo al directorio /home/nombre_usuari@ nombre_usuari@:grupo_usuari@ + chmod 700
  5. Declaramos los permisos chmod 660 /var/spool/mail/nombre_usuari@

Y listo, tendremos a nuestr@ usuari@ cread@. No obstante, este proceso, además de ser tedioso, complejo y propenso a errores, es preferible hacer uso de unos comandos que nos facilitan crearlo.

useradd(8)

Con este comando generamos un(a) usuari@ en ¡menos que canta un gallo! Todo lo que tenemos que hacer es:

sudo useradd pepito -m 
sudo passwd pepito

Y ya directamente tenemos usuari@ con su directorio /home y /var/spool/mail por defecto con sus correspondientes permisos, con la entrada correctamente creada en el fichero /etc/passwd, /etc/shadow y /etc/group listo para identificarse.

¿Fácil verdad? También hay que tener en cuenta, que la configuración por defecto del comando useradd(8) que se encuentra en /etc/default/useradd, ya que puede haber otras distribuciones que tengan otros parámetros, o directamente, no contenga ningún fichero y hay que especificarlo de forma manual tal que así:

sudo useradd pepito -m -k /etc/skel -U
sudo passwd pepito
  • -m: Genera un directorio en /home con el nombre de pepito
  • -k /etc/skel: Copia los archivos básicos para que funcione plenamente bash(1)
  • -U: Crea un grupo con el mismo nombre que el usuario

adduser(8)

Si no tenemos suficiente con el anterior, podemos hacer uso de adduser(8). Es un comando parecido al anterior, no hay mucha diferencia de usabilidad al menos en Linux. En FreeBSD, este comando tiene por defecto un asistente interactivo que nos va preguntando paso por paso cómo crearlo facilitándonos un poco la tarea. Este comando toma los valores para crear el usuario del fichero /etc/default/useradd como el comando anterior.

Ficheros implicados en el uso de ambos comandos

Según el man de ambos comandos, tenemos una serie de ficheros implicados cuando ejecutamos uno de los dos comandos para crear el o la usuari@.

  • /etc/passwd: Archivo clave con la información de la cuenta de usuari@
  • /etc/shadow: Información sobre la seguridad de la cuenta de usuari@
  • /etc/group: Grupos con sus correspondienes GID, usuari@s unid@s...
  • /etc/gshadow: Información relevante sobre la seguridad de los grupos
  • /etc/default/useradd: Esquema por defecto sobre cómo crear la cuenta de usuari@
  • /etc/skel/: Directorio que contiene ficheros por defecto para el/la usuari@
  • /etc/login.defs: Configuración del cifrado de las contraseñas, permisos...etc

¿Cómo autenticarse con un(a) usuari@ en nuestra sesión?

Si nos encontramos logeados mediante nuestr@ usuari@ rutinario, pero queremos acceder a otras cuentas del sistema, podemos hacerlo haciendo uso del comando su(1).

Estamos en la cuenta de pepito, y queremos pasar a la de susana.

su - susana

¿Cómo modificar la información de un(a) usuari@?

Tenemos un comando (¿Cómo no?), para modificar y actualizar la información de nuestr@ usuari@. Este comando se llama usermod(8). Entre otras cosas, nos permite bloquear una cuenta, actualizar y gestionar lá fecha de demora y fecha límite para cambiar la contraseña, añadir un usuario a grupos secundarios...

Por ejemplo, bloquear una cuenta

sudo usermod -L pepito

Si vemos el /etc/passwd, habrá añadido delante de la contraseña una (!), eso quiere decir que se encuentra bloqueada la cuenta.

Desbloqueando la cuenta:

sudo usermod -U pepito

Añadiendo un(a) usuari@ a un grupo nuevo

sudo usermod -a -G pepito video

Cambiando el grupo principal

sudo usermod -g users pepito

Modificando el shell del/la usuari@

sudo usermod -s /bin/bash pepito

Cambiando el directorio de trabajo

sudo usermod -d /srv pepito

Insertando un comentario

sudo usermod -c "Comentario" pepito

Podemos obtener más información accediendo al man(1) de usermod(8)

¿Cómo eliminar un(a) usuari@?

Como la mayor parte de las cosas en Linux o sistemas UNIX-like, se puede hacer prácticamente todo a mano, esto se puede hacer al sentido inverso cuando creamos el/la usuari@ en el sistema.

  1. Eliminar la entrada del usuario pepito de /etc/passwd haciendo uso de vipw(8)
  2. Destruir el directorio /home/pepito o el asignado, en caso de haber escogido otro directorio
  3. Eliminar el fichero del directorio /var/spool/mail/pepito
  4. Quitar el grupo que se creó junto con el/la usuari@ por defecto del fichero /etc/groups pero haciendo uso de vigr(8)

Y si queremos evitarnos tanta historia, bastará con hacer uso del comando userdel(8) Tan solo con ejecutar:

sudo userdel -r pepito

Habremos hecho todos los pasos anteriores con un sencillo comando.

¿Directorio de trabajo?

Tod@s l@s usuari@s poseen un entorno de trabajo por defecto que se encuentra en el directorio /home. Este entorno de trabajo contiene el nombre de la cuenta del/la usuari@ y le permite trabajar en él y que, por defecto, se van almacenando archivos de configuración de programas entre un largo etcétera.

¿Super usuario?

Existe un usuario por defecto creado en el sistema llamado root. Este usuario por defecto en todos los sistemas UNIX, UNIX-like como Liux, FreeBSD, Minix...etc tiene acceso a tod@s los archivos, carpetas, operaciones con dispositivos, procesos... del sistema. Es muy importante utilizarlo lo menos posible y nunca revelar su contraseña, o ejecutar aplicaciones sobre todo gráficas con este usuario.

Grupos

Por lo general, los grupos son agrupaciones de personas que tienen un objetivo en común, si bien pueden ser personas que tienen el mismo gusto por ver a su cantante favorito como obtener los mejores diseños de sus productos para una empresa. En nuestro caso, los grupos permiten formar un conjunto de usuari@s que desempeñen un rol determinado dentro del sistema. Creando, modificando documentos que ell@s hayan generado pero que otr@s que no pertenezca a dicho grupo no tengan permisos para hacerlo. Un usuario, o una usuaria puede formar parte de más de un grupo a la vez, pero por defecto, tienen un grupo primario al que pertenecen.

Los grupos como l@s usuari@s, contienen un ID que faciliten su recuperación dentro del sistema, en este caso se llama GID de Group Identifier o Identificador de grupo. El sistema por defecto tiene unos grupos ya asignados para determinadas actividades del mismo para diferentes tareas como el acceso a los dispositivos de audio y video entre otras cosas.

¿Grupos primarios?

Los grupos primarios son algo así como el grupo principal al que pertenece un/una usuari@. Cada archivo que cree o modifique deberá contener el mismo grupo o si no, no podrá hacerlo a menos que se encuentre añadido a un grupo secundario. Un grupo primario como su nombre indica, es el primer grupo al que pertenece y por ende solo podrá tener un GID asociado a la cuenta. Sin embargo, una cuenta de usuari@ puede pertenecer a muchos grupos secundarios.

¿Cómo Linux sabe qué hace una cosa y un grupo otra?

Existen una serie de ficheros clave que todo administrador debe saber que existen: * /etc/passwd: Contiene los nombres de usuario, contraseñas (en antiguas versiones que no usen shadow(5), UID, GID, descripción, directorio de trabajo y el intérprete de comandos que utilice. Cuando en el campo de la contraseña se encuentra una "x" quiere decir que hace uso del archivo /etc/shadow * /etc/shadow: Es un fichero que contiene todas las contraseñas ya sean de grupos o de usuari@s cifradas en un algoritmo determinado por el sistema, se utiliza para evitar que las contraseñas se puedan leer en /etc/passwd ya que tod@s l@s usuari@s tienen acceso lectura. Este archivo contiene: * Nombre de la cuenta de usuari@ * Contraseña encriptada, o bien puede incluir (!) que aparece como cuenta bloqueada en el sistema, un ejemplo de esto es cuando creamos una nueva cuenta sin haberle asignado una contraseña. * Fecha del último cambio de contraseña, si se encuentra vacío, es que no están habilitadas las gestiones de cuentas de l@s usuari@s. * Fecha mínima para efectuar un cambio de contraseña * Fecha máxima límite para modificar la contraseña * Periodo de aviso para cambiarla * Número de días con el usuario inactivo después de que haya expirado la contraseña * Fecha de expiración de la cuenta * Campo reservado * /etc/shadow-: Copia de seguridad del fichero anterior * /etc/group: Contiene nombre del grupo, contraseña (en caso de no usar shadow(5)), GID, lista de usuarios adjuntos

Son los archivos principales y que tod@s tenemos que tener hechos una copia de seguridad en caso de que falle el sistema o nos equivoquemos editando alguno de ellos.

NOTA: A pesar de no ser altamente recomendable su edición, si queremos editar a mano los ficheros passwd(5) o shadow(5) tenemos que utilizar los comandos vigr(1) para edición de grupos y vipw(1) para edición de los ficheros tanto passwd(5) como shadow(5).

¿Cómo crear un grupo?

Los grupos se pueden crear manualmente al igual que l@s usuari@s haciendo uso del comando vigr(8). No obstante, es preferible como siempre hacer uso de los comandos que nos faciliten las cosas más que nada para evitar incorrecciones de cualquier índole.

groupadd(8)

groupadd(8) es una bella herramienta con la que crear un grupo, edita el fichero /etc/group y a su vez actualiza el /etc/gshadow para añadir la contraseña asignada

Creando un grupo

sudo groupadd sysadmins

Creando un grupo con GID específico

sudo groupadd -g 1200 sysadmins 

Asignando contraseña a un grupo

sudo groupadd -p contraseña sysadmins

¿Cómo modificar un grupo?

Como podemos modificar l@s usuari@s, ¿Por qué no los grupos? Pues claro que sí podemos hacerlo con groupmod(8).

groupmod(8)

Este comando nos permitirá modificar cierta información de los grupos que tenemos como por ejemplo:

Cambiando el nombre del grupo

sudo groupmod -n devels sysadmins

Cambiando el GID

sudo groupmod -g 1203 devels

Modificando la contraseña

sudo groupmod -p "Contraseña" devels

¿Cómo eliminar el grupo?

También es otra operación que podemos hacer con vigr(8), pero es mejor utilizando este método.

sudo groupdel devels

¿Cómo cambiar temporalmente nuestr@ grupo primario?

Los usuarios siempre utilizamos un grupo primario que permite identificarnos con diversas partes o áreas del sistema. En caso de haber actualizado algo que requiera de una persona conectada al ordenador, se puede hacer pasar por la otra persona para saber que... Entonces existen una serie de restricciones intrínsecas como no editar un documento a la vez, si has instalado un software reciente que requiere permisos y por tanto reiniciar la sesión gráfica, se puede evitar.

Básicamente es gracias al comando newgrp(1)

newgrp finance

Y con esto, se activa nuestro grupo secundario como primario.

Visualizando los grupos en los que estoy

Se puede ver fácilmente haciendo uso del comando

groups

Comodín

Tenemos un pequeño comodín que nos permite modificar ciertas cosas de nuestr@ usuari@ o de un grupo en concreto como su contraseña. Esta herramienta se llama gpasswd(1) y la tenemos instalada por defecto.

Añadiendo un(a) usuari@ a un grupo

sudo gpasswd -a pepito users

Eliminando un(a) usuari@ de un grupo

sudo gpasswd -d pepito users

Suprimir contraseña en un grupo

sudo gpasswd -r users

Permisos

Poco sentido tiene diferenciar usuarios y grupos si no les atribuímos algún permiso especial que permita establecer una cierta jerarquía o distinción, ya que si no, estaríamos dejando un sistema horizontal en el que tod@s l@s usuari@s puedan hacer lo que quieran dentro del sistema. Aquí entra en juego el factor permisos.

Los permisos en UNIX se rigen por una serie de campos

  • Usuario: Solo el autor puede leer, escribir, ejecutar, o una combinación de los mismos, el poder en este caso sobre el fichero solo lo tiene él o ella o el usuario root.
  • Grupo: Tod@s l@s usuari@s que formen parte del grupo, dependiendo de los permisos que tenga establecido en este apartado el fichero o directorio podrán o no leer, escribir, o ejecutar en caso de ser un fichero ejecutable.
  • Todo el mundo: El resto de usuari@s del sistema que no pertenezcan ni al grupo, ni sea el autor del fichero, dependiendo de los permisos podrá o no acceder a los directorios y ficheros.

Imaginemos que tenemos el siguiente ejemplo:

Somos jefes(as) de un proyecto de desarrollo, y tenemos vari@s emplead@s a nuestro cargo. Nosotr@s como jefe(as) del proyecto, tenemos plena acción sobre todos los ficheros (somos autores). Y, seleccionamos determinados ficheros para determinados grupos, por ejemplo, todos aquellos ficheros que tengan que ver con el departamento de comunicación que tiene múltiples usuari@s, solo podrán acceder los de comunicación; el grupo de desarrolladores(as) tiene sus ficheros a cargo...etc Y cada usuari@ dentro de su grupo, tiene acceso pleno a los ficheros, sin embargo, las personas de otros grupos no pueden acceder a dichos archivos por las restricciones. Y luego, tenemos un apartado público, que solo podrá leer determinados archivos. ¡Voilá! hemos explicado el funcionamiento de usuarios y grupos de una forma sencilla.


               Jefes(as) de proyecto
                       \º/ \ª/
                          |
                  |-------------------|
                  | Contabilidad      |
                  | Directivas        |
                  | Contratos         |
                  |-------------------|
          ________________|______________
         /                               \
    Comunicación                     Desarrollo
      \º/ \ª/                          \º/ \ª/
         |                                |
  |-----------------|            |-----------------|
  | Inventario RRSS |            | Código fuente   |
  | Inversores      |            | Contraseñas OS  |
  | Media           |            | Servidores      |
  | ...             |            | ...             | 
  |-----------------|            |-----------------|
         |                                |
         |                          Todo el mundo
         |                          \º/ \ª/\º/ \ª/
         *------------------------->  \º/ \ª/\º/ 
                                        \ª/ \ª/
                                          |
                                    |-------------|
                                    | index.html  |
                                    | setup.sh    |
                                    | screenshots |
                                    | Twitter     |
                                    | Facebook    |
                                    | Google+     |
                                    |-------------|

Ahora vamos a traducir las palabras en el lenguaje que lo interpreta el sistema, tenemos hasta tres formas de conceder, modificar o leer permisos: * Formato verbal o por carácter: Se hacen uso de las letras para asignar, modificar o simplemente leer los permisos. * r: read solo lectura * w: writable solo escritura (debe ir acompañado de lectura para que pueda modificarse) * x: executable solo ejecutable (debe ir acompañado del permiso lectura para poder ejecutarse)

|        #         |  r   |  w |  x | rw   | rx   | wx   | rwx   |
|------------------|:-------------:|:-------------:|:-------------:|:----:|:----:|:----:|:-----:|
|    Usuario       | chmod u+r f1  |    u+w        | u+x           | u+rw | u+rx | u+wx | u+rwx |
|     Grupo        | chmod g+r f1  |    g+r        | g+x           | g+rw | g+rx | g+wx | g+rwx |
|   Todo el mundo  | chmod o+r f1  |    o+r        | o+x           | o+rw | o+rx | o+wx | o+rwx |
|      Tod@s       | chmod a+r f1  |    a+r        | a+x           | a+rw | a+rx | a+wx | a+rwx |
  • Formato numérico basado en Octal: Se hace uso del 1 al 7 para definir los permisos

    | # | r | w | x | rw | rx | wx | rwx | |------------------|:-------------:|:-------------:|:-------------:|:---:|:---:|:---:|:---:|:---:| | Usuario | 400 | 200 | 100 | 600 | 500 | 300 | 700 | | Grupo | 040 | 020 | 010 | 060 | 050 | 030 | 070 | | Todo el mundo | 004 | 002 | 001 | 006 | 005 | 003 | 007 | | Usuario + Grupo | 440 | 220 | 110 | 660 | 550 | 330 | 770 | | Grupo + Mundo | 044 | 022 | 011 | 066 | 055 | 033 | 077 | | Usuario + M | 404 | 202 | 101 | 606 | 505 | 303 | 707 | | Tod@s | 444 | 222 | 111 | 666 | 555 | 333 | 777 |

  • Mediante máscara: Esta es la forma menos común de declarar los permisos, pero también se utiliza. Para declarar un valor hay que hacer uso del comando umask(1p)

    Si queremos asignar el valor 022 a la máscara, este es el valor que le tendremos que restar al número actual de permisos que se encuentre en el directorio actual. Por ejemplo: * 002 = 777 - 002 = 775 (rwrwxr-x) * 444 = 644 - 444 = 200 (-w-------) * 020 = 660 - 020 = 640 (rw--r----) Para declarar el valor de una máscara se hace uso de umask(1p) tal que así: umask 020 Cuando se declara una máscara en un directorio, todos los archivos y rutas que se creen dentro de él, heredarán estos permisos. No es que se aplique directamente al archivo/directorio.

¿Cómo ver los permisos?

Para visualizar los permisos tenemos el magnífico comando ls(1) como hemos visto en el post de Mastering en Bash ~ Primeros pasos.

ls -al

Este comando muestra todos los archivos y directorios que se encuentren en el directorio actual además de los ocultos. En suma, muestra los enlaces tanto duros como simbólicos. En la siguiente salida, si nos fijamos en la primera columna de la izquierda veremos los permisos y el tipo de archivo.

lrwxrwxrwx.  1 sincorchetes sincorchetes    37 May 19 21:51  .steampath -> /home/sincorchetes/.steam/sdk32/steam
lrwxrwxrwx.  1 sincorchetes sincorchetes    35 May 19 21:51  .steampid -> /home/sincorchetes/.steam/steam.pid
drwxrwxr-x.  3 sincorchetes sincorchetes  4096 Mar  7 14:17  .subversion
-rw-rw-r--.  1 sincorchetes sincorchetes     8 Mar 28 22:29  .tasks
drwxrwxr-x.  2 sincorchetes sincorchetes  4096 Jan 20 04:25  .themes
drwx------.  3 sincorchetes sincorchetes  4096 Feb 12 01:10  .thumbnails
drwx------.  3 sincorchetes sincorchetes  4096 Jan 20 11:05  .thunderbird
drwxrwxr-x.  3 sincorchetes sincorchetes  4096 May 27 19:56  .tmux
-rw-rw-r--.  1 sincorchetes sincorchetes   370 May 27 19:57  .tmux.conf
drwxrwxr-x.  7 sincorchetes sincorchetes  4096 Jun  2 12:38  .vagrant.d
drwxr-xr-x.  2 sincorchetes sincorchetes  4096 Jun  4 17:08  Videos

Los archivos que contienen una "l" en los permisos denotan que son enlaces simbólicos y se puede además saber porque apuntan a otro directorio/fichero "->".

Aquellos que contienen una "d", denotan que son directorios y los que no contienen nada más que un "-" se interpretan como archivos.

Modificando la autoría de archivos/directorios

Como podemos ver, se pueden asignar múltiples permisos a los archiv@s, ahora bien, ¿Qué pasa si queremos cambiar el autor del fichero, el grupo o ambos?

Podemos hacerlo gracias al comando chown(1): * chown usuario fichero/directorio: Cambiando el autor del fichero y/o directorio * chown usuario:grupo: Cambiando el autor y el grupo al fichero y/o directorio

Se puede asignar un autor a un fichero y tener un grupo diferente, el autor podrá modificarlo, leerlo o ejecutarlo en cualquier momento, es indiferente.

Sticky Bit

¿Qué pasa si tenemos much@s usuari@s dentro de un grupo cuyo grupo tiene asignado un directorio de trabajo y el usuario "Pepe" crea un fichero y la usuaria "Susana" intenta eliminarlo? Que podrá hacerlo siempre y cuando, se aplique una restricción llamada "Sticky Bit" del inglés, "bit pegajoso". Este permiso especial, permite restringir los archivos creados y modificados por l@s miembr@s de un grupo y evitar que se genere un "autosabotaje" o un borrado por error.

Para habilitarlo bastará con efectuar:

chmod 1000 archivo/directorio

ó

chmod u+t archivo/directorio

Aplicar permisos recursivos en los ficheros y subdirectorios de un directorio

chmod 1000 -R directorio

Cuando ejecutemos un ls(1), veremos que en los permisos se habrá añadido un "t" al final tanto para directorios como para ficheros, esto nos indica la activación del Sticky Bit, también aparecerá modo de ejecución permitido. Si aparece una "T" en vez de una "t", esto quiere decir, que se ha activado el Sticky Bit pero solo para el usuario actual, si vemos el resultado, no contienen permisos de ejecución y por lo tanto no se permitirá crear archivos/directorios.

Salida con Sticky Bit activado:

ls -al
total 8
drwxrwxrwt. 2 root root  4096 Jun 11 07:41 .
drwxrwxrwt. 3 root users 4096 Jun 11 07:41 ..

Salida con Sticky Bit activado para el usuari@ actual:

ls -al
total 8
drwxrwxrwx. 2 root         users        4096 Jun 11 07:38 .
drwxrwxrwx. 3 sincorchetes sincorchetes 4096 Jun 11 07:37 ..
-rwxrw-rwT. 1 sincorchetes sincorchetes    0 Jun 11 07:38 12

Aquí os podemos mostrar con más claridad el funcionamiento:

SUID y SGUID

En Linux existen una serie de condiciones especiales para determinados ejecutables, archivos... que pueden editarse o ejecutarse sin ser el propietario de los mismos. Esta característica nos otorga una cierta ventaja como por ejemplo, si queremos cambiar la contraseña de nuestr@ usuari@ podemos hacerlo sin ser usuario "root".

Si nos fijamos en los permisos del comando passwd, veremos que tiene la letra "s" dentro de la ristra de permisos.

ls -al /usr/bin
-rwsr-xr-x. 1 root root         29008 Apr 12 11:24 passwd

Digamos que el/la usuari@ se hace pasar por "root" para intentar cambiar su contraseña y lo puede hacer gracias a estos permisos. Estos se llaman SUID Set User ID Bit o SGID Set Group ID Bit. Podemos verificar si un archivo o directorio lo tiene activado porque en los permisos del usuario tiene una "s" o en los permisos del grupo contiene "s". Solo el propietario del fichero/directorio puede declarar estos permisos "extendidos".

NOTA: En caso de contener una "S", esto quiere decir, que tanto el autor del archivo/directorio como el grupo y el resto del mundo no podrá editar, modificar y/o ejecutar archivos dentro del directorio. De hecho, veremos como se encuentra reducida la salida de permisos.

Referencias

Viendo el tiempo en tu terminal

¿Te gustaría ver el tiempo en tu terminal? No te gustan los plugins de los entornos de escritorio o usas un gestor de ventanas tipo i3wm que no tiene ningún icono en la bandeja de notificación de i3status.

Bueno pues no pasa nada, puedes ver el tiempo que hará en tu ciudad con tan solo ejecutar un curl al dominio wttr.in y por GeoIP te dará la climatología de tu lugar.

¿Qué puedes hacer?

  • Información de vuelta traducida a un idioma en concreto
  • Definir los días que queramos que nos devuelva (0 si es solo el día de hoy)
  • Definir la métrica, sistema internacional de unidades o sistema anglosajon
  • Calendario lunar
  • Buscar una ubicación
  • Convertir el resultado en un .png
  • Añadir transparencia a la imagen
  • Añadir un marco a la imagen que has generado

Visualizando en un sitio específico

curl wttr.in/Palma?1q

Devolverá algo tal que así:

Palma, Spain

    \  /       Partly cloudy
  _ /"".-.     6-7 °C         
    \_(   ).   ↘ 6 km/h       
    /(___(__)  10 km          
               0.2 mm         

En mi caso como es Palma, porque vivo en ella. ¿Qué pasa si quiero otra ciudad?

Pues puedes apoyarte de la ayuda:

[sincorchetes@keys0 ~]$ curl wttr.in/:help
Usage:

    $ curl wttr.in          # current location
    $ curl wttr.in/muc      # weather in the Munich airport

Supported location types:

    /paris                  # city name
    /~Eiffel+tower          # any location
    /Москва                 # Unicode name of any location in any language
    /muc                    # airport code (3 letters)
    /@stackoverflow.com     # domain name
    /94107                  # area codes
    /-78.46,106.79          # GPS coordinates

Special locations:

    /moon                   # Moon phase (add ,+US or ,+France for these cities)
    /moon@2016-10-25        # Moon phase for the date (@2016-10-25)

Units:

    m                       # metric (SI) (used by default everywhere except US)
    u                       # USCS (used by default in US)
    M                       # show wind speed in m/s

View options:

    0                       # only current weather
    1                       # current weather + 1 day
    2                       # current weather + 2 days
    F                       # do not show the "Follow" line
    n                       # narrow version (only day and night)
    q                       # quiet version (no "Weather report" text)
    Q                       # superquiet version (no "Weather report", no city name)
    T                       # switch terminal sequences off (no colors)

PNG options:

    /paris.png              # generate a PNG file
    p                       # add frame around the output
    t                       # transparency 150
    transparency=...        # transparency from 0 to 255 (255 = not transparent)

Options can be combined:

    /Paris?0pq
    /Paris?0pq&lang=fr
    /Paris_0pq.png          # in PNG the file mode are specified after _
    /Rome_0pq_lang=it.png   # long options are separated with underscore

Localization:

    $ curl fr.wttr.in/Paris
    $ curl wttr.in/paris?lang=fr
    $ curl -H "Accept-Language: fr" wttr.in/paris

Supported languages:

    da de fr fa id it nb nl pl ru (supported)
    az be bg bs ca cy cs el eo es et fi hi hr hu hy is ja jv ka kk ko ky lt lv mk ml nl nn pt ro sk sl sr sr-lat sv sw th tr te uk uz vi zh zu he (in progress)

Special URLs:

    /:help                  # show this page
    /:bash.function         # show recommended bash function wttr()
    /:translation           # show the information about the translators

Mostrando la fase lunar

[sincorchetes@keys0 ~]$ curl wttr.in/moon
                  ------------.  
              --'  o     . .   `--.  
            '   .    O   .       . `-.   
          @   @@@@@@@   .  @@@@@      `-.  
         @  @@@@@@@@@@@   @@@@@@@   .    \   
          o @@@@@@@@@@@   @@@@@@@       . \.   
        o   @@@@@@@@@@@.   @@@@@@@   O      \  
      @   .   @@@@@@@o    @@@@@@@@@@     @@@ \   
     @@@               . @@@@@@@@@@@@@ o @@@@|   
     @@  O  `.-./  .      @@@@@@@@@@@@    @@  \  First Quarter +
     @@    --`-'       o     @@@@@@@@ @@@@    |  4 14:22:41
     @@        `    o      .  @@   . @@@@@@@  |  Full Moon -
         @@  @         .-.     @@@   @@@@@@@  |  2  8:08:13
      @        @@@     `-'   . @@@@   @@@@  o /  
         @@   @@@@@ .           @@   .       |   
        @@@@  @\@@    /  .  O    .     o   . /   
         @@     \ \  /         .    .       /  
           .    .\.-.___   .      .   .-. /'   
                  `-'                `-' /   
             o   / |     o    O   .   .-'  
            .   /     .       .    .-'   
              --.       .      .--'  
                  ------------'  


Follow @igor_chubin for wttr.in updates

Referencias

Vivaldi un navegador Web impresionante

Vivaldi es un navegador gratuito desarrollado por la empresa Vivaldi Technologies, cuya compañía fue fundada por el cofundador y ex-CEO de Opera Jon Stephenson von Tetzchner, y Tatsuki Tomita quiénes quedaron bastante descontentos por varias decisiones que tomó la empresa Opera Software hace bastante tiempo como el cierre del portal comunitario My Opera y dejando atrás las opiniones de las personas que ayudaban a su desarrollo y mejora. categories: ["Administración de sistemas", "Desarrollo Web"]


Vivaldi es un navegador gratuito desarrollado por la empresa Vivaldi Technologies, cuya compañía fue fundada por el cofundador y ex-CEO de Opera Jon Stephenson von Tetzchner, y Tatsuki Tomita quiénes quedaron bastante descontentos por varias decisiones que tomó la empresa Opera Software hace bastante tiempo como el cierre del portal comunitario My Opera y dejando atrás las opiniones de las personas que ayudaban a su desarrollo y mejora.

¿Qué nos aporta Vivaldi?

Vivaldi es muy poco conocido pero que daría mucho del qué hablar. Tiene una apariencia parecida a Opera y contiene multitud de características y ventajas por doquier.

[owl-carousel items=1 margin=1 loop=true autoplay=true autoplayHoverPause=true nav=true] [/owl-carousel]

Disponible para varios sistemas operativos

Actualmente dispone de paquete estables x86/x86_64 tanto para sistemas que usen paquetería .deb como .rpm. También hay un paquete considerado inestable enfocado a ARM 32 y solo disponible en formato .deb. Por otro lado soporta Windows y Mac.

Memoria RAM

Vivaldi es capaz de consumir una cuarta parte de lo que consumiría Google Chrome o Firefox a pesar de tener multitud de pestañas abiertas, con lo que podemos navegar de una forma fluida y trabajar con nuestro equipo sin tener que estar prescindiendo de determinados programas, páginas con contenido interactivo...etc

Soporte extensiones de Chrome

Si no puedes vivir sin las extensiones de Google Chrome con Vivaldi podrás tenerlas sin ningún problema y sin tener que instalar complementos o extensiones adicionales. Con tan solo acceder a la página Chrome Store podrás instalar cualquier extensión sin problemas.

Utiliza Blink para interpretar todos los elementos del diseño y el contenido Web a una velocidad de vértigo. Por defecto es el motor de renderizado que utiliza Google Chrome y Opera Software.

Sencillo y potente

Se pueden utilizar gestos para abrir páginas Web, pestañas, cerrarlas y configurar tus propios gestos para que se apliquen determinadas configuraciones, con lo que más de alguna ocasión agradecerás poder cerrar una simple ventana haciendo un dibujo con el ratón, o con el dedo en caso de ser pantalla táctil.

Soporte de captura de pantalla

El navegador incluye un botón con el que capturas la página y te permite seleccionar un determinado área, o la página completa y guardarla en formato .png, .jpg o copiarla directamente al portapapeles. Esto nos evita tener que utilizar herramientas externas cada vez que queramos compartir alguna información interesante o dibujos que no puedan escribirse.

Permite cargar o no animaciones, imágenes...

Con esto nos olvidamos de consumir tanto ancho de banda y espacio en disco ya que al desactivarlo no se ejecutan. Es muy interesante ya que también reduce el costo de CPU y de memoria al no reproducirse.

Acciones de página

Dispone de una lista enorme de efectos que se pueden aplicar a la página como filtros para alterar los colores como blanco y negro, escala de grises, inversión del color, intensificar... También tiene otras características como depurador de CSS, suprimir o forzar efectos de transiciones, utilizar tipografía "Monospace"...

Editor de apariencia

Vivaldi incluye un editor mínimo de colores de la apariencia del navegador, además de poder incorporar un fondo determinado. Pero eso no es todo, ¡también puede editarse a nivel de CSS y personalizarle a tu antojo!

Gestor de notas

Incorpora un pequeño editor de notas para tomar apuntes de cualquier tipo, capturas, archivos adjuntos, e incluso posee un visor de Markdown, que además es de fácil acceso ya que se abre en el panel lateral izquierdo y permite tomar las notas de una forma fácil y rápida.

Speed Dial múltiple

Un pequeño mural que permite ver las últimas páginas visitadas o también existe la posibilidad de añadir páginas como las que tenemos en favoritos. No obstante, se pueden tener varios "Speed dial" para determinadas páginas y ponerles un nombre. Nos evita tener que ir buscando en la típica barra de marcadores página por página.

Barra de pestañas

Se pueden desplazar las barras de pestañas a cualquier lateral del navegador, arriba, abajo, izquierda, derecha. Así podemos aumentar nuestra productividad.

Gestor de tareas

¡Incluye un gestor de tareas! Con el puedes ver cuánto está consumiendo cada página en relación CPU y M.RAM y cerrarlas cuando ¡quieras! Nos olvidamos de aquellas páginas o aplicaciones Web que no paran de consumir y que muchas veces, o al menos en Chrome, se quedan colgadas sin respuesta teniendo que reiniciar la conexión.

Gestor de sesiones

Si estás navegando, y quieres dedicarte a mirar otras Webs pero sin tener que perder las páginas que visitas, entonces, puedes almacenar la sesión y volver abrirla cuando te plazca.

Gestión de historial

No solo podrás ver las páginas que has visitado ordenadas por día, mes y/o año sino que también el ancho de banda que consumiste representado en una gráfica.

Configuración de comandos

También se pueden buscar páginas web o abrir páginas de marcadores utilizando la tecla F2. Este botón accionará una ventana en el centro de la pantalla del navegador esperando a que le introduzcas lo que quieres buscar.

Gestión de opciones via Web

Se pueden modificar las opciones mediante via URL y también visualizar registros, llevar a cabo pruebas y depuraciones con según que cosas: * vivaldi://settings -> Gestiona la configuración del navegador * vivaldi://bookmarks -> Gestión de marcadores * vivaldi://downloads -> Descargas vivaldi://accessibility -> Opciones de accesibilidad * vivaldi://net-internals -> Opción muy interesante que engloba todo lo que tiene que ver con la red * vivaldi://media-internals -> Reproductores de audio y video * vivaldi://cache -> Lista toda la caché almacenada (URL) * vivaldi://components -> Componentes adicionales * vivaldi://appcache-internals -> Caché de aplicaciones Web utilizadas * vivaldi://indexeddb-internals -> Apps, extensiones... que hacen uso de IndexedDB
* vivaldi://omnibox -> Permite buscar en el historial parámetros que hayan sido utilizados por las URLs tipo name,user... * vivaldi://user-actions -> Depura las acciones del usuario nada más empezar, cambiar de pestaña, abirir ventanas...etc * vivaldi://password-manager-internals -> En teoría son logs de contraseñas almacenadas * vivaldi://quota-internals -> Datos utilizados * vivaldi://webrtc-internals -> Depuración de uso del protocolo WebRTC * vivaldi://terms -> Licencia * vivaldi://sandbox -> Estado de caja de arena (aislar un contenido Web) * vivaldi://device-log -> Registro de eventos con dispositivos ¡USB, Bluetooth...! * vivaldi://flags -> Opciones experimentales o en fase beta * vivaldi://about -> Información acerca del navegador * vivaldi://blob-internals -> Información sobre blobs

Comunidad

Vivaldi tiene una comunidad viva y grandísima con muchos posts publicados cada día, el inglés es el idioma por defecto, pero hay subforos con otros idiomas como el nuestro.

Cuenta de correo electrónico gratuito

Si te haces usuari@ de Vivaldi, automáticamente posees un correo electrónico gratuito sin publicidad. Utilizan la plataforma RoundCube para webmail sin ningún tipo de publicidad añadida.

Soporte idiomático

Vivaldi actualmente soportada un total de hasta 40 idiomas como el Ruso, Español, Inglés, Persa, Francés, Chino...

Descargar

Los siguientes enlaces nos permitirán descargar Vivaldi para nuestro sistema y arquitectura de CPU.

Linux

64 bits * Vivaldi 1.15 - .DEB * Vivaldi 1.15 - .RPM

32 bits * Vivaldi 1.15 - .DEB * Vivaldi 1.15 - .RPM

ARM 32 bits * Vivaldi 1.15 - .DEB

Windows

Versión 7+ 32 bits * Vivaldi 1.15 - .EXE

Versión 7+ 64 bits * Vivaldi 1.15 - .EXE ¡Yo ya he optado por Vivaldi! ¿Y tú?

Versión Vista/XP (no está más soportado) 32 bits * Vivaldi 1.0 - .EXE

Mac OS X

Versión para sistemas superiores 10.9+ * Vivaldi 1.15 - .DMG

¡Yo ya he optado por Vivaldi! ¿Y tú?

¡Ya está con nosotros Fedora 32!

Me enorgullece compartirles que el equipo del proyecto Fedora, el cuál elabora una magnífica distribución de Linux la cuál llevo casi 10 años utilizando nos trae una nueva versión, la versión número 32 que fue liberada ayer por la noche con una gran cantidad de cambios, vamos a comentar algunos de ellos.

Imagen obtenida de Fedora Project

Procesos importantes en el comportamiento del sistema:

Habilitar EarlyOOM

EarlyOOM es un subproceso que se ejecuta en segundo plano que verifica de forma periódica cuánta memoria RAM y swap se está consumiendo en el sistema para tomar una decisión cuando este esté llegando a colapsarse. Por ejemplo, si tenemos el sistema que se encuentra más del 90% de RAM y swap ocupados, este subproceso buscará aquel que tenga una puntuación muy alta según un sistema de puntuación que tiene incorporado llamado oom_score y enviando un mensaje a estos procesos para que finalicen lo antes posible de una forma segura SIGTERM. Si el consumo llega a superar el 95%, entonces, revisando su tabla de puntuación, y enviará un mensaje para que esos procesos finalicen de forma inesperada o como se le conoce como kill, SIGKILL.

De esta forma, podemos recuperar el control del sistema sin que nos veamos forzados ha hacer un apagado forzado del mismo.

Reiniciar servicios cuando se terminan las transacciones de RPM

Los scriptlets, que son conjuntos de scripts que se ejecutan después de la instalación o desinstalación de paquetes .rpm y permiten ejecutar código específico. Entonces, cuando los paquetes se actualicen y tengan servicios específicos, estos se reiniciarán sin tener que esperar un reinicio del sistema.

Se habilita fstrimr.timer por defecto

Un *.timer permite ejecutar un servicio en un determinado tiempo, es como el sustituto de cron. Con este .timer, que vendrá activado por defecto. Permite ejecutar el servicio fstrim.service cada semana para informar a las unidades de almacenamiento tanto físicos como virtuales de los bloques sin utilizar permitiendo obtener un mejor rendimiento. Recordemos que un SSD, NVMe, tarjetas SD...

Firewalld ya utiliza por defecto nftables

Aunque Fedora ya lo ha utilizado como backend en estas dos últimas versiones menores, y RHEL 8 lo tiene por defecto, ya lo establecen de forma oficial. ¿Qué ganamos con esto? Pues podemos definir reglas que funcionen tanto para IPv4 como para IPv6 ahorrando multitud de líneas porque no tendremos que usar iptables o ip6tables. En suma, se pueden usar espacio de nombres y entonces, un usuario puede crear por separado su propio conjunto de reglas independiente sin que Firewalld se entrometa en el camino del usuario. Y por último, y el más importante, es que Netfilter está centrándose en nftables y no en iptables.

Compiladores

Fedora vendrá con GCC 10 instalado y todos los paquetes se han recompilado utilizando esta versión de GCC permitiendo un entorno con librerías compiladas más actualizadas como es el caso de GNU C que viene con la versión 2.31. También se actualizó la versión de LLVM a la versión 10. (parece que ambos compiladores estén compitiendo entre sí).

Se eliminan componentes de librerías el paquete clang-libs

Librerías como libclangBasic.so, libclangAST.so... ya que los pequetes que dependan de librerias de clang deberían enlazarse con libclang-cpp.so. Esto mejora la estabilidad en Fedora porque el empaquetado se construye con una configuración que está soportada directamente por el proyecto clang y encima, nos olvidamos de tener que vincular hasta 37 bibliotecas compartidas diferentes reemplazándolas solo por 1 ayudando a mejorar los tiempos de inicio de la aplicación.

Se actualiza el compilador de Pascal

El compilador libre de Pascal se actualiza a la versión 3.2.0 y permitiendo que otras arquitecturas como AArch64 y ppc64le puedan utilizar paquetes utilizando el compilador.

Binutils

Se actualiza de la versión 2.32 a la versión 2.33

Lenguajes de programación

Python

Se ha retirado el soporte de Python 2 como era de esperar, Python 2 dejó de tener soporte el día 31 de diciembre de 2019 y es una buena idea quitarlo ya del sistema para evitar problemas de seguridad o afectación del rendimiento. Se actualiza de Python 3.7 a 3.8.

Ruby 2.7

Se ha actualizado de la rama 2.6 a la rama 2.7

Soporte idiomático

Weblate

Las traducciones que antes se hacían en Zanata, ahora se hacen en Weblate que se puede acceder desde aquí. Más que nada porque se reduce bastante el riesgo de no tener otra plataforma de traducción si Zanata se va al traste. Además, de que se centralizan las traducciones y se facilita que se interactúe con los proyectos (upstream). Si tengo un campo en GIMP que no está traducido, lo traducimos a través de Weblate y este se lo comunicará al proyecto GIMP para que lo subsane en su posterior versión. También permite generar de forma automática aquellas cadenas (palabras, textos...) que se han añadido nuevas a los programas facilitando aún más su traducción entre otras cosas.

Si te interesa ver más cambios aprobados, puedes acceder a sus Notas de liberación.

¡A qué esperas para probarla! Tienes muchas posibilidades, puedes elegir la versión que más te guste o se adapte a tus necesidades: * Workstation , la versión por defecto que contiene GNOME como entorno de escritorio lista para trabajar. * Silverblue , una versión de Fedora que contiene el entorno de escritorio de GNOME pero que te permite tener un entorno inmutable con aplicaciones aisladas. * CoreOS , un sabor digno de contenedores, un sistema mínimo que ejecuta y se centra en contenedores. * Server, puedes ejecutar aplicaciones en hardware dedicado o en la nube con la última tecnología de código abierto. * IoT, diseñada para ejecutarse en entornos ARM como Raspberry Pi entre otras placas de este tipo de procesadores. * Plasma, Fedora que utiliza el entorno de escritorio Plasma (antes KDE). * XFCE , si te gusta optimizar el rendimiento y no tener un entorno muy sobrecargado, puedes optar la versión que contiene XFCE por defecto. * LXQT , un entorno de escritorio que combina el estilismo de Plasma al utilizar sus librerías gráficas Qt y programas que consumen poco. * MATE-Compiz Provee un entorno de escritorio que derivó de la anterior versión de GNOME, la 2.32.1. Actualmente tiene muy buena acogida entre los usuarios y combina la potencia con buenos efectos de escritorio. * Cinnamon , un escritorio moderno pero con la experiencia tradicional de Gnome. * Sugar , si tienes niños, ¡no es excusa!, también puedes enseñarle a usar Fedora con este entorno preparado para ellos. * Astronomy , esta edición contiene programas relacionados con la astronomía. * Lab de seguridad, te ofrece un entorno de prueba seguro para trabajar en auditorías de seguridad, forenses, rescate de sistemas... * Suite de diseño un sistema que contiene todos los programas necesarios para la edición gráfica. * Juegos , esta versión provee de multitud de juegos libres y de código abierto.