Anda di halaman 1dari 11

Taller 8: Compilacin de programas, PotstgreSQL, Servidor NTP, tareas programadas,

SSH cliente y SSH Servidor, rsync y respaldo


################################################################################
###############################################
Compilar Programas
################################################################################
########################
Instalacin de PostgreSQl por cdigofuente
-----------------------------------------------------------------------------------------------------Debemos tener un compilador; lo instalamos
$> yum -y install gcc gcc-c++ automake make autoconf bison flex
Bajamos un codigo fuente de un programa que vamos a compilar
$> cd /usr/local/src
$> wget http://ftp.postgresql.org/pub/source/v9.3.5/postgresql-9.3.5.tar.bz2
Descomprimo el codigo fuente
$> tar -jxvf postgresql-9.3.5.tar.bz2
Entro al directorio descomprimido
$> cd postgresql-9.3.5
Ejecuto el configure (Opciones con que se va a compilar)
Ver las opciones del configure
$> ./configure --help | less
Luego ejecuto el configure con las opciones elegidas
ej: quiero que el prefix (Directorio raiz sea /opt/postgresql9)
$> ./configure --prefix=/opt/postgresql9 --with-selinux
Si el configure falla (librer+ia dependiente, paquete fuente, etc) ; ver los err
ores
Instalar el readline y el zlib
$> yum -y install zlib-devel.x86_64 readline-devel.x86_64
$> ./configure --prefix=/opt/postgresql9 --with-selinux
Sale error de selinux
Instalamos las libreras de desarrollo de selinux
$> yum -y install libselinux-devel
$> ./configure --prefix=/opt/postgresql9 --with-selinux
Luego compilo
$> make
Luego instalo lo que se ha compilado
$> make install
Notas
--------------------------------------------------------------------------------* Si falla algo en la compilacin, ver los errores e instalar libreras dependientes
* Si deseo recompilar
make clean ---> borra los binarios y libreras generados por el make en el cdigo
fuente del programa
./configure

make
make install ---> chanca archivo de la instalacin anterior
Creamos el usuario postgres
$> adduser postgres
$> passwd postgres
$> cd /opt/postgresql9
$> mkdir data
$> chown postgres:postgres data
$> su - postgres
crear las bases de datos del sistema
$> /opt/postgresql9/bin/initdb -D /opt/postgresql9/data/
Iniciar el servidor postgres
$> /opt/postgresql9/bin/postmaster -D /opt/postgresql9/data >logfile 2>&1 &
Verificar el servicio
$> netstat -nltp | grep 5432
Crear base de datos de prueba
$> /opt/postgresql9/bin/createdb test
Ejecutar el prompt de postgresql
$> /opt/postgresql9/bin/psql test
test=#
test=#
test=#
test=#

create table cliente(id INT, nombre varchar(150));


INSERT INTO cliente(id,nombre) VALUES (1,'pepito');
COMMIT;
SELECT * FROM cliente;

Salir de la consola de postgresql


Presionar Ctrl+d
Nota:
------------------------------------------------------------------------Si por ejemplo hubiese querido instalar el mdulo de python para postgresql necesi
taba primero instalar python-devel
$> yum -y install python-devel
y en el configure habilitar la opcin --with-python
$> ./configure --prefix=/opt/postgresql9 --with-python
Si el make falla (libreria dependiente, paquete fuente, etc) ; ver los errores
Comprobamos la instalacin en
/opt/postgresql9
Configurar la hora del sistema y del BIOS
###############################################################
Configurar la zona horaria
CentOS 6

-----------------------------------------------------------$> zic -l America/Lima

$> tzselect
2
37
1
Verificamos la hora del sistema
$> date
dom ene 19 13:10:49 PET 2014
---> PET zona horaria
Verificamnos la hora del bios
$> hwclock
dom ene 19 08:10:31 PET 2014
Veremos si las horas del sistema y la del bos estn sincronizadas
Configuracin de hora del bos
$> hwclock --set --date="20140119 13:10"
Sincronizar la hora del reloj con la del sistema
$> hwclock -s
Verificar la hora del sistema
$> date
Cambiar la hora del sistema
$> date --set="20140119 13:10"
Sincronizar la hora del sistema hacia la hora del bos
$> hwclock --systohc
* Modo grfico
$> yum -y install system-config-date
$> system-config-date
CentOS 7
--------------------------------------------------------Ver la configuracin actual de la zona horaria
$> timedatectl
Ver ayuda de timedatectl
$> timedatectl --help
Listar las zonas horarias
$> timedatectl list-timezones
Definir la zona horaria local a Buenos Aires
$> timedatectl set-timezone America/Argentina/Buenos_Aires
$> timedatectl
$> date
Definir zona horaria a Lima
$> timedatectl set-timezone America/Lima

Definimos la hora y fecha del sistema


$> timedatectl set-time "2014-10-01 20:10:00"
Sincronizar hora del sistema con del firmware
$> hwclock --systohc
Ver hora del firmware
$> hwclock
Configurar un cliente y servidor NTP
############################################################################
Sincroniza la hora del sistema con un servidor a travs del protocolo UDP
puerto 123
Instalar el cliente NTP
------------------------------------------$> yum -y install ntpdate
Sincronizar la hora local con un servidor de tiempo
$> ntpdate 0.br.pool.ntp.org
$> date
$> hwclock
$> hwclock --systohc
Configurar el cliente NTP
-------------------------------$> vim /etc/ntp.conf
(agregar por la linea 21, aparte hay que darle salid
a a internet al equipo al puerto UDP 123) puerto 123 UDP)
20:server 0.br.pool.ntp.org
Deshabilitar el servicio chronyd
$> systemctl disable chronyd
Habilitar arranque automtico de ntpdate
$> systemctl enable ntpdate
Comprobar la sincronizacin automtica
$> systemctl restart ntpdate
$> systemctl status ntpdate
Configurando como servidor
------------------------------------------$> yum -y install ntp
$> vim /etc/ntp.conf
(agregar por la linea 21, aparte hay que darle salid
a a internet puerto UDP 123)
server 0.br.pool.ntp.org
Iniciamos el servicio de ntp
$> systemctl start ntpd
Verificar el socket del servicio
$> netstat -nlup | grep 123
Habilitar arranque automtico de ntpd
$> systemctl enable ntpd
Deshabilitar arranque de ntpdate

$> systemctl disable ntpdate


* Habilitar el acceso en el firewall
Modo consola
##############################################################################
Crear una regla permanente para habilitar servicio ntp
$> firewall-cmd --permanent --zone=public --add-service=ntp
Reinicia el firewall
$> firewall-cmd --reload
* Comprobar las reglas del firewall, si est abierto ntp
$> iptables -S | grep 123
Lista servicios del firewall
$> firewall-cmd --list-services
Modo grfico
#########################################################################3
Instalar firewall-config (Herramienta Grfica para configurar firewalld de CentOS
7)
$> yum -y install firewall-config
Ejecutar como root
$> firewall-config
Seleccionamos a la izquierda zona "public"
Marcamos a la derecha "ntp"
Luego archivo--> Salir
* Comprobar las reglas del firewall, si est abierto ntp
$> iptables -S | grep 123
Con esta configuracin nuestro servidor puede
ser usado como servidor de tiempo para la LAN
(Programacin de Tareas con CRON y AT)
################################################################################
############
Programar tareas
$> crontab -e
# Minuto Hora

DiaMes

Mes

DiaSemana

Comando

# Ejecutar tarea todos los dias a la 1 a.m.


0
1
*
*
*
date>>/root/lafecha
# Ejecutar tarea todos los dias cada 15 minutos
*/15
*
*
*
*
date>>/root/lafecha
# Ejecutar tarea cada 15 minutos entre las 2 y 4 p.m.
*/15 14-16 *
*
*
date>>/root/lafecha
# Ejecutar tarea cada 15 minutos todos los dias a la 2 y a las 4 p.m..
*/15 14,16
*
*
*
date>>/root/lafecha
# Ejecutar tarea a las 0 horas del primer dia del ao
0
0
1
1
*
date>>/root/lafecha

# Ejecutar tarea a las los dias domingo del mes a las 11 p.m.
0
23
*
*
7
date>>/root/lafecha
# Ejecutar tarea los lunes a las 3 p.m. y Miercoles a las 5 p.m.
0
15
*
*
1
date>>/root/lafecha
0
17
*
*
3
date>>/root/lafecha
$> crontab -l visualiza las tareas del usuario
* crear un script automatizado
########################################################3
$> yum -y install php-cli
$> vim /usr/bin/hora
#!/usr/bin/env php
<?php
system("date >> /root/lahora");
$> chmod 755 /usr/bin/hora
$> hora
$> cat /root/lahora
$> crontab -e
# programar tarea hora cada 3 horas
0 */3 * * * hora
Verificar la ejecucion de tareas
-------------------------------------------------------$> less /var/log/cron
$> tail -f /var/log/cron
Cron define unos directorios para las tareas del sistema
cron.hourly/ scripts se ejecutan cada hora
cron.daily/
scripts se ejecutan cada dia
cron.weekly/ scripts se ejecutan cada semana
cron.monthly/ scripts se ejecutan cada mes
Programar script a nivel de sistema
$> cd /etc/cron.daily
$> vim tarea
#!/bin/bash
.....
....
.....
exit 0
$> chmod 755 tarea
Programar tareas No repetitivas
-----------------------------------------------------------------------$> yum -y install at
$> systemctl start atd
$> systemctl enable atd
$> systemctl status atd
Ej :Programar una tarea a las 23 horas
$> at 23:00
at> init 0
Crtl + d

Mostrar lista de tareas programadas con at


$> atq
Borrar una tarea programada
$> atrm 1
$> atq
SSH (Secure Shell) Cliente
###############################################################################
Programa servidor
--------------------------------------------------$> yum -y install openssh-server
$> systemctl start sshd
$> systemctl enable sshd
Programa cliente
--------------------------------------------------------------$> yum install openssh-clients
$> ssh usuario@host
(se conecta al servidor host con un usuario en
un determinado puerto)
$> ssh alumno@192.168.130.163 (cuando no hay puerto por defecto es 22)
* Si no se puede conectar como alumno al servidor remoto
----------------------------------------------------------- La clave esta mal
- No existe el usuario alumno en el servidor remoto
- El usuario alumno est restringido a iniciar sesin
- El servicio est caido
- El firewall local no permite la conexin
* Si el firewall local no permite conectar, habilitar puerto 22 TCP
$> firewall-cmd --zone=public --add-service=ssh
* Comprobar el puerto TCP
$> iptables -S | grep 22
Si el usuario no existe en el servidor remoto
* Crear usuario alumno en el servidor remoto
$> ssh root@serverX
$> useradd -md /home/alumno alumno
$> passwd alumno
Ahora conectarse como alumno a su propio host
$> ssh alumno@pcX
$> id
Saber que sesiones de ssh estan abierta
---------------------------------------------------------Ver desde que Ip estn abiertas las sesiones
$> who
Saber que procesos estn ejecutando las sesiones abiertas
$> w
$> ssh 192.168.130.163 (cuando sno se especifica usuario intenta conectarse
como el usuario actual)
$> ssh -p 666 root@192.168.130.163 (se conecta al servidor 192.168.130.163
como root en el puerto 666)

Ejecucion Remota de un comando


$> ssh usuario@host comando
$> ssh root@192.168.130.163 date (el date se ejecuta en el servidor remoto)
$> ssh root@192.168.130.163 poweroff (apaga el servidor remoto)
Forwarding del modo grfico
------------------------------------$> ssh -X 192.168.130.163
$> system-config-printer (Ejecuta la utilidad de impresoras del servidor remoto
)
SCP (Secure Copy)
--------------------------------------------$> yum install openssh-clients
Sirve para copiar un archivo local a un servidor remoto o al reves
$> scp arhivolocal usuario@host:rutadedestino
Ej: archivo local a servidor remoto
----------------------------------------$> scp /etc/hosts root@192.168.130.163: (cuando no se pone la ruta de
destino se copia en la carpeta de
trabajo del usuario)
$> scp /etc/hosts root@192.168.130.163:/root (equivalente al anterior)
$> scp -r /etc 192.168.130.163:/tmp (copia el directorio /etc local al
servidor remoto como el usuario actual)
Ej: archivo remoto a ruta local
----------------------------------------$> scp root@192.168.130.163:/etc/hosts /tmp (copia el /etc/hosts remoto a
el /tmp local)
$> scp -r 192.168.130.163:/etc /tmp (copia el directorio remoto al /tmp local
$> scp -P 666 192.168.130.163:.bash_history historial
(copia el bash_history del usuario actual que esta en el servidor
remoto; usando el puerto 666 en el directorio local actual y lo renombra como hi
storial)
Servidor SSH
-----------------------------------------------------------------------------Viene instalado por defecto en todos los CentOS
$> vim /etc/ssh/sshd_config (agregamos al final)
Port 666
----> (cambia el puerto por defecto del ssh de 22 a 666)
AllowUsers alumno (por defecto todos los usuarios con bash se pueden
conectar remotamente; con este parametro se restringe
los usuarios que pueden inicar una sesion remota)
* Permitir en el selinux el nuevo puerto del ssh
--------------------------------------------------------------$> yum -y install policycoreutils policycoreutils-python
Listar los puertos y contextos asociados
$> semanage port -l

Ver el valor del contexto del puerto ssh


$> semanage port -l | grep ssh
Cambiar el contexto del puerto por defecto de ssh para agregar
el puerto 666 adems del 22
$> semanage port -a -t ssh_port_t -p tcp 666
Habilitar en el
$> firewall-cmd
$> firewall-cmd
$> firewall-cmd
$> firewall-cmd

firewall el puerto 666


--permanent --zone=public --add-port=666/tcp
--reload
--list-ports
--list-services

* Verificar los puertos abiertos y reglas de filtrado en el firewall


$> iptables -L -n
* Ver las reglas generadas
$> iptables -S
$> systemctl restart sshd
$> systemctl enable sshd
Verificar el puerto del servicio ssh
$> netstat -nltp | grep 666
Prueba de cliente
---------------------$> ssh root@localhost
(no funciona)
$> ssh -p 666 root@localhost (no funciona)
$> ssh -p 666 alumno@localhost (si funciona)
$> vim /etc/ssh/sshd_config
#Port 666
#AllowUsers alumno

(comentar las lineas agregadas)

$> systemctl restart sshd


Monitoreo del SSH
------------------------------------------------$> tail -f /var/log/secure
Saber las ultimas sesiones abiertas
$> last
Ver las sesiones abiertas
$> who
Ver las sesiones abiertas (locales y remotas) y que comando se esta ejecutando
$> w
RSYNC ( Copia incremental Segura )
-------------------------------------------------------------------------------$> yum -y install rsync
Ejecucion Local
$> mkdir /backup

1era ejecucin de rsync, realiza una copia completa desde /etc a /backup/etc
$> rsync -avz /etc /backup
$> mkdir /etc/prueba
$> touch /etc/pruebita
2da ejecucin de rsync, solo se copiaran archivos nuevos y modificados desde /etc
a /backup/etc, archivo borrado en el origen no se sincronizan
$> rsync -avz /etc /backup
$> rm /etc/pruebita
3ra Ejecucion queremos que archivos borrados tambin se sincronizen
$> rsync -avz --delete /etc /backup
Ejecucin remota (Trabaja con SSH)
-----------------------------------------------------------------------------$> mkdir /backupremoto
$> rsync -avz 192.168.130.X:/etc /backupremoto
* Creacin de Script de backup
$> cd
$> vim backup-etc-rsync
#!/bin/bash
# copia imagen del directorio
rsync -avz --delete 192.168.130.X:/etc /backupremoto
# empaquetado diario
cd /backupremoto
FILE=etc-$(date +%Y-%m-%d).tgz
tar -zcvf $FILE etc
$> chmod 755 backup-etc-rsync
$> ./backup-etc-rsync
Clave compartida en SSH
################################################################################
#############
Primero generar la calve publica en el servidor de origen donde se ejecuta el rs
ync
$> ssh-keygen -tdsa
(dar enter enter enter)
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
b6:f9:93:e1:9a:3a:ff:fd:34:e5:b4:1d:bf:13:fe:75 root@localhost.localdomain
You have new mail in /var/spool/mail/root
Copiar la clave publica generada al servidor remoto donde queremos acceder sin c
ontrasea
$> cd /root/.ssh
$> scp id_dsa.pub 192.168.130.X:
Loguearse en el servidor remoto

$> ssh 192.168.130.X


Copiar la clave publica en lista de keys autorizados
$> cat id_dsa.pub >> /root/.ssh/authorized_keys
Salir de sesin
$> exit
Loguearse en el servidor remoto (no debe pedir contrasea)
$> ssh 192.168.130.X
$> exit
$> ./backup-etc-rsync
******* Programando el backup en cron
$> crontab -e
# Programando la tarea todos los dias a las 11 p.m.
0 23 * * * /root/backup-etc-rsync