Saltar a contenido

Publicaciones

Trabajando con Alcatel OS6850

Bienvenidos a este nuevo post en el que hablaremos sobre como trabajar con switches OS6850 de Alcatel. Esta empresa lleva más de 13 años en el mercado de las telecomunicaciones y de otros dispositivos como cámaras IP, tablets, smartphones.

Versiones

Podemos encontrar una serie de diferencias entre modelos como se puede apreciar en las siguientes tablas:

24 puertos

Todos los modelos de 24 puertos de la serie 6850

Modelo Ptos Eth Transmisión/Puerto PoE PoE+ SFP SFP+ XFP
6850-24 24 Gigabit Ethernet 4
6850-24L 24 Fast Ethernet 4
6850-P24 24 Gigabit Ethernet 4
6850-P24L 20 Fast Ethernet 4
6850-24X 24 Gigabit Ethernet 4 2
6850-P24X 24 Gigabit Ethernet 4 2 2
6850E-P24X 20 Gigabit Ethernet + 4 2
6850E-24 20 Gigabit Ethernet 4
6850E-P24 20 Gigabit Ethernet + 4
6850E-24X 20 Gigabit Ethernet 4 2
6850-U24X 2 Gigabit Ethernet 22 2

48 puertos

Todos los modelos de 48 puertos de la serie 6850

Modelo Ptos Eth Transmisión/Puerto PoE PoE+ SFP SFP+ XFP
6850-48 48 Gigabit Ethernet 4
6850-48L 48 Gigabit Ethernet 4
6850-P48 44 Gigabit Ethernet 4
6850-P48L 44 Fast Ethernet 4
6850-48X 48 Gigabit Ethernet 2
6850-P48X 48 Gigabit Ethernet 2
6850E-P48X 46 Gigabit Ethernet + 2 2
6850E-48 44 Gigabit Ethernet 4
6850E-P48 48 Gigabit Ethernet 4
6850E-48X 46 Gigabit Ethernet 2 2
6850-U48X 2 Gigabit Ethernet 22 2

Conexión console

Si no tenemos ni idea de como conectarnos al switch, recomendamos leer el artículo anteriordónde explicamos como acceder a dispositivos internetwork mediante puerto console.

Conceptos básicos

Nosotros vamos a trabajar con el modelo 6850-P48L, pero por norma general se trabaja igual para este modelo de switch. Este modelo en concreto hace uso de un CPU MPC8247 a 400MHz, cuenta con una memoria Flash 8MB dónde se almacenará la imagen IOS (Internetwork Operative System) no confundir con iOS el OS de Iphone/Ipad así como los ficheros de configuración y por último contiene una memoria de acceso aleatorio DRAM de 256 MB que se utilizará para cagar la imagen del sistema, la configuración y mantener las tablas MAC, ARP, estadísticas...etc.

¿Cómo trabaja Alcatel?

Alcatel como cualquier otro dispositivo internetwork posee una etapa llamada POST (Power On Self Test) que comprueba el hardware antes de arrancar, en caso de que fallase el proceso, se interrumpe el arranque. Una vez que finaliza dicho proceso empieza a cargar la imagen del IOS de la memoria flash para copiarla a la DRAM. Una vez que comience el arranque, este cargará un fichero de configuración que contenga todas las normas, políticas de red, tecnologías...etc.

¿Dónde carga estos ficheros de configuración y la IOS?

Alcatel posee una estructura de directorios dentro de su memoria Flash como esta:

/flash
    |-- working
            |------ boot.cfg ---> Parámetros de configuración del switch
            |------ Kbase.img --> Imagen base del software
            |------ Ksecu.img --> Seguridad opcional añadida
            |------ K2os.img --> Imagen del IOS (6850)
            |------ Kadvrout.img --> Enrutamiento avanzado
            |------ Kencrypt.img --> Encriptado
            |------ Keni.img --> Imágenes Ethernet
    |-- certified
            |------ boot.cfg
            |------ Kbase.img
            |------ Ksecu.img
            |------ K2os.img
            |------ Kadvrout.img
            |------ Kencrypt.img
            |------ Keni.img
    |-- network
            |--------- userTable5 --> Usuarios y contraseñas del IOS I
            |--------- userTable4 --> Usuarios y contraseñas del IOS II
            |--------- lockoutSetting
            |--------- policy.cfg
            |--------- ssh_host_dsa_key
            |--------- ssh_host_dsa_key.pub
    |-- diag
        |---- K2diag.img --> Diagnóstico
    |-- boot.params --> Configura el EMP (Ethernet Management Port) del switch
    |-- cs_system.pmd
    |-- boot.slot.cfg --> Enumera los switch en un stack
    |-- swlog1.log
    |-- swlog2.log

Los directorios más importantes y que tienen mucha relevancia aquí son working y certified. El directorio working posee todos los archivos incluyendo la imagen del sistema que se utilizarán para un entorno de desarrollo o experimental, mientras que el contenido de certified contiene todos los archivos (IOS, boot.cfg...) para un entorno en producción.

Entonces, ¿Qué carga el switch?

El switch siempre va a tirar de certified antes que de working. Sin embargo, en caso de fallar, se puede utilizar working para tratar de obtener el mejor estado anterior posible. Es importante mencionar, que cuando se está trabajando en modo certified no se puede añadir o eliminar cambios, hay que arrancar desde working, hacer los cambios, y luego reiniciar el switch. Más adelante explicaremos cómo hacerlo.

Configuración básica

Vamos a ver cómo hacer algunas configuraciones básicas con AOS6850 como modificar el prompt, la fecha y hora, una interfaz.

Guardando la configuración

Una de las cosas que tenemos que tener claras es guardar la configuración. El switch genera en la RAM un fichero de configuración que tendrá que guardarse si queremos almacenar los cambios que habremos hecho.

copy running-config working

o se puede utilizar también:

write memory

Modificando el prompt

Para modificar el prompt, basta con ejecutar:

session prompt default "TEXTO_A_PONER"

Cambiando el nombre del switch

Si queremos identificarlo mejor, podemos asignarle un nombre al switch:

system name XXXX

Añadiendo una localización

En caso de tener muchos switches repartidos en diferentes puntos o áreas, es recomendable añadir una descripción que facilite saber dónde encontrarlo:

system location LUGAR

Modificar el usuario de contacto

Por defecto en Alcatel, si hacemos un: show system Veremos que en la línea de contacto nos aparece:

Alcatel-Lucent OS6850-P48L 6.0.0.000.R00 Service Release, September 01, 2018.

Se puede modificar utilizando:

system contacto NOMBRE_CONTACTO

Configurando la fecha y hora

Para configurar la fecha, utilizamos la siguiente sintaxis: * mm: Mes * dd: Día * yyyy: Año

system date mm/dd/yyyy

Para establecer el huso horario: XXX: * PST: Pacific Standard Time: Se utiliza en la zona oeste de Canadá, USA y México. Equivale a -8 en UTC, cuando se aplica DST sobre PST equivale a -7 en UTC. * DST: Daylight Saving Time: Utilizado para aplicar el cambio de verano <> invierno de forma automática. * UTC: Coordinated Universal Time: Estándar utilizado para definir los husos horarios. No aplica DST.

Nosotros por regla general, utilizaremos UTC.

system timezone XXX

Se puede especificar horas y minutos en UTC de la siguiente maneras:

system timezone +05:45

Equivale a UTC 05:45

system timezone -05:45

Equivale a UTC -05:45.

Ajustando la hora

Mostrar la hora actual:

system time

Ajustar la hora

system time hh:mm:ss
  • hh: Horas
  • mm: Minutos
  • ss: Segundos

Gestionando usuarios

Alcatel contiene una serie de características avanzadas como los perfiles de usuario, perfil por defecto... nosotros nos vamos a centrar solamente en crear un usuario administrador.

user USUARIO password CONTRASEÑA

Para eliminar un usuario:

no user USUARIO

Para que el usuario actual cambie su contraseña:

password

Interfaces de red

En este apartado aprenderemos como configurar una interfaz

Levantando una interfaz

Para habilitar un puerto del switch, basta con:

interfaces x/y admin up
Forzando la capacidad de transmisión

Actualmente tenemos dos velocidades de transmisión: * Full-duplex [FULL]: Todos los paquetes se envían/reciben de forma simultánea * Half-duplex [HALF]: La información se turna para enviarse y/o recibirse * Auto [AUTO]: El modo automático que establece que utilizar.

interfaces x/n duplex [XXX]
Forzando la velocidad de transmisión

Se puede modificar las velocidades de transmisión de un puerto:

interfaces x/n speed [10/100/1000]
Ver todas las interfaces con sus estadísticas

Para ver las interfaces que tenemos en el switch, bastará con realizar:

show interfaces

Este mostrará todo el estado de los switch, incluyendo estadísticas, bytes emitidos/omitidos, errores CRC (físicos)....

Obtener información de los SFP

Los SFP (Small Form-Factor Pluggable) también llamados SFP, permiten extender funcionalidades en caliente de un switch de forma limitada (algunos switches como este solo tienen 4 puertos SFP disponibles). Por ejemplo, en el switch que estamos utilizando OS6850-P48L, tenemos 4 puertos SFP para añadir Fibra o Cobre 10/100/1000 (Gigabit Ethernet), ya que los puertos RJ45 de este switch solo funcionan en modo Fast Ethernet 10/100

show ni

Obtendremos una salida como esta:

----RECORTADO----
 GBIC  1
        Manufacturer Name:             FINISAR CORP.   ,
        Part Number:                   FCLF8521P2BXX   ,
        Hardware Revision:             A   ,
        Serial Number:                 XXXXXX         ,
        Manufacture Date:              151219  ,
        Laser Wave Length:             n/a,
        Admin Status:                  POWER ON,
        Operational Status:            UP

Mostrar todas las interfaces con sus alias

En vez de visualizar todos los puertos con todos los datos, podemos filtrarlos por alias, número de puerto...

show interfaces port

Ver información del sistema

El siguiente comando nos permite saber el modelo de switch, versión de firmware, fecha y hora actual del dispositivo, días en activo....

show system

Visualizar AC disponibles

Gracias a este comando se puede averiguar qué fuentes de alimentación pueden estar fallando, los watts que utiliza...

show power

Reiniciar el switch

Podemos reiniciar el switch haciendo uso del comando reload, el cuál nos permite más cosas como arrancar en modo working entre otras cosas.

reload

Por ejemplo, reiniciar en modo working

reload working no rollback-timeout

Visualizar logs del sistema

Para ver los registros del sistema, basta con ejecutar:

show log swlog

NOTA: Lo que no es muy recomendable ya que nos imprimirá todos los acontecimiento y/o sucesos que hayan pasado mientras ha estado funcionando el switch, por ende, se utiliza mejor:

show log swlog timestamp mm/dd/yyyy hh:mm

Troubleshooting

No recuerdo usuario/contraseña

Tenemos que estar conectados via console al switch, tener abierto un emulador de terminal tipo screen(1) y tener la conexión abierta. Si es así, reiniciamos el switch y pulsamos rápidamente la tecla [Enter]. Nos saltará una salida como esta:

U-Boot (6.4.3.479.R01) (for OS6400, OS6850, and OS6855 platforms) (Mar 19 2010 - 17:59:35)

MPC8247 Reset Status: External Soft, External Hard

MPC8247 Clock Configuration
 - Bus-to-Core Mult 4x, VCO Div 2, 60x Bus Freq  25-75 , Core Freq 100-300
 - dfbrg 0, corecnf 0x1a, busdf 3, cpmdf 1, plldf 0, pllmf 3
 - vco_out  400000000, scc_clk  100000000, brg_clk  100000000
 - cpu_clk  400000000, cpm_clk  200000000, bus_clk  100000000
 - pci_clk   66666666

CPU:   MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz
Board: Alcatel OS6850 (Kite II)
I2C:   ready
DRAM:  256 MB
FLASH:  8 MB

Escribimos:

[Miniboot]  setenv bootflags 0x01000
[Miniboot]  bootm 0xff900000

Nos aparecerá una salida como esta:

## Booting image at ff900000 ...
   Image Name:   miniboot-6.4.3.479.R01
   Image Type:   PowerPC VxWorks Kernel Image (gzip compressed)
   Data Size:    984865 Bytes = 961.8 kB
   Load Address: 00005000
   Entry Point:  00005000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
## Ethernet MAC address not copied to NV RAM
Loading .text @ 0x01000000 (1580292 bytes)
Loading .rodata @ 0x01181d08 (337331 bytes)
Loading .data @ 0x011d42c0 (135644 bytes)
Clearing .sbss @ 0x011f54a0 (1528 bytes)
Clearing .bss @ 0x011f6000 (1571268 bytes)
## Using bootline (@ 0x4200): flash(1,0)cmm:default h=192.168.10.1 e=192.168.10.1:ffffff00 cb=9600 cp=none cs=1 cw=8 cm=modemControlOff f=0x1000 
## Starting vxWorks at 0x01000000 ...
USB2 Host Stack Initialized.
USB Hub Driver Initialized 
USBD  Wind River Systems, Inc. 562 Initialized
M824xHCI Controller found.
Waiting to attach to USBD...Done.
usbCbiUfiDevInit() returned OK
CBI Class Driver Successfully Initialized
ataDrv call. 0 1 24 24 621 0 0
0xffffde0 (tRootTask): usbBulkDevInit() returned OK

CS EEPROM Module ID: 42012219 , System type: 48 port Lite 100Base-X, with 4 combo ports, stacking- kite2


Adding 5421 symbols for standalone.
Check Disk Running ...
                                                                                dosChkLib : CLOCK_REALTIME is being reset to THU FEB 02 10:15:14 2017
Value obtained from file system volume descriptor pointer: 0xed9b9d8
The old setting was THU JAN 01 00:00:00 1970
Accepted system dates are greater than THU DEC 27 00:00:00 1990
/flash/  - Volume is OK 


Boot parameters are:

 'flash(1,0)cmm:default e=10.255.24.81:ff000000 h=192.168.10.1 g=10.255.24.181 f=0x1000 cb=9600 cp=none cs=1 cw=8 cm=modemControlOff'


AOS miniboot version: 6.4.3.479.R01
VxWorks (for Alcatel CMM Motorola MPC8248) version VxWorks5.5.1
KERNEL: WIND version 2.6
Made on Mar 19 2010, 18:00:20.
Copyright Wind River Systems, Inc., 1984-2006

CPU: Motorola MPC8248.  Processor #0.
Memory Size: 0x10000000 (256 MB).  BSP version 1.2/1.

WARNING: Stopping in miniboot as directed by boot flags...

Nos dirigimos al directorio network

[Miniboot] cd "network"

Comprobamos que existen los ficheros userTable* y los eliminamos todos.

[Miniboot] xdelete "userTable*"

Reiniciamos

[Miniboot] reboot

Y ya podemos loguearnos como usuario por defecto del dispositivo, login => admin, password => switch.

Reinicializar el switch

Si queremos reinicializar el switch, porque lo queremos dejar como "estado de fábrica", entonces tendremos que seguir los pasos del punto anterior añadiendo los siguientes comandos:

[Miniboot] cd ".." 
[Miniboot] cd "working"
[Miniboot] xdelete "boot.cfg"
[Miniboot] cd ".."
[Miniboot] cd "certified"
[Miniboot] xdelete "boot.cfg"
[Miniboot] reboot

Y ya tendremos el switch reinicializado.

Fuentes

  • Alcatel Unleashed ~ Especial incapié en el usuario sergio
  • Alcatel documentation ~ AOS Release 6 Management guide, Network guide

Parcellite, un portapapeles liviano

Esto es una gran frase, quién recupera información que la da por perdida y es valiosa para sí, obtiene una remuneración, sea económica, o en términos de tiempo. Y claro que sí, a quién no le ha pasado que ha copiado un código largo creyendo que tenía el portapapeles instalado, y de repente ¡zas!, lo perdiste después de haberte llevado horas intentando desarrollarlo.

Pues bien, Parcellite es una de las soluciones para estas urgencias y necesidades. Además de poder almacenar cuántos registros se le configure, es uno de los portapapeles que menos consumen para entornos gráficos tanto para Linux como otros sistemas BSD. Lo podemos obtener desde los repositorios en un periquete ya que está ampliamente soportado por la mayor parte de distribuciones y también por los sistemas BSD.

Características

Este genial software fue creado por un tal Gilberto Miralla y Doug Springer, está elaborado en GTK+, traducido por casi una veintena de personas registradas, se encuentra licenciado bajo GPL y sobre todo funciona perfectamente en cualquier entorno de escritorio o gestores de ventanas como i3, Fluxbox...etc teclado o con el ratón
Parcellite suele utilizar poca memoria RAM (~14MB) como mucho y tiene unas funcionalidades que vienen ideales como: * Aparece un icono en la bandeja del sistema * Permite almacenar un máximo de 50 registros y limitar el tamaño de MB del mismo * Se puede configurar para que se omita la copia desde el ratón o desde la combinación de teclas * Editar las entradas del historial * Modificar el comportamiento de la vista de la lista de entradas * Limitar el tamaño de los registros * Opción multiusuario para que todos puedan utilizarlo simultáneamente * Pueden crearse acciones para lanzar programas y aplicaciones pulsando Ctrl+Clic en el icono de Parcellite que se genera en la bandeja de entrada. * Puede configurarse los atajos del teclado para interactuar con él * Permite exportar el historial en formato texto plano

¿A qué esperas? ¡Pruébalo ya!

Index

Gentoo Linux es una metadistribución que se caracteriza por ser altamente configurable y personalizable entre todas las existentes en el mundo de Linux. El usuario que utilice Gentoo Linux, no sólo puede compilar el software a su medida, escogiendo las características que quiere que tome; si no también, puede compilar ese software para su propio soporte de CPU acelerando aún más la fluidez y el consumo del mismo.

Gentoo Linux promete desde su instalación, un comienzo personalizable al gusto del usuario. Ya que este proceso se realiza a través de comandos y no existe interfaz gráfica de instalación que lo oriente. Para la instalación se emplea un archivo comprimido llamado stage que difunde el proyecto Gentoo en un tiempo que ellos consideran, posteriormente hay que seguir una serie de procesos documentados en su Wiki para poder ir realizando la instalación.

| Este proceso no es apto para personas sin paciencia y que no leen.

Algunos conceptos básicos

Antes de entrar en detalles, me gustaría dejar claro una serie de términos, para aquell@s que no lo sepan para no pasarlos por alto: * Lenguaje de programación: Permite interactuar con el equipo en un lenguaje que nosotros podemos entender como si fuera hablar en inglés u otro idioma extranjero. Los más típicos son C, C++... * Código fuente: Es el ADN del programa y/o software, contiene todo para que funcione. Sin él, no hay programa directamente. Y se escribe en un lenguaje de programación. * Compilador: Programa que traduce el lenguaje de programación en lenguaje de máquina, que serían los famosos 0 y 1. * Binario: Es el archivo que genera el compilador tras haber traducido el código fuente. * Tarball: Comprimido que almacena código fuente. * Proceso de compilación. Es aquel que permite traducir el lenguaje de programación leíble por ti y por mí, a un lenguaje de máquina como es el lenguaje binario. Imagínate que quieres publicar un libro, el cuál va a ser leído por multitud de personas. Entonces, te apresuras a empezar, redactando un borrador del libro. El cuál lo harás en un determinado lenguaje como puede ser el español o el inglés. Todos los días vas añadiendo líneas y/o borrando cosas que no encajen y añadiendo comentarios sobre el por qué lo hiciste. Finalmente, terminas el borrador y lo llevas a la imprenta. Allí sale el libro terminado, listo para ponerlo a venta al público.

| Código fuente (borrador) > Compilador (Imprenta) > Binario (Libro).

Un poco de historia

Antes de liberarse Gentoo Linux en marzo de 2002. El fundador, Daniel Robbins mantenía una distribución llamada Enoch Linux cuyo objetivo consistía en no facilitar paquetes binarios pre-compilados como hacen la mayoría de distribuciones actuales, consiguiendo así agilizar y afinar el software en términos de rendimiento.

Daniel Robbins, probó un fork (bifurcación) de GCC conocido como EGCS desarrollado por Cygnus Solutions y renombró el nombre de Enoch Linux a Gentoo Linux. Sin embargo, más tarde decidió detener el desarrollo de Gentoo Linux y se fue a explorar el mundo de FreeBSD (un SO basado en BSD y constantemente evolucionando) para obtener más conocimientos sobre el sistema de ports, así, posteriormente, trasladarlo a Gentoo Linux y tener una bella obra de arte como es actualmente Portage. Finalmente, Gentoo Linux vio de nuevo la luz en marzo del 2002 con su versión 1.0.

Beastie, la mascota de BSD.

¿Qué es Portage?

Portage es un gestor de alto nivel que permite interactuar con este bello sistema. Uno de los comandos que se utilizan para gestionar el software instalado en el sistema se llama emerge. Está escrito en Python mayormente y se encuentra en /usr/lib/python-exec/version_python/emerge

En el siguiente vídeo de ejemplo podemos ver como interactuar con él:

¿Cómo funciona?

Este comando se apoya de un fichero general ubicado en /etc/portage/make.conf, en el que se establecen algunas características generales almacenadas en variables de Bash como puede ser CFLAGS, MAKEOPTS, USE... que explicaremos a continuación:

| Los procesadores contienen una serie de FLAGS (instrucciones) que permiten acelerar o mejorar el proceso de compilación del software. Por lo general, el software en otras distribuciones de Linux se compilan con los menos flags posibles para no alterar el uso del mismo en cualquier ordenador o dispositivo que utilicen otros CPUs.

  • CFLAGS: Es un array en el que se definen las FLAGS que utilizará tu procesador (o las que quieras utilizar) en el software que utilizarás después una vez que el compilador GCC construya un paquete. Digamos, que si compras un traje en una tienda. Por lo general, están elaborados para que todos podamos utilizar dicho traje. Pero siempre quedarán costuras más ceñidas que otras, haciendo que el traje sea igual de válido para todos, pero no ajustado a nuestra silueta. Sin embargo, si mandamos ha hacer un traje a nuestra medida, o a la medida que le digamos que queremos el traje, ya lo estamos haciendo único y exclusivo para nosotros, o para el acompañante. Esa es en parte la finalidad de las CFLAGS. Aprovechar todo el potencial de nuestro CPU para compilar los paquetes. La contrapartida es que si se le "dejamos" el traje a un amigo, este puede que no le valga.

  • MAKEOPTS: Permite definir la cantidad de números de CPUs físicos y virtuales que quieres utilizar para compilar de forma paralela. Este proceso aprovecha todos los núcleos/threads de nuestro procesador incluyendo los subprocesos para llevar a cabo la compilación del paquete. Imagínate, que para hacer un traje solo tenemos una empresa con 20 costurer@s, pero mandamos a trabajar a 1 sola persona. El traje acaba terminado a los 3 días. Pero, ¿y si ponemos a esos 20 costurer@s a trabajar para hacerlo? En menos de un día lo tenemos hecho. Esto es lo mismo al usar esta variable. Su uso implica siempre sumar +1 al número actual de núcleos de procesamiento y subprocesos. Por ejemplo, si tenemos un i5 con 2 núcleos y 2 subprocesos. El valor debería ser MAKEOPTS="-j5" y no "-j4".

  • USE: Un array en el que defines las características con la que queremos que se compilen los paquetes del sistema. Si queremos que se utilice KDE, GNOME, Qt4, Qt5... se habilitan haciendo uso del signo + y si no -. Extrapolándolo al ejemplo del traje, aquí logramos personalizarlo añadiendo el color que queramos, la tela...

| Nota personal: Prefiero dejar pocos valores en USE en el archivo /etc/portage/make.conf y utilizar un fichero separado como /etc/portage/packages.use/nombre_fichero para cada paquete que quieras instalar y especificar las USE de cada paquete allí para evitar problemas posteriormente, porque cuando la defines en el fichero general, lo aplicará a todo el software que quieras compilar y puede que te generen conflictos.

  • FEATURES, este array permite añadir algunas características a Portage como:
    • parallel-fetch: Utilizar descarga paralela, imagínate que la empresa de confección de trajes o ropa, le compra la tela, botones... a una distribuidora la cuál solo usa un furgón de reparto para todo. Puede que pinche los neumáticos y no llegue a tiempo. No obstante, puede mandar todo repartido en varios furgones, esto permite mayor carga y además más rapidez, si pincha uno las gomas, no pasa nada.
    • user-fetch: La descarga se hace mediante usuario sin privilegios. Más info aquí
  • GENTOO_MIRROR: Array en el que añades mirrors para evitar que sí cae uno por el motivo que sea, salte al otro sin problema. Imagínate que tienes 1 distribuidora de material textil para confeccionar la ropa, y casualmente un día te falla por el motivo que sea. ¿Qué haces? ¿Dejas tirado a tus clientes porque esa empresa te ha fallado? ¿No, verdad? Se concierta otras para evitar que sucedan este tipo de cosas y no dejes a tus clientes plantados.
  • L10N (como reemplazo a LINGUAS), especifica el idioma y/o los idiomas que quieras mantener instalado en tu sistema. Puedes tener más de 1 sin ningún problema.
  • PORTDIR: Variable cuyo valor es el directorio dónde se encuentra el árbol de paquetes, generalmente se suele dejar por defecto.
  • PKGDIR: Variable que contiene el directorio con los tarballs que contienen el código fuente. Suele dejarse por defecto.
  • CPU_FLAGS_X86: Array que pretende sustituir los registros de estado comúnmente denominado en inglés FLAGS del procesor que suelen añadirse también como registros USE, y así los mantienen más ordenados.
  • VIDEO_CARDS: Array en el que defines que drivers vas a utilizar según la tarjeta gráfica que tengas, siempre y cuando utilices servidor gráfico.
  • INPUT_DEVICES: Otro array en el que añades los controladores que utilizas para los periféricos en el caso de utilizar servidor gráfico.
  • CHOST: Variable que se suele dejar por defecto. Si quieres otra versión de GCC, en ese caso, se debería seguir cuidadosamente las siguientes instrucciones 1 y 2.

Hay más variables y arrays que se pueden utilizar para definir más características como por ejemplo APACHE2_MODULES que asigna los módulos que se quieren utilizar para Apache; PORTDIR_OVERLAY para definir en qué directorio alojar los overlays...et

Licencias y acuerdos de licencia de software adicional

Hay software en Gentoo Linux que aunque en su mayor parte es software libre y/u Open Source, encontrarás software privativo como es el caso de los drivers de NVIDIA, TeamViewer, VirtualBox... con lo que conlleva a que aceptemos una serie de licencias como la PUEL, NVIDIA...etc para ello, hay un fichero ubicado en /etc/portage/package.license.

Aceptando licencias

En él, podrás añadir el paquete que quieras instalar más el nombre de la licencia que pide y se pueden añadir de 2 formas: * >=dev-util/nvidia-cuda-toolkit-6.5.14 NVIDIA-CUDA * dev-util/nvidia-cuda-toolkit NVIDIA-CUDA

¿Cuál es la diferencia? No tan sustancial. Puedes indicar que las versiones que sean superiores a la 6.5.14 pidan de nuevo volver modificar package.license. Mientras que la segunda, sea cual sea la versión aceptará las condiciones.

Instalar paquetes bloqueados

En cuánto a los paquetes bloqueados, son paquetes no testados y considerados de índole "inestable". Es decir, no han sido aprobados como estables dentro del árbol de Portage. Hay que añadir el paquete a instalar más la arquitectura que estás utilizando en cuestión en el fichero /usr/portage/package.accept_keywords

Como mencioné anteriormente, se puede utilizar la misma sintaxis para este tipo de software como para el de las licencias: * >=dev-db/sqlmap-1.0.6 ~amd64 * dev-db/sqlmap ~amd64

Bloquear paquetes de forma voluntaria

Puede que carezca de sentido, pero si a lo mejor emerge se pone un pelín caprichoso y no te deja compilar un paquete porque te avisa de que lo bloquees por algún motivo. Se puede hacer. En este caso hay que añadir solo el nombre del paquete en el fichero: /etc/portage/packages.mask/nombre_fichero * >=dev-db/sqlmap-1.0.6 * dev-db/sqlmap Puedes obtener más información sobre Portage a través de su documentación.

Algunas diferencias entre Portage y el FreeBSD Ports Collection

Portage, es un gestor de paquetes de alto nivel que está inspirado en el árbol de ports de FreeBSD. Los ports en FreeBSD son un conjunto de directorios con scripts elaborados en lenguaje script que permiten y facilitan la instalación de software desde tarballs (códifo fuente).

FreeBSD no tiene un gestor de paquetes de alto nivel que simplifique la tarea como tiene Gentoo Linux con emerge. En este SO, tienes que ir directorio tras directorio efectuando un make install clean. Eso sí, si el software que pretendes instalar tiene dependencias, las compila también, esto suprime la necesidad de ir directorio tras directorio.

Si coges un listín telefónico ordenado por categorías, dentro de esas categorías hay subcategorías y finalmente los negocios, locales, y personas con su nombre, descripción, y teléfono de contacto. Al que si llamas te ofrece un servicio.

Este es un ejemplo del árbol de Portage:


├── app-accessibility
│   ├── accerciser
│   │   ├── accerciser-3.14.0.ebuild
│   │   ├── ChangeLog
│   │   ├── ChangeLog-2015
│   │   ├── Manifest
│   │   └── metadata.xml
│   ├── at-spi2-atk
│   │   ├── at-spi2-atk-2.16.0-r1.ebuild
│   │   ├── at-spi2-atk-2.18.1.ebuild
│   │   ├── at-spi2-atk-2.20.1.ebuild
│   │   ├── ChangeLog
│   │   ├── ChangeLog-2015
│   │   ├── files
│   │   │   ├── at-spi2-atk-2.16.0-atk_suite.h
│   │   │   ├── at-spi2-atk-2.16.0-null-gobject.patch
│   │   │   ├── at-spi2-atk-2.16.0-out-of-source.patch
│   │   │   └── at-spi2-atk-2.16.0-tests-data
│   │   │       ├── test-accessible.xml
│   │   │       ├── test-action.xml
│   │   │       ├── test-component.xml
│   │   │       └── test.xml

¿Qué contiene un paquete en Gentoo?

En Gentoo a diferencia de otras distribuciones de Linux, un paquete no es un archivo comprimido que sigue una serie de pautas de empaquetamiento y que en él se incluya software ya pre-compilado. Se le llama así exactamente a lo que es en FreeBSD un port (un conjunto de carpetas y archivos varios legibles que permiten la instalación de un software a partir del código fuente compilándolo).

Aquí puedes ver que un paquete está constituido por varios archivos. Especialmente los que más se repiten como patrón son:

Metadata.xml: XML que se utiliza para saber quién es el matenedor de ese paquete entre otras cosas. Manifest: Archivo que contiene la suma de comprobación para verificar si el paquete que se ha descargado de los repositorios coincide con la suma que contiene el fichero en un hash determinado como puede ser SHA1, SHA256... *.ebuild: Fichero que contiene todo lo necesario para instalar un software determinado. En él se incluye información como: * Nombre * Descripción * Licencia * Palabras clave (arquitecturas) * Dependencias * Si incluye o no parches * Si necesita configuración adicional para soporte multilib * ChangeLog: Permite visualizar los cambios que ha sufrido este paquete a lo largo del tiempo.

¿Y un port en FreeBSD?

Por otro lado, FreeBSD tiene la siguiente estructura, similar como no:

  • Makefile: Fichero que incluye información como:
  • Nombre del port
  • Versión
  • Revisión
  • Categoría
  • Web oficial
  • Mantenedor
  • Comentario
  • Dependencias...
  • distinfo: Contiene un tipo de hash para comprobar si cumple con la suma de verificación y el nombre del archivo a descargar junto con su versión, revisión y extensión.
  • pkg-descr: Descripción larga del port
  • pkg-plist: Lista de archivos que se van a instalar relativo al port en cuestión (no el resto de dependencias si las tuviera)

Ejemplo de uso:

Ya, para de hablar de Portage ¿Qué hay de los servicios?

Gentoo por norma general recomienda utilizar OpenRC, que es un gestor de daemons (nombre antiguo para definirse a servicios) muy bueno y se encuentra disponible tanto para Gentoo Linux como para sistemas BSD como FreeBSD. Manjaro y/o Archlinux lo mantienen en sus repositorios. OpenRC se caracteriza por respetar la filosofía KISS (Keep It Simple, Stupid!) en español ¡Hazlo sencillo!, ¡Estúpido!

Algunas características de OpenRC

OpenRC se caracteriza entre otras cosas: * BusyBox; como entorno single mode reemplazo de init * Añade ficheros init.d específicos para un entorno BusyBox * Reemplazar udev con mdev y/o eudev * Compatible con Wicd, Network Manager, Pulseaudio... * runlevels específicos durante el arranque * Uso de CGroups (una forma de gestionar procesos por grupos) * Soporte chroot

¿Cómo trabajar con OpenRC?

Los comandos que suelen utilizarse para interactuar con él son: * rc-status: Muestra información sobre los daemons de todos los runlevels o uno específico * rc-config: Configura un runlevel añade o elimina un daemon que esté en él; ó bien para, inicia un daemon... * rc-service: Arranca o paraliza daemons

El fichero de configuración de OpenRC se llama rc.conf y está ubicado en el directorio /etc

¿Otras forma de tener Gentoo?

Gentoo no sólo se puede utilizar conjuntamente con Linux. Puedes encontrarlo con sistemas BSD como FreeBSD, OpenBSD, NetBSD, combinado el potencial de Gentoo con el resto de sistemas operativos. No me podría imaginar un OpenBSD y su firewall y seguridad con las herramientas que tiene Gentoo. Y no solo eso, existen multitud de proyectos como Gentoo Hardened que pretende hacer de Gentoo Linux algo tan blindado como OpenBSD.

Referencias

¿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