domingo, 14 de abril de 2019

Servicios y Demonios


Un demonio es un procesos que corre en el background para realizar un servicios. Generalmente se lanzan desde el inicio del sistema y continuan corriendo hasta que alguien mas los detiene manualmente.

Un servicio normalmente se refiere a uno o mas demonios que pueden ser iniciados, o detenidos al mismo tiempo.

El proceso con ID 1 es systemd. Anteriormente era initd.

El comando systemctl se usa para administrar distintos tipos de objetos de tipo systemd llamados unidades. Para listar estos tipos de unidades podemos ejecutar systemctl -t

Algunos tipos de unidades son:

Servicios: Servicios de sistemas
Sockets: Listeners o network sockets
Paths: Usados para retrasar la activación de un servicio hasta que un cambio en el equipo ocurra.

Para listar las unidades de un tipo en específico ejecutamos:

systemctl ist-units --type=service
systemctl list-unit-files --type=service

Para conocer el status de un servicio

systemctl status name.type <-Status
ps -up PID <-Status
systemctl is-active name.type <- Está activo
systemctl is-enabled name.type <- Está habilitado

Estados:
loaded
active (runnng)
active (exited)
inactive
enabled: El servicio iniciará en automátio al booteo
disabled: El servicio no iniciará en autmático al booteo
static:

Iniciar, Detener y Reiniciar Servicios

systemctl start service.type
systemctl stop service.type
syscmctp restart service.type

Para conocer las dependencias de un servicio podemos ejecutar

systemctl list-dependencies service

Para habilitar o deshabilitar un servicio para que inicie en autmático al booteo

systemctl enable service.type
systemctl disable service.type

Procesos y Jobs


Procesos

Un proceso es una instancia de un ejecutable o programa que se encuentra corriendo.

Estados de un procesos

R = Runnning
S = Un proceso que está esperando a que se cumpla alguna condición
D = Proceso Ininterrumpible
K = Idéntico al interior, es ininterrumpible pero si puede ser “matado”
T = Stopped
Z = Proceso Zombie

El comando que utilizamos para saber el status de un procesos es el comando ps lo podemos utilizar con alguna de las siguientes opciones:

aux
lax
-ef

Por ejemplo con un ps -ef podemos ver procesos ejecutándose, quien los está ejecutando, su ID de proceso, si tiene salida a una terminal o en pantalla (tty, pts) o se están ejecutando en background (?), el tiempo que lleva ejecutándose y el comando que ejecuta (entre [ ] algunos que  de kernel)




Jobs

Los jobs nos permiten desde una instancia de shell correr y administrar multiples comandos al mismo tiempo. Solamente un job a la vez puede estar conectado con la terminal que controla la entrada del teclado y salida al monitor. Cuando un job no está corriendo conectado con la terminal que está controlando se le conoce como corriendo en background.

Si queremos ejecutar un proceso en background lo hacemos agregano al final el símbolo &

En el siguiente ejemplo podemos ver algunos procesos enviados a ejecutarse en background, vemos como se genera su PID y que los podemos ver en ejecución con un ps -ef. De igual forma como podemos listar los jobs ejecutándose con el comando jobs así como el jobID de cada uno de ellos



Si queremos traer a la terminal en control (foreground) un proceso ejecutandose en el background lo podemos hacer con el comando fg y el JobID(%jobID). Ejemplo fg %1 .Si queremos suspender ese job que tenemos ahora en la terminal podemos ejecutar ctrl+Z o, en su caso, ctrl+C para matarlo

Al igual que con fg traemos a foreground un procesos podemos también enviar a background con el comando bg (%jobID). Si el job estaba detenido comenzará a ejecutarse nuevamente

Si ejecutamos el comando ps j podemos ver los procesos, el job que los está ejecutando así como el status del job


Control de procesos

Se tiene las siguientes señales para controlar procesos:

1 – HUP – Se usa para reportar la terminación de un proceso o para reiniciarlizarlo
2 – INT – Termina un programa (ctrl+C)
3 – QUIT – Parecido a INT pero genera un dump del proceso (ctrl + \)
9 – KILL – Mata a un proceso
15 – TERM – Para terminar un proceso, a diferencia de KILL no lo forza, se lo pide
18 – CONT – Para continuar la ejecución de un proceso
19 – STOP – Terminar o suspende la ejecución de un proceso de forma forzada.
20 – TSTP – Pide terminar o suspender la ejecutción ( ctrl + Z)

El comando utilizado para enviar estas señales es el comando kill con la siguiente sintaxis:
kill -signal PID

Si queremos terminar varios procesos que cumplan un criterio, por ejemplo el nombre, podemos utilizar el comando killall con la siguiente sintaxis:
killall -signal -u username command_pattern

El comando pkill nos permite hacer lo mismo que killall pero con criterios de búsqueda mas avanzados como el UID, GID, Parent, Terminal y lo utilizamos con la siguiente sintaxis:
pkill -signal -G GID command_pattern

Con el comando pstree podemos ver todo el arbol de proceso de un sistema o un usuario

Ejemplo:

Queremos saber los procesos que está ejecutando un usuario:
pgrep -l -u javier

Podemos validar que el usuario está logueado en el sistema comando w -f, el cual nos indica también el TTY o PTS donde está logueado el usuario

Para matar todos los procesos de ese usuario ejecutamos:
pkill -15 -u javier

Para matar los procesos que está ejecutando en determinada terminal:
pkill -15 -t pts/1


Permisos en archivos - Parte 02


Permisos Especiales


En linux, existen algunos permisos especiales que podemos establecer sobre los archivos o carpetas. Veamos algunos de ellos


Setuid y Setgid – Nos sirven para poder ejecutar un comando como el usuario o el grupo dueño del archivo y no como el usuario que ejecuta el comando . Esto se logra modificando un bit en los permisos de las archivos mediante la aplicación de alguno de los siguientes permisos mediante el método simbólico:
u+s (suid)
[javier@localhost ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27880 ago 4 2017 /usr/bin/passwd
g+s (sgid)


Como se puede observar en el resultado de listar los permisos del archivo passwd vemos una letra ‘s’ en lugar del permiso de ejecución. Esto nos dice que tenemos habilitado el setuid
El comando g+s puede aplicarse también a directorios para que los archivos creados en éstos directorios hereden los permisos de grupo del directorio en lugar de los permisos de grupo del usuario que los crea.
Siticky bit: Se aplica solo a directorios para que solamente el owner de los archivos en el directorio y root puedan eliminar esos archivos.
o+t (sticky)
javier@localhost ~]$ ls -ld /tmp/
drwxrwxrwt. 16 root root 380 abr 14 11:53 /tmp/


Se había mencionado que con el método númerico mediante tres bits podíamos establecer los permisos de un archivo. Por ejemplo un chmod 777 nos da permisos de lectura, escritura y ejecución a usuario, grupo y otros
Existe un cuarto bit que se antepone a los otros 3 y nos permite establecer mediante el método númerico los permisos especiales setuid, setgid y sticky tomando en cuenta lo siguiente:


setuid = 4
setgid = 2
sticky = 1


Esto quiere dejecir que también podríamos ejecutar un chmod de la siguiente forma:
chmod 2770 dir1 <- Tenemos permisos de r,w,x para el owner, r,w,x para el grutpo, sin permisos para otros y establecimos el setgid al dejar en 2 el primer bit.
Cuando creamos un archivo, estos archivos se crean con ciertos permisos por default. Por ejemplo:

javier@localhost ~]$ touch test.txt
[javier@localhost ~]$ ll test.txt
-rw-rw-r--. 1 javier javier 0 abr 14 12:24 test.txt

Como podemos ver, en el ejemplo anterior, por default se generaron permisos 664 a este archivo. Si quisieramos que cada que creemos un archivo durante una sesión los permisos default para estos nuevos archivos fueran distintos podemos utilizar el comando umask
Si validamos el valor que tenemos por default en umask seguramente nos encontraremos algo como:

[javier@localhost ~]$ umask
0002

Primero debemos entender que por default no se dan permisos de ejecución a ningún archivo creado solo permisos de lecutra o de escritura. Lo que el 2 significa en el 4to bit (el de otros) es que tampoco daremos permisos de escritura (2) a “otros” cuando creamos un archivo. Es decir umask nos sirve para negar por default ciertos permisos
Como se comentó, los cambios que realicemos con umask solamente aplicarán durante la sesión en turno. Cuando hagamos logout se volverá a los permisos default.

Ejemplo:
umask 007 <- Los archivos creados no tendrán permisos de r,w para otros

Una consideración a tomar en cuenta es que al contrario de los archivos los directorios siempre se crean con permisos de ejecución para usuario, grupo y otros para que podamos ejecutar el comando cd sobre ellos.
Si quisieramos modificar de forma permantente los permisos default de los archivos recién creados lo tendremos que hacer modificando el archivo /etc/bashrc y /etc/profile



Servicios y Demonios

Un demonio es un procesos que corre en el background para realizar un servicios. Generalmente se lanzan desde el inicio de...