lunes, 26 de noviembre de 2007

FTP Anónimo



Tanto en Solaris 10, como en OpenSolaris hay algunos cambios en cuanto a la generación de un servidor FTP acotado para el acceso permitido de cualquier usuario sin cuenta en nuestro sistema.

Por defecto el demonio que nos permite ejecutar el servidor FTP (WU-FTP) estará activo y controlado por SMF.

# svcs -a | grep ftp
online 15:28:42 svc:/network/ftp:default

Lo primero que vamos a realizar es crear un $HOME para el usuario ftp, asi:

# mkdir -p /export/ftp/{pub,bin,dev,etc,usr/lib}

Una vez realizado, copiamos el binario del comando "ls" y le asignamos los permisos necesarios:

# cp /usr/bin/ls /export/ftp/bin
# chmod 111 /export/ftp/bin/ls

Solo nos queda copiar a ese path las librerias necesarios para le ejecución de dicho binario:

# cp /usr/lib/ld.so* /export/ftp/usr/lib
# cp /usr/lib/libc.so.1 /usr/lib/libdl.so.1 /export/ftp/usr/lib
# cp /usr/lib/libintl.so.1 usr/lib/libw.so.1 /export/ftp/usr/lib
# cp /usr/lib/nss*.so.1 /export/ftp/usr/lib
# cp /usr/lib/libnsl.so.1 /export/ftp/usr/lib
# cp /usr/lib/straddr.so /export/ftp/usr/lib

Y los correspondientes ficheros de configuración:

# cp /etc/passwd /etc/group /etc/netconfig /export/ftp/etc
# cp /etc/nsswitch.conf /export/ftp/etc

Con su asignación correcta de permisos:

# chmod 555 /export/ftp/usr/lib/*
# chmod 444 /export/ftp/etc/*
# chmod 555 /export/ftp/usr/lib
# chmod 555 /export/ftp/usr
# chmod 555 /export/ftp/bin
# chmod 555 /export/ftp/dev
# chmod 555 /export/ftp/etc
# chmod 755 /export/ftp/pub
# chmod 555 /export/ftp

Es en este momento cuando creamos el usuario ftp con acceso anónimo al sistema por este procolo TCP.

# vi /etc/passwd
ftp:x:30000:30000:Anonymous FTP:/export/ftp:/bin/false

# vi /etc/shadow
ftp:NP:6445::::

Y por ultimo securizamos todo el $HOME:

# chown -R root /export/ftp

Hemos conseguido un acceso anónimo real a nuestro servidor FTP, completamente acotado en el PATH que hemos reservado (/export/ftp) y además de forma enjaulada ya que nunca podra subir directorios por el arbol de directorios.

jueves, 15 de noviembre de 2007

III Jornadas COPLA



Como miembro activo de la Comunidad OpenSolaris en Castellano, aprovecho este post para anunciar la presentación que realizé el pasado viernes 23/11/2007 en la tercera edición de las jornadas COPLA de la Universidad de Alicante.

La presentación ya esta disponible tanto en este blog como la sección de Orange Books del portal de la Comunidad Hispana.

OpenSolaris - Un sistema operativo para el futuro

lunes, 5 de noviembre de 2007

Zonas y Contenedores bajo ZFS



Una de las ventajas de crear zonas y/o contenedores bajo el nuevo sistema de ficheros ZFS, reside que nos podemos apoyar en la creación de sanpshot y clones para mover un contenedor de un sistema real (anfitrión) a otro.

La zona global origen tiene como hostname "opensolaris" y el sistema anfitrión destino se denomina "opensolaris2".

Partimos de una zona de tipo BrandZ acotada en cuanto al consumo de memoria y swap:

# hostname
Opensolaris

# zonecfg -z zonelx info
zonename: zonelx
zonepath: /opt/zones/zonelx
brand: lx
autoboot: false
bootargs: -m verbose
pool:
limitpriv:
scheduling-class:
ip-type: shared
net:
address: 10.73.130.249/24
physical: pcn0
capped-memory:
physical: 256M
[swap: 128M]
[locked: 50M]
rctl:
name: zone.max-swap
value: (priv=privileged,limit=134217728,action=deny)
rctl:
name: zone.max-locked-memory
value: (priv=privileged,limit=52428800,action=deny)

y de los siguientes filesystems ZFS:

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 1,57G 380M 26,5K none
mypool/zonas 1,57G 380M 1,57G /opt/zones/

Lo primero que hacemos es "desenganchar" del sistema anfitrión origen, el contenedor que vamos a mover:

# zoneadm -z zonelx detach

Posteriormente realizamos un snapshot de dicho filesystem sobre el que reside el contenedor denominado zonelx.

# zfs snapshot mypool/zonas@Snap1


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 1,34G 2,94G 24,5K none
mypool/zonas 1,34G 2,94G 1,34G /opt/zones/
mypool/zonas@Snap1 0 - 1,34G -

Una vez que tenemos la imagen como resultado de la snapshot, realizamos un backup de la misma a un fichero local.

# zfs send mypool/zonas@Snap1 > /opt/zones/zonelx.Backup1 &

Y ese mismo fichero resultado del backup lo llevamos por ssh al anfitrión destino.

# scp /opt/zones/zonelx.Backup1 un38134@10.73.130.247:/export/home/un3813 &


Una vez que estamos en el sistema destino, unicamente creamos el pool ZFS deniminado "mypool" y sobre el realizamos la importación del fichero resultado del backup de la snapshot realizado en el sistema origen.

# hostname

opensolaris2

# df -h

Sistema de archivos tamaño usados aprovechar capacidad Montado en
/dev/dsk/c0d0s0 5,4G 3,8G 1,6G 71% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 811M 856K 810M 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
/usr/lib/libc/libc_hwcap1.so.1
5,4G 3,8G 1,6G 71% /lib/libc.so.1
fd 0K 0K 0K 0% /dev/fd
swap 810M 40K 810M 1% /tmp
swap 810M 28K 810M 1% /var/run
mypool 1,9G 24K 1,9G 1% /mypool

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 91K 1,94G 24,5K none

# zfs receive mypool/zonas < /export/home/un38134/zonelx.Backup1

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 1,34G 2,94G 24,5K none
mypool/zonas 1,34G 2,94G 1,34G /opt/zones/
mypool/zonas@Snap1 0 - 1,34G -

Una vez importado el sanpshot ZFS podemos crear el contenedor, asi:

# zonecfg -z zonelx

zonecfg:zfszone2> create -a /opt/zonas/zonelx
zonecfg:zfszone2> exit

Una vez creada la zona, la podemos "enganchar" en el anfitrión destino.

# zoneadm -z zonelx attach

# zoneadm list -iv

ID NAME STATUS PATH BRAND IP
0 global running / native shared
- zonelx installed /opt/zones/zonelx lx shared

Una vez creada, la podemos arrancar y acceder a ella.

# zoneadm -z zonelx boot


# zlogin zonelx
[Conectado a la zona 'zonelx' pts/2]

Welcome to your shiny new Linux zone.

- The root password is 'root'. Please change it immediately.

- To enable networking goodness, see /etc/sysconfig/network.example.

- This message is in /etc/motd. Feel free to change it.

For anything more complicated, see:
http://opensolaris.org/os/community/brandz/

You have mail.
# uname -a
Linux zonelx 2.4.21 BrandZ fake linux i686 i686 i386 GNU/Linux


# ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:0C:29:2D:04:A0
inet addr:10.73.130.249 Bcast:10.73.130.255 Mask:255.255.255.0
UP BROADCAST RUNNING SLAVE MTU:1500 Metric:1

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING SLAVE MTU:8232 Metric:1

Luego de una forma sencilla y con muy poco tiempo de perdia de servivio hemos movido un contenedor (con toda su configuración) de un sistema anfitrión inicial a otro destino.