Entendiendo el comando sed III

En los capítulos anteriores les presentaba el comando sed y les explicaba algunos ejemplos para comprender sobre que líneas tienen efecto los comandos aplicados. Hoy les comentaré las funciones que permite sed.

Entre las funciones más utilizadas por sed se encuentran las que permiten borrar líneas (d de delete), las de sustitución (s de substitute), imprimir líneas (p de print) o las que permiten leer líneas (r de read).

El siguiente ejemplo imprimirá por pantalla el rango de líneas que comprende desde la primera a la quinta:

 sed -e 1,5p fichero_datos

El siguiente ejemplo borrará el rango de líneas comprendido entre la tercera y la quinta y desde la décima en adelante:

 sed -e '3,5d' -e '10,$d' fichero_datos

En el anterior capítulo os comentaba el uso del carácter exclamación. Si no queremos escaparlo con el carácter ( \ ) podremos delimitar los comandos aplicados por sed por comillas simples ( ' ):

 sed -e '/^$/!d' dias
sed -e /^$/\!d dias

Hasta ahora hemos visto, los borrados y las impresiones. Una de las funciones más típicas que nos permite sed, es la que consiste en sustitución de patrones.

 sed 's/suspenso/aprobado/'

El anterior comando sustituye la primera aparición de "suspenso" por la cadena "aprobado" en cada línea donde se encuentre "suspenso". Si queremos que se cambien todas las apariciones de "suspenso" en todas las líneas, tendremos que usar el flag ( g ).

 sed 's/suspenso/aprobado/g'

El siguiente ejemplo, remplazará el carácter "é" por la cadena "é", excepto en las líneas que van desde la 1 a la 3:

 sed -e '1,3!s/e/´/' fichero_datos

Si quisieramos que la sustitución solo se hiciera entre las líneas 1 y 3, deberíamos quitar la exclamación ( ! ).

Por último un ejemplo bastante interesante. Si quisieramos añadir el contenido de un fichero, cada vez que encontrasemos una combinación de caracteres, podríamos utilizar el siguiente comando:

 sed '/cadena/r fichero_carga' fichero_datos




stumbleupondeliciousredditTechnoratiFacebookTwitter

Entendiendo el comando sed II

En el articulo anterior les hice una primera presentación del comando sed. Hoy voy a seguir contandoles cosas acerca de este magnífico editor de textos (Stream Editor).

En principio las funciones aplicadas por sed se aplican a todas las líneas de un fichero. Es posible delimitar dichas acciones a una sola línea, a un rango de líneas, a la última línea, o a las líneas identificadas por una expresión regular:

Si se pone un número o el carácter $ , la función se aplica sobre la línea indicada. El carácter $ representa la última línea del fichero:

  sed -e \$d fichero_prueba #Borra la última línea
sed -e 1d fichero_prueba #Borra la primera línea

Si se ponen dos números, la función se aplicará a las líneas cuyo número esté en el rango establecido:

  sed -e 3-6d  fichero_prueba #Borra desde la línea 3 a la 6 incusive

Si se pone una expresión regular, la función se aplicará sobre las líneas que encajen con la expresión regular (Las expresiones regulares en sed, se fijan entre barras del 7 /

 sed -e /^$/d fichero_datos #Borra líneas vacias

Si se ponen 2 expresiones regulares, éstas definirán parráfos. El primer parráfo comenzará cuando se encuentre la primera expresión regular, y abarcará hasta que se encuentre la segunda expresión regular. Acabado el primer parráfo, el segundo comenzará con la primera línea en que se encuentre la primera expresión regular, y así sucesivamente:

 cat fichero_datos
lunes
martes
miercoles
jueves
viernes
sabado
domingo
sed /n/,/vier/d fichero_datos

El ejemplo anterior tomará como primer párrafo, las líneas de lunes a viernes y como segundo la línea domingo.

Un carácter de exclamación ( ! ), después de establecer el rango de líneas en el que queremos que se aplique la función indicada a sed, hará que ésta se aplique justamente al rango de líneas complementario al que tomaría sin ese carácter:

 sed /^$/\!d fichero_datos  #Borraría todas las líneas NO vacias

Ojo, para sed, el carácter $ significa última línea, pero para las expresiones regulares, el carácter $ significa final de línea.


Deckerix



stumbleupondeliciousredditTechnoratiFacebookTwitter

Entendiendo el comando sed

sed es un editor no interactivo. Es útil si se va a realizar varias veces modificaciones sobre uno o varios ficheros.

Cuando digo que sed es un editor no interactivo me refiero a que los cambios no se realizan sobre el fichero en sí, si no que los cambios aparecen en la salida estandar. Para entender mejor esto, imaginamos que con nuestro editor de textos favorito borramos la línea 3 de un fichero y posteriormente borramos la línea 15 actual. Habremos borrado las líneas 3 y 16 del fichero origen. Esto se podría haber evitado habiendo borrado primero la 16 y luego la 3.

Con sed, la numeración de las líneas no cambia al borrar una, ya que estas se numeran inicialmente. Podríamos haber resuelto el problema anterior de la siguiente manera:

 sed -e '3d' -e '15d' fichero_datos

sed aplica todos los comandos de edición a cada línea de texto de un fichero. Empieza aplicando todos los comandos a la primera línea, luego todos a la segunda, y así sucesivamente.

 sed -f fichero
Toma los comandos de edición del fichero que sigue al flag -f
 sed -e comando
Ejecuta el comando
 sed -e comando -e comando
Ejecuta los comandos indicados
 sed -f ficheroDeComandos ficheroDatos1 ficherosDatos2
Ejecuta los comandos que se encuentran guardados en el fichero
ficheroDeComandos sobre los ficheros
ficheroDatos1, ficheroDatos2, etc...

Si no se nombran los ficheros, sed filtra la entrada estándar. Si se nombran los ficheros, sed manda a la salida estándar el resultado de aplicar los comandos sobre las líneas de dichos ficheros.


deckerix


stumbleupondeliciousredditTechnoratiFacebookTwitter

20 Modings inolvidables

hey ps diggiando un poco encontre este articulo, muy cool, en mi mencio honorifica esta este case bien cool de una choper, que como dice el dude del post ojala viniera con la modelito:




Fuck turbonet, Fuck Telgua !!!! [Actualizada]

Bueno eh aqui otro de mis problemas, la empresa por exelecia de internet aqui es telgua en su divicion de turbonet, (que oh sorpresa es del señor dueño de hellmex) bueno el probla es este mi mania geek no deja de moverse ni un segundo por eso mismo estoy empesando a arruinar routers y cosas asi XD ya probe con un router telefonica y pues la verdad no ay ningun problema fue bastante sencillo, ahora, en turbonet el problema es que a la hora de adquirir tu equipo, no tenes acceso a la clave de admin de tu router, esto quiere desir que no podes programarlo a tu gusto, y para procesar un cambio de clave pues tenes que llamar a servicio al cliente, esperar que te contesten, hacer el pedido y esperar aproximadamente 2 dias para que se pueda cambiar tu clave wireless, esta bajo la politica de la empresa no darle la clave de acceso a NADIE, que mierdas, la excusa tonta del operador que me atendio es que la gente aveces toca las claves de estos y que ps al final no se recuerdan de ellas y llaman a servico al cliente (y como se aburrieron de atender a la gente ps desidieron ya no proporcionar claves de acceso) y que ya no se pueden arreglar despues, pero segun algunos conosidos estos routers ya vienen configurados de fabrica con la programacion de telgua, asi que con un simple reseteo del router todo se arregla, asi que desidi googlear un poco y ps la comunidad geek de guatemala ya proveo las claves mas comunes utilizadas por estos pelmasos:

-------------------------------
User Password
-------------------------------
admin ---------- admin
root ------------ root
admin ---------- !T3lgu@
root ------------ !T3lgu@
Administrator -- !T3lgu@
-------------------------------


**********************

los nuevos routers ahora tienen como pass default:

C1@r0 y c1@r0

**********************


3nj0y!!!


Conky, .conky-conf, Screen Shots

Bueno hoy le voy a hablar de conky, no se si alguien ya lo habia conosido pero en fin, hare las de todo blogger le pondre una breve reseña, conky es un monitor de sistema muy muy ligero basado en torsmo y su programacion es en phyton, la verdad no es muy dificil de configurar solo ay que tener lso conosimientos basicos en colores, un poco de estetica, busqueda en google si no queres crear tu propio conky ;) ps yo lo conosi gracias a DSL que en realidad trae torsmo pero me recorde que en un tread del foro hackerss vi un screeshot del desktop del bucio y vi al all mighty conky en accion, luego el puso un su post de como usarlo y todo, tons me meti grueso en el asunto y descubri pa servia cada cosa y llegue al punto que me gusta mi conky ta esteticon y convina con mis wallpapers (Izquierda Gnome, ;)












stumbleupondeliciousredditTechnoratiFacebookTwitter

Una breve descripcion de las distribuciones mas famosas de linux

Bueno ps googleando un poco me encontre con esta lista de descripciones de algunos de las distros de linux, la mayoria estan en el top 100 de las distribuciones mas populares de linux.

tambien les dejo este mapa de las distribuciones de linux

- RedHat: una de las más importantes, ha llegado a ser tan importante que ha pasado a ser comercial, las últimas versiones son de pago. Sin embargo en su larga vida han aparecido otras distribuciones basadas en Red Hat y que también utilizan el sistema de paquetes rpm, como Mandrake y fedora. Su instalación y manejo son bastante sencillos.

- Fedora: Red Hat ya no es gratis, pero el equipo de red hat no podía dejarnos sin más, en colaboración con un grupo de usuarios de red hat que estaba desarrollando paquetes para red hat al estilo de Debian han creado fedora, una distribución totalmente libre creada por usuarios, bajo la supervisión de los ingenieros de red hat. De momento es experimental, pero puede llegar a convertirse en una gran distribución como es Debian. Nótese que red hat significa sombrero rojo y fedora sombrero de fieltro.

- Suse: otra que también usa el sistema de paquetes rpm, esta además tiene el instalador Yast, que es parecido al "agregar o quitar programas" de windows pero mucho mejor, con conexión a internet puedes buscar el programa que quieres e instalarlo, todo con Yast. Es fácil en su manejo e instalación, pero es una de las distribuciones que más problemas tiene con los drivers, aunque cada vez menos. Usa mucho software propietario.

- Debian: Una gran distribución completamente libre y sin ánimo de lucro, la distribución por excelencia de la GNU. También hay bastantes distribuciones basadas en Debian, como knoppix o ubuntu. Utiliza el sistema de paquetes .deb (man apt) que permiten que se actualice todo tu sistema y programas instalados a la última versión con sólo teclear un mandato, también puede manejar paquetes rpm, lo que te hace la vida más fácil, sin embargo la instalación y configuración previas pueden no ser aptas para newbies, por ejemplo es recomendable tener un buen conocimiento del hardware que tienes antes de instalar debian.

- Ubuntu: Algunos desarrolladores de Debian decidiero hacer una distribución más usable paralelamente, el resultado es ubuntu, una distribución que cabe en un CD y que dispone de una versión Live-CD, con lanzamientos de nuevas versiones cada seis meses y bastante focalizada a conseguir la compatibilidad con todo el hardware que sea posible. Tiene una aplicación gráfica para instalar aplicaciones que embebe a apt y que recuerda a Yast. Por defecto la cuenta de superusuario tiene una existencia un tanto precaria, lo que puede hacerla una distribución recomendable para los que llegan desde windows pero poco recomendable para los que quieren aprender el funcionamiento (más habitual) de linux.

- Gentoo: Su principal virtud es la optimización y control del sistema que deja en las manos del usuario, podiendo escoger los flags y cfalgs que quieras usar para la compilación de los paquetes, con la consiguiente ganancia de velocidad. El sistema de paquetes está basado en FreeBSD, pero lo han mejorado, es el portagee que hace poco han migrado a FreeBSD. Otra virtud es el tema de las dependencias que se solucionan en un momento ya que trabaja de forma muy parecida a debian y su apt-get pero en lugar de con binarios trabaja directamente con las fuentes y lo compila para tu ordenador especificamente. Muy configurable (incluso opciones de compilación), tardas mucho en instalar porque incluye compilación, la ventaja es que los programas quedan optimizados para tu máquina. Perfecta para quines buscan desafíos, debian les parece poco y pueden dejar el ordenador encendido durante horas para que instale lo que se quiera instalar a su (lento) ritmo, no recomendada para novatos, entre otras cosas por la carencia de asistentes para labores de configuración.

- Slackware: Esta distribución en su origen pretendía ser una distribución estable y de fácil manejo, gracias a su estabilidad ahora se utiliza en muchos servidores, sin embargo es muy configurable y esto puede desesperar a más de un newbie, un usuario experimentado en cambio disfrutará haciendo su slackware más personal. Es una distribución que te obliga a aprender cómo funciona GNU/Linux. Utiliza un sistema de paquetes bastante rudimentario, los .tgz.

- Mandriva: (antes llamada mandrake) una buena distribución para los que se inician en GNU/Linux por ser la más parecida a windows, en sus virtudes y defectos. Facilita la instalación incorporando un reparticionador del disco duro y drivers para gran cantidad de hardware. El manejo es muy sencillo también, sin embargo usuarios procedentes de otras distribuciones pueden tener quebraderos de cabeza al cambiar el nombre de algunos mandatos, así mismo un usuario de mandrake tendrá problemas al pasar a otra distribución.

- Knoppix: otro live CD basado en Debian, sin los defectos de linex, actualizada cada poco tiempo. Es alemana, pero tiene traducción al español sólo hay que seleccionar lang=es en el arranque.

- CentOS: (acrónimo de Community ENTerprise Operating System) es un clon a nivel binario de la distribución Red Hat Enterprise Linux, compilado por voluntarios a partir del código fuente liberado por Red Hat, empresa desarrolladora de RHEL.

- Linex: distribución de GNU/Linux extremeña, un live CD basado en debian, si puedes soportar que el navegador web se llame cristobal colón y el editor espronceda (con los correspondientes retratos por iconos) esta distribución puede ser una buena elección, ha ganado el premio softonic a la mejor distribución del año.

- GuadaLinex: Guadalinex es la distribución GNU/Linux coordinada por la Junta de Andalucía para facilitar el acceso de todos a un sistema operativo libre y gratuito. Distribución basada en debian.

- Mulinux: una de las distribuciones mínimas, ocupa poco espacio y gasta pocos recursos (la descarga son 2MB). No es necesaria su instalación ni lector de CDs puesto que puede arrancar desde disquettes y funcionar con la RAM, sin embargo cada programa que queramos utilizar requerirá cargar un disquette más. En caso de que tengas menos de 5MB de RAM deberías probar smalllinux.

- LFS: Linux From Scratch, podríamos traducirlo como linux desde la rayadura, escógela si quieres rayarte (en realidad es linux desed cero). Si no te gusta ninguna de las distribuciones que ves todavía tienes una opción: hacer la tuya propia. LFS te proporciona instrucciones y ayuda para instalar linux partiendo diréctamente del código fuente de cada uno de sus paquetes. Sólo para usuarios muy avanzados.

- DeLi Linux: Especialmente diseñado para ordenadores antiguos, desde 486 a pentium mmx 166, si tu ordenador es más nuevo probablemente tengas problemas con los drivers. Hay cuatro disquetes diferentes de instalación dependiendo del método. Tiene bastantes utilidades, como un editor de texto, una hoja de cálculo, gcc, perl, php y algunas más.

- Rxart: Una distribucion privada Argentina basada en Debian, soporta todos los hardware usados en latinoamerica, incluyendo los modem genericos unicos distribuidos en Latinoamerica.

stumbleupondelicioussubmit to redditAdd to Technorati Favorites

Usando el javascript STM31 para un hover inteligente

Pues la verdad no soy un experto en esto son mis primeros pasos pero quiero compartirlos con ustedes, el codigo lo pueden encontrar en http://yosoygeek.site90.com/post_js.js espero que les guste, ustedes se preguntan y por que este menso no usa un "onmouseover" ps es simple, stm31 reconose los bordes de el browser, que quiere desir esto, que si esta la imagen hasta el fondo del browser esta aparece en el borde, pruebenlo ustedes.


Ejemplos de STM 31.JS





stumbleupondelicioussubmit to redditAdd to Technorati Favorites

Programas de reconosimiento de voz en linux, los principales programas para reconocimiento de voz

Pues navegando un poco me encontre con otra de la infinidad de utilidades q linux nos proporciona, esta es el reconocimiento de vos asta el momento los programas mas conosidos son el proyecto Simon la mision de este es sustituir al teclado y al mouse, esta enfocado en las personas con alguna discapacidad fisica, A diferencia de los seres humanos, programas automaticas tienen dificultades de reconocer lenguaje, por la razón de que estan trabajando tán exactamente.

Una software de procesamiento de lenguaje tiene que reconocer no solo fonemas singulares (las unidades más pequeñas del lenguaje humano) , sino tambien tiene que reconocer la distribución de las palabras.

Julius

Debido a que Julius en si es un programa decodificador de lenguaje, se puede hacer un reconosedor de voz de cualquier lenguaje si se obtiene el modelo de la acustica apropiado. Debido a esto julius depende fuerte mente de la acustica del lenguaje proporcionada, este programa adopta la acustica en el HTK en formato ascii.

Lamentable mente este gran programa solo esta disponible en ingles, slovenio, frances, thailandes, japones y algunos pocos lenguajes mas, pero no en español aun.

Sphinx-4

este esta programado completamente en java Sphinx-4 es de los mejores programas de reconosimiento de voz, fue creado con las colaboraciones del grupo Sphinx entre la universidad de carnegie mellon, los laboratorios de Sun Microsystems, el laboratorio de investigacion electrica de Mitsubishi (MERL por sus siglas en ingles) y Hewlett Packard (HP), con contribuciones de la Universidad de California en Santa Cruz (UCSC) y el instituto de tecnologia de Massachusetts (MIT).

stumbleupondelicious

Entrevista con 7 grandes Diseñadores graficos y bloggers

Bueno como siempre, fan del diseño grafico me encontre con este post lastima que esta en ingles espero que les interese tanto como ami:

(pongo solo los links para que le hechen un ojo ustedes,

Interviews : 7 Favorite Talented Bloggers Designers

1. Interview with Fabio Sasso
2. Interview with Kervin Brisseaux
3. Interview with Designer, Kyle Steed
4. Interview with photo manipulation designer Joan Charmant
5. Interview with designer & blogger Adelle Charles
6. Interview with graphic designer & illustrator Olli-Pekka Jauhiainen
7. Interview with Calvin Lee
..........................................................
8.Cristopher Ocana (muy pronto)


stumbleupondelicious

¿Que es el FSTAB?

El fstab es el archivo donde se guardan los diferentes datos sobre el montaje de los dispositivos físicos.
Pese a lo que mucha gente piensa, el fstab no es tan solo de Linux, si nos que se encuentra en diversas plataformas, como la plataforma BSD o la Solaris.

COMPONENTES DEL FSTAB

El fstab se compone de 6 secciones:

QUOTE
file system: Es el lugar donde se encuentra el dispositivo físico a montar, como por ejemplo
/dev/hda1, /dev/sda, etc.

mount point: Es el punto de montaje donde sera montado el dispositivo físico, este punto de montaje puede ser desde una carpeta del sistema como una carpeta creada por el usuario o el root, es decir, el punto de montaje es aquel que el usuario desee que sea.

type: Es el tipo de archivo con el que sera montado el dispositivo físico, este puede ser muy diverso, como por ejemplo, ext, swap, reiserf, etc.

options: Son las opciones con las que sera montado el dispositivo físico, existen muchas y diversas opciones. Las opciones mas usadas serán vistas mas adelantes en este mismo tutorial.

dump: Esta opcion solo puede poseer el valor 0 o 1, en ella se guardan los errores en tiempo de sistema que ha reportado el sistema de archivos. Al activarlo (1) se hará un backup con las opciones, creando backup por si surge algún tipo de problema, lo normal es tenerlo desactivado (0), ya que rara vez se produce un error.

pass: Esta opción al igual que la anterior tan solo puede poseer el valor 0 o 1. Si la activamos (1) el sistema realizara una pasada cada X desmontadas o si el dispositivo a sido desmontado incorrectamente para comprobar su integridad. En caso de estar desactivado (0), el sistema no realizara nunca ninguna pasada para comprobar la integridad del dispositivo físico, por ello es recomendable tenerlo en activado (1).


OPCIONES DEL FSTAB

Las opciones son especificadas en la sección numero 4: Options (al final del tutorial veremos ejemplos sobre lineas del fstab para montar diversos dispositivos como cd-roms o pendrives).

Las opciones mas usadas son las siguientes

QUOTE
defaults: Esta opción es la unión de las opciones rw,suid,dev,exec,auto,nouser y async.
rw: READ-WRITE. Con esto montamos la partición para que sea posible tanto leer como escribir en el dispositivo físico, esta opción es muy usada con dispositivos que permiten la escritura como por ejemplo los pendrive o los disquets, ya que sin esta opción, no podríamos guardar datos en dichos dispositivos.

ro: READ-ONLY. Con esta opcion hacemos que no se pueda escribir en el dispositivo, que tan solo se pueda leer.

noexec: Impide la ejecución de cualquier archivo en el dispositivo en el que esta opción sea activada, esta opción suele ser muy útil cuando en una misma maquina diversos usuarios tienen acceso a un mismo dispositivo y no queremos que estos puedan ejecutar archivos en los dispositivos, con esto ganamos en seguridad, ya que impedimos que los usuarios puedan ejecutar cualquier tipo de archivo “maligno” a través del cual lo que realmente quiere conseguir es escalar privilegios en el sistema, por ejemplo.

nodev: con esto impedimos que puedan usarse nodos de dispositivo en el sistema de archivos, es decir, con esta opción impedimos que se interpreten los dispositivos especiales de bloques y de caracteres presentes en el dispositivo.

dev: Opción contraria a nodev, es decir, al activar esta opción permitimos que puedan usarse nodos de dispositivo en el sistema de archivos, o, lo que es lo mismo, que se interpreten como tal los dispositivos especiales de bloques y de caracteres presentes en el dispositivo.

auto: Con esta opción hacemos que el dispositivo que la contenga sea iniciado SIEMPRE que se inicie el sistema, es decir, cada vez que este sea encendido.

no auto: Esta es la opción contraria a auto, con ella hacemos que el dispositivo no sea montado al iniciarse el sistema, y tan solo sera montado en el momento en el que le vayamos a dar uso, esta opción suele ser usada con dispositivos como las disqueteras, cd-roms, pendrives..., es decir, todos aquellos dispositivos que no es necesario que se monte con el arranque del sistema.

user: Permite a cualquier usuario del sistema montar o desmontar un dispositivo físico sin necesidad de ser root, esta opción es muy útil para dispositivos de uso frecuente, como cd-roms o disquetes.
uid=X: Con esta opción indicamos que tan solo el usuario o el grupo con el uid especificado tiene el control sobre los archivos del dispositivo.

async: Con esto hacemos que las operaciones que realicemos no se hagan de forma asíncrona, es decir, en el mismo momento en que las realizamos, si nos que pueden ser realizada mas adelante.

sync: Es la opción contraria a async, con esta opción conseguimos que todas las modificaciones que hagamos sean “in situ” es decir, realizadas en el mismo momento en que sean realizadas.


EJEMPLOS FSTAB

Ahora ya sabemos de que se compone el fstab así y como las opciones mas comunes que este suele tener vamos a ver un par de ejemplos, estos ejemplos serán el de un cd-rom así y como el de un pendrive.
Antes de nada decir que las secciones son separadas a través del tabulador, según vemos en el encabezamiento del fstab es así:

CODE
#


Muy bien, ahora pasemos a los ejemplos:

CD-ROM:

el cd-rom sera montado en /media/cdrom0, asi que suponemos que esa carpeta existe, si nos podéis montarlo en cualquier otra o crear esa misma carpeta.

CODE
#

/dev/hdd /media/cdrom0 iso9660 ro,user,noauto 0 0



aja, veamos como ha sido montado el cd-rom, para empezar el dispositivo físico se encuentra en /dev/hdd y sera montado en /media/cdrom0, el tipo sera iso9660, las opciones serán:

QUOTE
ro = solo lectura.

user=cualquier usuario del sistema puede montar/desmontar así como usar este dispositivo.

noauto= no sera montado de una ves con el sistema, es decir, sera montado solo cuando su uso sea necesario.


Después, dump esta desactivado al igual que pass, estas opciones ya han sido explicadas, asi que no volveremos a hacerlo.

PENDRIVE:


Ahora veremos como montar un pendrive, y este sera el ultimo ejemplo que realizaremos, suponemos que tenemos creada la carpeta pendrive en /mnt, esta vez no explicaremos las opciones usadas, simplemente os mostrare como esta montada en mi caso:

CODE
#
/dev/sda /mnt/pendrive auto rw,user,noauto 0 1


stumbleupondelicious

Conociendo el Sudo

Sudo

Sudo (superuser do) es una herramienta de sistema que permite a los usuarios realizar la ejecución de mandatos como superusuario u otro usuario de acuerdo a como se especifique en el fichero /etc/sudoers, donde se determina quien está autorizado. Los números de identidad de usuario y de grupo (UID y GID) reales y efectivas se establecen para igualar a aquellas del usuario objetivo como esté especificado en el fichero /etc/passwd.

De modo predeterminado sudo requiere que los usuarios se autentiquen así mismos con su propia clave de acceso (nunca la clave de acceso de root). Una vez que el usuario se ha autenticado, el usuario podrá utilizar nuevamente sudo sin necesidad de volver a autenticarse durante 5 minutos, salvo que se especifique lo contrario en el fichero /etc/sudoers. Si el usuario ejecuta el mandato sudo -v podrá refrescar éste periodo de tiempo sin necesidad de tener que ejecutar un mandato, en cuyo caso contrario expirará esta autenticación y será necesario volver a realizarla.

Si un usuario no listado en el fichero /etc/sudoers. trata de ejecutar un mandato a través de sudo, se registra la actividad en la bitácora de sistema (a través de syslogd) y se envía un mensaje de correo electrónico al administrador del sistema (root).

Historia.

Sudo fue inicialmente concebido en 1980 por Bob Coggeshall y Cliff Spencer del departamento de ciencia computacional en SUNY (State University of New York o Universidad Estatal de Nueva York), en Buffalo.

En 1985 se publicó el grupo de noticias net.sources una versión mejorada acreditada a Phil Betchel, Cliff Spencer, Gretchen Phillips, John LoVerso y Don Gworek. Garth Snyder publicó otra versión mejorada en el verano de 1986 y durante los siguientes cinco años fue mantenido con al colaboración de muchas personas, incluyendo Bob Coggeshall, Bob Manchek, y Trent Hein.

En 1991 Dave Hieb y Jeff Nieusma escribieron una nueva versión con un formato mejorado para el fichero /etc/sudoers bajo contrato con la firma consultora The Root Group, versión que posteriormente fue publicada bajo los términos de la Licencia Pública General de GNU (GNU/GPL).

Desde 1996 el proyecto es mantenido por Todd Miller con la colaboración de Chris Jepeway y Aaron Spangler.

Fichero /etc/sudoers

El fichero /etc/sudoers se edita con el mandato visudo, herramienta que a través de vi permite realizar cambios y verificar sintaxis y errores. Si se trata de modificar directamente /etc/sudoers, éste tiene permisos de solo lectura.

La sintaxis básica de una lista sería:

CODE
XXXX_Alias NOMBRELISTA = elemento1, elemento2, elemento3


La sintaxis básica de una regla sería:

CODE
[usuario, %grupo, NOMBRELISTA] [anfitrión] = (id de usuario a usar) mandatos


Se pueden definir Aliases y reglas. Los aliases permiten definir una lista de mandatos , una lista de usuarios, un alista de anfitriones o bien ejecutar como otros usuarios.

Cmnd_Alias.
CODE
Cmnd_Alias MANDATOSHTTPD = /sbin/service httpd restart, \
/usr/bin/vim /etc/httpd/conf.d/variables.conf, \
/usr/bin/vim /etc/php.ini


Lo anterior define una lista de mandatos que podrían utilizarse para reiniciar el servicio de httpd, modificar un fichero de configuración en la ruta /etc/httpd/conf.d/varables.conf y modificar el fichero

CODE
fulano ALL = MANDATOSHTTPD


Lo anterior define que el usuario fulano puede utilizar los mandatos de la lista MANDATOSHTTPD desde cualquier anfitrión.

User_Alias.
CODE
User_Alias USUARIOSHTTP = fulano, mengano, zutano


Lo anterior define una lista denominada HTTPUSERS, integrada por los usuarios fulano, mengano y zutano.
CODE
USUARIOSHTTP ALL = /usr/bin/vim


La regla anterior define que los usuarios que conforman la lista USUARIOSHTTP pueden utilizar el mandato vim desde cualquier anfitrión.

Host_Alias.
CODE
Host_Alias HOSTSHTTPD = 192.168.0.25, 192.168.0.26, 192.168.0.23


Lo anterior define que la lista HOSTSHTTPD está integrada por las 3 direcciones IP listadas anteriormente. Si además se añade la siguiente regla:
CODE
USUARIOSHTTPD HOSTSHTTPD = ADMINHTTPD


Lo anterior define que los usuarios de la lista HTTPDUSERS pueden utilizar los mandatos listados en ADMINHTTPD solamente si están conectados desde las direcciones IP listadas en HOSTSHTTPD.

Runas_Alias.

Si por ejemplo se quisiera que los usuarios de la lista USUARIOSHTTP pudieran además utilizar los mandatos ls, rm, chmod, cp, mv, mkdir, touch y vim como el usuarios juan, pedro y hugo, se requiere definir una lista para estos mandatos y otra para los aliases de usuarios alternos, y la regla correspondiente.

CODE
Runas_Alias CLIENTES1 = juan, pedro, hugo
Cmnd_Alias MANDATOSCLIENTES = /bin/ls, \
/bin/rm, \
/bin/chmod, \
/bin/cp, /bin/mv, \
/bin/mkdir, \
/bin/touch, \
/usr/bin/vim
USUARIOSHTTPD HOSTSHTTPD = (CLIENTES1) MANDATOSCLIENTES


Lo anterior permite a los usuarios definidos en USUARIOSHTTPD (fulano, mengano y zutano), utilizar los mandatos definidos en MANDATOSCLIENTES (ls, rm, chmod, cp, mv, mkdir, touch y vim) identificándose como los usuarios definidos en CLIENTES1 (juan, pedro y hugo) solamente si se realiza desde las direcciones IP listadas en HOSTSHTTPD (192.168.0.25, 192.168.0.26, 192.168.0.23).

Candados de seguridad.

Sudo incluye varios candados de seguridad que impiden se puedan realizar tareas peligrosas.

Si se define el mandato /usr/bin/vim en /etc/sudoers, se podrá hacer uso de éste de los siguientes modos:
CODE
$ sudo /usr/bin/vim
$ sudo vim


Sin embargo, no podrá ser utilizado así:
CODE
$ cd /usr/bin
$ sudo ./vim


Si se define el mandato /bin/echo, el usuario podrá utilizarlo de los siguientes modos:

CODE
$ sudo /bin/echo "Hola"
$ sudo echo "Hola"


Pero no podrá utilizarlo de la siguiente forma:

CODE
$ sudo echo "Hola" > algo.txt


Para poder realizar la operación anterior, tendría que utilizar:

CODE
$ sudo bash -c "echo 'Hola' > algo.txt"


Sudo le permitirá realizar una tarea sobre cualquier fichero dentro de cualquier directorio aún si no tiene permisos de acceso para ingresar a dicho directorio siempre y cuando especifique la ruta exacta de dicho fichero.

CODE
$ sudo chown named /var/named/dominio.zone


Pero no podrá utilizarlo así:

CODE
$ sudo chown named /var/named/*.zone


Lo que no se recomienda.

Si se quiere permitir a un usuario utilizar lo que sea, desde cualquier anfitrión, cómo cualquier usuario del sistema y sin necesidad de autenticar, se puede simplemente definir:

CODE
fulano ALL = (ALL) NOPASSWD: ALL


Facilitando la vida a través de ~/.bash_profile.

BASH (Bourne-Again Shell) permite utilizar variables de entorno y aliases definidas en ~/.bash_profile al iniciar la sesión, siendo que el administrador utilizará activamente muchos mandatos diversos, estos se pueden simplificar a través de aliases que resuman éstos. Por ejemplo, si se quiere definir que se utilice sudo cada vez que se invoque al mandato chkconfig, se puede añadir lo siguiente al fichero ~/.bash_profile:

CODE
alias chkconfig="sudo /sbin/chkconfig"


Lo anterior permitirá ejecutar directamente el mandato chkconfig sin necesidad de preceder éste con el mandato sudo. A continuación los diversos aliases que pueden ser de utilidad en el fichero ~/.bash_profile y que permitirán utilizar mandatos diversos con sudo.


CODE
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin

export PATH
unset USERNAME

alias chkconfig="sudo /sbin/chkconfig"
alias service="sudo /sbin/service"
alias route="sudo /sbin/route"
alias depmod="sudo /sbin/depmod"
alias ifconfig="sudo /sbin/ifconfig"
alias chmod="sudo /bin/chmod"
alias chown="sudo /bin/chown"
alias chgrp="sudo /bin/chgrp"
alias useradd="sudo /usr/sbin/useradd"
alias userdel="sudo /usr/sbin/userdel"
alias groupadd="sudo /usr/sbin/groupadd"
alias groupdel="sudo /usr/sbin/groupdel"
alias edquota="sudo /usr/sbin/edquota"
alias vi="sudo /usr/bin/vim"
alias less="sudo /usr/bin/less"
alias tail="sudo /usr/bin/tail"
alias yum="sudo /usr/bin/yum"
alias saslpasswd2="sudo /usr/sbin/saslpasswd2"
alias htpasswd="sudo /usr/bin/htpasswd"
alias openssl="sudo /usr/bin/openssl"
alias system-config-printer="sudo /usr/sbin/system-config-printer"
alias system-config-network="sudo /usr/sbin/system-config-network"
alias system-config-display="sudo /usr/bin/system-config-display"


Para que surtan efectos los cambios, hay que salir de la sesión y volver a ingresar al sistema con la misma cuenta de usuario, en cuyo fichero ~/.bash_profile se añadieron estos aliases.

stumbleupondelicious