1 servicios(jobs) ubuntu kepa bengoetxea. 1 servicios/jobs servicio: es una función especifica que...

Post on 23-Jan-2016

228 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Servicios(Jobs)

Ubuntu

Kepa Bengoetxea

1

Servicios/Jobs• Servicio: es una función especifica que realiza la máquina, tanto para sí

misma (syslog), como para otras(apache2).• Un servicio puede ser proporcionado por más de un daemon(apache2 y

tomcat) , o un daemon puede servir a más de un servicio (xinetd), pero lo normal es arrancar un daemon por servicio.

• Daemon: es un programa que se ejecuta en una máquina Linux, que no contiene acceso a consola y que realiza tareas del sistema. Daemon procede “day-monitors” de MULTICS (S.O tiempo compartido para mainframe GE-645 1964-1969). En 1969, comenzó el proyecto UNIX que heredó muchas cosas de los MULTICs, y les llamarón “daymons”. En EEUU se pronunciaba igual que “daemon” :D ->demonio

1

Servicios/Jobs• Cada servicio tiene un nombre, que suele ser el nombre del demonio

servidor.• Ejm: web (apache2), ftp(proftp), postgresql(postgresql)• Arranque y parada del servicio depende de la familia de Linux que

tengas. Existen dos grandes familias:– BSD(Berkeley Software Distribution): Gentoo, Slackware ...– System V(Debian,Linex,Guadalinex,Redhat,Suse y Mandrake ...)

y– Ahora Upstart ahora (Ubuntu, Fedora, OpenSuse, Debian ...)

• LSB recomiendaba System V, y ahora Upstart para arranque/parada servicios. Nota: LSB (Linux Standard Base), es un stardard que define scripts de arranque, ubicación de directorios, que es lo mínimo en bibliotecas y programas para una distro.

1

Servicios:Familia Sys V

• El servidor se lanza bien como un servicio independiente que está corriendo como un demonio esperando alguna petición (standalone) o bién es lanzado por el superservidor de internet (xinetd) como un servicio bajo demanda:

– Los administrados por xinetd, es decir, si xinetd esta desactivado, estos a su vez estan desactivados.

– Los servicios standalone son aplicaciones independientes que son arrancados por el proceso init en función del contenido de /etc/rc$runlevel.d/*. (xinetd es un servicio standalone)

1

Servicios:Xinetd

• El superservidor de internet (xinetd) escucha todos los puertos de los servicios que administra y cada vez que llega una petición de un cliente, arranca el servicio correspondiente.

1

Servicios:Standalone

• Standalone:– Si se lanza el server como standalone, este corre normalmente

por el sistema desde el arranque de la máquina y cuando un cliente lo solicita simplemente le abre una conexión. Ejm: El daemon ftp abre el puerto 21 y espera conexiones entrantes desde que se arranca el servidor. Si llega una petición crea un proceso hijo que acepta la conexión, mientras que el padre sigue escuchando dicho puerto.

daemonftp padre 21

cliente ftp21

daemonftp hijo

1

Standalone vs xinet

• Standalone:– servicio esta cargado desde que se arranca la máquina,

por lo que atiende más rápido las peticiones del cliente.• xinetd

– solo carga en memoria el servicio cuando llega la petición del cliente, por lo que consume menos recursos (menos memoria) pero el tiempo de respuesta es menor.

1

Gestión de Servicios (Al estilo System V)

Servicios Standalone:¿Cómo arrancar/parar los servicios ahora?

A)Invocando directamente a los demonios:

sudo /etc/init.d/ssh (start/stop/restart)

B)Utilizando el comando 'invoke-rc.d' es un simple shell script en ' /usr/sbin/', se usa para visualizar el estado de un servicio, para arrancar, parar o reinializar un servicio. A este comando se le pasan dos argumentos:

– nombre del servicio (el nombre del fichero en '/etc/init.d') – acción: start|stop|restart|status

sudo invoke-rc.d cron stop

1

Gestión de Servicios (Al estilo Upstart)

Servicios Standalone:¿Cómo arrancar/parar los servicios ahora?

A)Utilizando el comando inictl:

Ejm: sudo initctl stop/start/restart/status ssh

Ejm: sudo initctl emit shutdown

B)Usando los comandos stop/start/restart/status:

Ejm: sudo stop ssh

C)Utilizando el comando 'service' : A este comando se le pasan dos argumentos:

– nombre del servicio (el nombre del fichero en '/etc/init.d') – acción: start|stop|restart|status

sudo service cron stop

1

Gestión de Servicios(Al estilo System V)

Servicios Standalone:¿Cómo hacer para que cada vez que arranque la máquina se arranquen automáticamente ciertos servicios?

A)Modificando directamente los enlaces simbólicos:

ln -s /etc/init.d/ssh /etc/rc2.d/S20ssh

mv /etc/rc2.d/K80ssh /etc/rc2.d/S20ssh

B)Utilizando el comando 'update-rc.d' se gestionan automáticamente los links simbólicos:

#Borra los enlaces : update-rc.d -f ssh remove

#Crear los enlaces usando los parámetros por omisión:update-rc.d ssh defaults

#Comando equivalente usando explícitamente un conjunto de argumentos: update-rc.d foobar start 20 2 3 4 5 . stop 80 0 1 6 .

C)Modo gráfico:sudo rcconf (apt-get install rcconf)

1

Gestión de Servicios (Al estilo System V)

Servicios Standalone:¿Cómo crear o instalar los nuevos servicios?

sudo cp myscript /etc/init.d

sudo chmod +x /etc/init.d/myscript

sudo update-rc.d myscript start 51 2 3 4 5 . stop 49 0 1 6 .

1

Gestión de Servicios (Al estilo System V)

Servicios Standalone:Actualización (2 pasos)

1.-sudo update-rc.d -f ssh remove Removing any system startup links for /etc/init.d/ssh ...

/etc/rc1.d/K20ssh

/etc/rc2.d/S20ssh

...

2.-sudo update-rc.d ssh start 20 2 3 4 5 . stop 80 0 1 6 .

Adding system startup for /etc/init.d/ssh ...

/etc/rc1.d/K80ssh -> ../init.d/ssh

/etc/rc2.d/S20ssh -> ../init.d/ssh

...

1

Gestión de Servicios (Al estilo System V)

• Servicios Standalone:¿Cómo crear o instalar los nuevos servicios usando el comando sysv-rc-conf?

Con sysv-rc-conf se puede modificar y consultar los servicios para los diferentes runlevel. Libera al administrador de la tarea de manipular directamente los enlaces simbólicos en la jerarquia de directorios de “/etc/rc[0-6].d”.(Instalar: sudo apt-get install sysv-rc-conf)

sysv-rc-conf (En modo gráfico)

#ver un servicio en concreto: sysv-rc-conf --list ssh

ssh 0:off 1:off 2:on 3:on 4:on 5:on 6:off

#ver todos los servicios: sysv-rc-conf --list

#activar un servicio, para arranque en le nivel 2:

sysv-rc-conf –level 2 ssh on

1

Gestión de Servicios(Al estilo System V)

Servicios xinet usando sysv-rc-conf:

#Activar los servicios gestionados por xinetd

ls /etc/xinetd.d/

chargen daytime discard echo time

sudo sysv-rc-conf daytime on|off

#Ver si esta activo

sudo sysv-rc-conf --list daytime

daytime 2:on 3:on 4:on 5:on

#Esto es debido a:

sudo sysv-rc-conf --list xinetd

xinetd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

1

Servicios: System V

• smb(samba)• mysqld (MySql)• ntpd (Network Time Protocol)• apache2 (Apache)• Postgresql• named(DNS)• Nfs(Net File System)

1

Servicios: System V

• syslog (facilita a los demonios el uso de mesajes log)• autofs (automonta los sistemas de ficheros)• crond (demonio de tareas repetitivas)• cups(Common UNIX Printing System)• Anacron( Anacron is a task scheduler similar to cron except

that it does not require the system to run continuously. It can be used to run the daily, weekly, and monthly jobs usually run by cron)

• kudzu (This runs the hardware probe, and optionally configures changed hardware.)

1

Servicios: System V

• sshd (secure shell daemon)• atd (runs commands at a specified time as scheduled by the

"at" command)• iptables (iptables firewall)• xinetd (superservidor)• sendmail(Mail Transport Agent)• Apmd (monitoring battery status and logging it via syslog. It

can also be used for shutting down the machine when the battery is low)

• ....

1

Servicios:xinetd

• chargen-udp,rsync,chargen,daytime-udp,daytime,echo-udp,echo,services,time-udp,cups-lpd,sgi_fam,ktalk,

• telnet,ftp

1

Ejm: crond

• Cron se encarga de lanzar tareas de manera periódica.• Cron es un demonio que busca archivos crontab en la carpeta

/var/spool/cron/crontabs/nombre_usuario(ejm: euiti), estos crontabs son cargados en memoria. Cron también lee del fichero /etc/crontab y de los ficheros que esten en la carpeta /etc/cron.d/* . Cron se despierta cada minuto examinando todos los crontabs, chequeando todos los comandos para ver si tiene que ejecutar alguno. Una vez ejecutado mandará un correo al usuario que solicitó ejecutar dicho script.

1

Ejm: crond

• Editar un fichero crontab: crontab -e

* * * * * /home/kepa/prueba.sh• El formato por columnas de un crontab:

minute 0-59

hour 0-23

day of month 1-31

month 1-12

day of week 0-7 (0 o 7 es domingo)

script, programa o comando a ejecutar

1

Ejm: crond

• Para ver los crontabs generados por un usurio:

– crontab -l -u euiti ó less /var/spool/cron/crontabs/euiti

• Borrar el crontab actual:

– crontab -r

1

Ejm: crond

• Analizando el fichero /etc/crontab• # m h dom mon dow user command• 17 * * * * root cd / && run-parts --report /etc/cron.hourly• 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --

report /etc/cron.daily )• 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --

report /etc/cron.weekly )• 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --

report /etc/cron.monthly )• En ls /etc/cron.daily/*

– less aptitude ...

1

Instalar un servicio standaloneEjm: Apache/Tomcat

• Referencia: http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

• Apache: – /etc/init.d/apache2 start/stop/restart

• Tomcat:– /usr/local/tomcat/bin/shutdown.sh– /usr/local/tomcat/bin/startup.sh

• Si queremos Tomcat arranque al inicio de sistema como un servicio Sys V debo crear un script de inicialización /etc/init.d/tomcat:

1

Instalar un servicio standalonescript de inicio

# description: Auto-starts tomcat

# processname: tomcat

# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun

case $1 in

start)

sh /usr/local/tomcat/bin/startup.sh

;;

stop)

sh /usr/local/tomcat/bin/shutdown.sh

;;

restart)

sh /usr/local/tomcat/bin/shutdown.sh

sh /usr/local/tomcat/bin/startup.sh

;;

esac

exit 0

1

Instalar un servicio standalonescript de inicio (ubuntu)

• chmod +x tomcat• Manual: ln -s• Añade links en todos los runlevels: sudo update-rc.d tomcat start

20 2 3 4 5 . stop 80 0 1 6 .• Arranque automaticamente Tomcat al arrancar el sistema

para un runlevel 2:– sudo sysv-rc-conf –level 2 tomcat on

S80tomcat -> ../init.d/tomcat• Usarlo ya!

– invoke-rc.d tomcat start– /etc/init.d/tomcat start/stop/restart

1

xinetd• Configuración xinetd se guarda en:/etc/xinetd.conf

• Entrada: defecto es para los servicios que no se especifica

# Simple configuration file for xinetd

# Some defaults, and include /etc/xinetd.d/

defaults

{

instances = 60

log_type = SYSLOG authpriv

log_on_success = HOST PID

log_on_failure = HOST

cps = 25 30

}

includedir /etc/xinetd.d

1

xinetd• Si vemos el contenido de /etc/xinetd.d:

ls -lias /etc/xinetd.d

chargen daytime echo-udp klogin ktalk time-udp

chargen-udp daytime-udp eklogin krb5-telnet rsync

cvs echo gssftp kshell time

1

xinetd

Less cvs: service cvspserver

{ disable = yes

port = 2401

socket_type = stream

protocol = tcp

wait = no

user = root

passenv = PATH

server = /usr/bin/cvs

env = HOME=/var/cvs

server_args = -f --allow-root=/var/cvs pserver

# bind = 127.0.0.1}

1

Administrar los servicios xinetd:proftp

Bajar paquetes del sitio oficial de proftp:

tar -zxvf proftp.tar.gz

cd proftp

./configure --enable-shadow

make

make install

1

Administrar los servicios xinetd:proftp

• El fichero de configuración es:/usr/local/etc/proftpd.conf

ServerName "Cudeso FTP"

ServerType inetd/standalone

DefaultServer on

SystemLog /var/log/proftp

Port 21

Umask 006

MaxInstances 30

User nobody

Group nobody

RequireValidShell off

# Normally, we want files to be overwriteable.

<Directory /*> AllowOverwrite on</Directory>

1

Administrar los servicios xinetd:proftp

• Para que funcione con xinetd, se añade en vi /etc/xinetd.d/proftp

service ftp

{ flags = REUSE

socket_type = stream

instances = 50

wait = no

user = root

server = /usr/local/sbin/proftpd

bind = 192.168.1.1

log_on_success = HOST PID

log_on_failure = HOST RECORD}

1

Modelo Cliente/Servidor• Gestionar entre varios procesos el uso de los recursos, obliga al S.O a

modelarlo adecuadamente usando el Cliente/Servidor.

• Procesos de usuario o clientes realizan peticiones de uso de recursos a

los procesos servidores o gestores.

• Un daemon es un proceso servidor codificado como si fuese un proceso

de usuario (realizando llamadas al sistema) pero que se ejecutan con

mayor prioridad que estos. Se ejecutan en background y realiza un

servicio de sistema de manera continuada (pensar en un while true. ¿os

suena?)

1

Servicio gestor_x(){

Inializar_estructuras_eventos();

While (true){

#se bloquea esperando una pet. cliente

Esperar_evento();

#desencola la info

sacar_peticion_gestor_x(evento);

#inicia rut_atención

iniciar_operación_pedida();

#avisa fin evento

señalar_evento(evento);}}

llamada_a_sistema_cliente_x()

{#encola la info necesaria

poner_pet_gestor_x(mi_event)

#despierta el gestor

señalar_evento(Gestor_x)

#espera a la señal del gestor

esperar_evento(mi_event)

}

1

Mejorar la seguridad• ps -aux | grep ssh

• sudo sysv-rc-conf

• netstat -an

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN

tcp6 0 0 :::22 :::* LISTEN

udp 0 0 0.0.0.0:32768 0.0.0.0:*

udp 0 0 0.0.0.0:68 0.0.0.0:*

udp 0 0 0.0.0.0:5353 0.0.0.0:*

Hay puertos que son fáciles de reconocer como: el puerto 22 para ssh, pero hay otros que no son tan obvios.

1

Mejorar la seguridad

• ¿Cómo saber qué servicio es el encargado de abrir el puerto TCP 22? lsof -i tcp:22

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

ssh 17191 kepa 3u IPv4 26677 TCP local:46254->bppxqs.bp.ehu.es:ssh (ESTABLISHED)

sshd 10814 kepa 3u IPv6 229439 TCP *:ssh (LISTEN)

• nmap localhost/ip: para saber que servicios estoy/estan ofreciendo

PORT STATE SERVICE

PORT STATE SERVICE

22/tcp open ssh

25/tcp open smtp

631/tcp open ipp

1

Mejorar la seguridad• less /etc/services:

– encontramos los servicios en que puertos debería correr:#service-name port/protocol [aliases ...] [# comment]

ssh 22/tcp # SSH Remote Login Protocol

ssh 22/udp

smtp 25/tcp #exim4 mail agent

ipp 631/tcp # Internet Printing Protocol

ipp 631/udp

– Quitar

/etc/init.d/exim4 stop

sudo update-rc.d -f exim4 remove

ln -s /etc/init.d/exim4 /etc/rc2.d/K80exim4

System → Administration → Services:Find and deselect Mail agent

1

Mejorar la seguridad• Pero si no tengo este servicio activo: lsof -i tcp:25• En /etc/init.d, se encuentran los script de arranque de los

demonios, no los que controlan los puertos, recordemos que un servicio que necesita comunicacion con la red, lleva asociado un puerto de comunicaciones, entonces si levantamos el demonio de ssh, debemos de tener el puerto 22 abierto, aunque no lo deseemos, pero podemos bloquear los puertos, con iptables o firestarter

• iptables -L• sudo aptitude install firestarter

top related