Título: Seguridad en Linux Publicado por: el-brujo en 18 Septiembre 2002, 19:54 pm Documento Original de:
http://www.bandaancha.st/documentos.php?docid=26 Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original. Seguridad en LINUX por |^FaRLo^| 1 SeGuRiDaD eN LiLo 2 uSuaRioS y PaSSWorDs 2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs , etc... 2.2 La oRDeN Su 2.3 PaSSWorDs eN SHaDoW Comentarios: Bueno, a acusa del poco tiempo que tengo voy ha tener que ir haciendo este especie de tutorial poco a poco, por tanto he decidido dividirlo y segun como lo vea tratare mas temas de los que aqui expongo, esto dependera de como se desarrolle la cosa :). PRiMeRa PaRTe 1. SeGuRiDaD eN LiLo Para arrancar Linux se debe instalar un programa que cargue el kernel, Linux se puede cargar de varias maneras pero lo mas habitual es usar el programa Linux Loader (LILO), a este programa se le pueden pasar varias opciones durante el arranque para activar características especiales del sistema o para pasar opciones al kernel, las opciones más conocidas son: rescue - Inicia Linux en modo de único usuario para permitir reparaciones del sistema. single - Similar al anterior. root=<dispositivo> Esta opcion permite arrancar desde otro dispositivo , por ejemplo desde un CD_ROM. El problema es que si alguien tiene acceso local a tu maquina y arranca con la opcion single: Linux single Posss entrare en el sistema con permisos de root y sin poner contrase¤a , para remediar esto se ha de cambiar la configuración de LILO para que pida una contrase¤a cuando se intente utilizar la opcion single o rescue. El archivo de configuracion de LILO se encuentra en : /etc/lilo.conf Para hacer que pida password se ha de añadir lo siguiente: password=elpasswordquequieras restricted Por ultimo los permisos del fichero /etc/lilo.conf deberian de ser solo de lectura y escritura para el root y para nadie mas, como mucho para el grupo al que pertenece el root. Ya que como el password que hemos puesto esta en texto plano cualquiera podria verlo. 2. uSuaRioS Y PaSSWorDs: Passowrds: UNIX utiliza un programa llamado crypt(3) para encryptar las passwords, este programa se basa en el algoritmo de encrytacion DES (Estandar de Encryptacion de Datos). Las passswords pueden tener como maximo 11 caracteres pero una vez encryptadas tienen 13, esto es debido a que los dos primeros caracteres son el grano de sal (condimento) y se generan a parir del contador del reloj en el momento en el que se asigna la contraseña, este grano de sal consta de 12 bits, esto quiere decir que puede ser un valor de entre 0 y 4095. Asi para cada contrase¤a posible hay 4095 formas diferentes de encryptacion. En el fichero /etc/passwd se guardan el nombre de usuario, nombre real , informacion de identificacion, y si el sistema no esta en shadow el passwd encryptada del usuario. Un ejemplo: root:WLR103VcgThbH,31AB:0:0:root:/root:/bin/bash Donde WLR103VcgThbH es la clave encrytada y WL es el gano de sal. El numero 3 es el maximo de vida del passwd, despues de tres semanas el usuario debera cambiarla. El numero 1 indica cuantas semanas deben pasar para que el usuario puede cambiar su password. AB Indica cuando se cambio por ultima vez la clave, (Indica el numero de semanas que han pasado desde 1/1/1970). Estos datos están escritos en base 64. Si por ejemplo root:...,31AB:0:0:root:/root:/bin/bash , indica que el usuario tendra que cambiar su clave la proxima vez que se conecte al sistema. Para cambiar el passwd basta con teclear: Passwd -n diasmin -x diasmax usuario Donde diasmin es el numero de dias que han de pasar para que el usuario puede cambiar su passwd. diasmax es el numero de dias en que expira la clave, para deshabilitar la expiracion basta con que el valor de tiempo sea -1. Por ejemplo en el caso del usuario Invitado: passwd -x 30 Invitado El usuario Invitado tendra que cambiar su clave cada mes. No es recomendado usar la opcion un (dias minimos para cambiar la password) porque si el usuario sospecha que le han pillado el passwd y aun no han pasado los dias minimos, pues no podra cambiarla hasta que no pasen dichos dias. Si en el campo de la clave aparece un NP, (NO password) la cuenta no tiene password, si por el contrario aparece LK (Locked passwd) significa que la cuenta esta bloqueada. Para buscar las cuentas sin passwd: egrep ‘NP|::’ /etc/passwd Para buscar por ejemplo info de un usuario en el fichero passwd: egrep ‘usuario1|usuario2’ /etc/passwd El numero 0 es el identificador de Usuario (uid). El identificador de usuario permite determinar, entre otras cosas: Que ficheros son propiedad de dicho usuario, cuales son los que se pueden ejecutar, a que zonas tiene acceso un usuario, etc... Con esto quiero decir que UNIX/Linux no identifica de quien es cada cosa por el nombre de usuario sino por el UID. UID es un entero sin signo de 16 bits, el cual va de 0 a 65535. Los UID’s menores de 9 son habitualmente usados por funciones del sistema como ftp. El uid 0 corresponde a el superusuario (root), los UID para los demas usuarios suelen empezar a partir del numero 100. 2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs El siguiente campo pertenece al Identificador de Grupo, en este caso root pertenece al grupo 0. A los usuarios que van a pertenecer al mismo grupo se les asigna el mismo gid. El gid puede ir de 0 hasta 60000, El 0 corresponde al grupo de superusuario: Los usuarios que estan en el mismo grupo tienen el mismo nivel de privilegios para aquellos elementos que pertenezcan al grupo. En el directorio /etc/group esta la lista de cada grupo, un ejemplo del /etc/group es: Administ:*:0:root,Charli Programadores:*:10:Juan,Pedro,Antonio Usuarios:*:100: Donde: Administ Es el nombre del grupo * Es el password del grupo, en este caso no hay passwd Root, Charli Los miembros del grupo. Pueden haber un usuario que pertenezca a varios grupos, el usuario podre entrar en todos aquellos grupos donde este su loguin, por defecto al entrar en el sistema entrare en el grupo que corresponda a su gid, luego para cambiar de grupo simplemente ha de teclear: newgrp nombre-grupo Para asociar una clave a un grupo se genera la clave para un usuario nuevo y se copia con el editor de textos en el fichero /etc/group en el campo correspondiente. Los permisos para este fichero han de ser de lectura y escritura para el root y de lectura para los demas usuarios, SI un usuario puede escribir en este fichero puede ganar permisos de root con simplemente poner su nombre de usuario en el mismo grupo en que esta el root y quitar la password si es que hay. La orden chgrp sirve para cambiar el grupo propietario de un archivo, su sintaxis es: chgrp [opciones] [grupo] [archivo] La orden chown sirve para cambiar el propietario de un archivo, pero tambien admite la utilizacion de uid y gid. Por ejemplo: chown 500:100 /bin/bash Cambia el propietario del archivo al usuario con uid 500 y al grupo gid 100. Se recomienda que /bin/chown solo pueda ser ejecutado por los usuarios con gid 0. 2.2 oRDeN Su La orden su significa (switch user, cambiar usuario) se utiliza para cambiar de un usuario a otro, si no se utiliza ningun campo su asume que se ha de pasar al usuario root. Una manera de restringir la orden su es quitando al programa /bin/su permisos de ejecucion a los usuarios que no pertenezcan a un grupo especial, como administradores. Como ya sabeis los permisos pueden ser para el propietario, para el grupo y para todos los usuarios. 2.3 PaSSWorDs eN SHaDoW Los passwords en Unix se dividen en 7 campos, (separados por dos puntos) : tonto:h34Sd3vc23: 100:100:Alvaro:/usr/tonto:/bin/sh - Primer campo: Tonto Es el nombre con el que el sistema reconoce al usuario. A eso se le llama (login). (Perdonadme los que entiendan algo de unix, pero esque lo tengo que explicar pa alguien que no sepa na de na). - Segundo campo: h34Sd3vc23 Esta es la palabra clave del usuario pero esta cifrada. Si contiene un asterisco (*) este password esta desactivado y no puede usarse. :( - Tercer campo: 100 Este es el número de usuario del sistema, (que puede ser hasta 60000). El usuario con nivel 0 es el root o superusuario. - Cuarto campo: 100 Es el número del grupo al que pertenece el usuario, todos los usuarios de un mismo grupo tienen los mismos privilegios como es logico, (tambien este campo puede ser del 0 al 60000) - Quinto campo: Alvaro En este campo aparecen datos adicionales del usuario, (en este caso el nombre). - Sexto campo: /usr/tonto Es el directorio home del usuario en cuestion. - Septimo campo: /bin/sh Es el Shell que el usuario tonto utiliza. Como si pillas un fichero de passwords que no estan en shadow y te pones a crackearlo salen passwords como caracoles despues de la lluvia J, se decide de poner este sistema en que las passwords encryptadas se guardan en un archivo a parte generalmente en /etc/shadow (pero depende del sistema), este archivo al contrario del /etc/passwd solo tiene permisos de lectura para el root. Luego en el fichero /etc/passwd en vez de la clave encryptada se pone un * o algun otro simbolo, esto depende del sistema, he aqui unos ejemplos :)) Tipo de UNIX Directorio Simbolo AIX3 /etc/security/passwd ! SunOs 5.0 /etc/shadow * UNICOS /etc/udb * BSD4.3-Reno /etc/master.passwd * HP-UX /.segure/etc/passwd * EP/IX /etc/shadow X IRIX 5 /etc/shadow X La estructura del fichero /etc/shadow es la siguiente: username:passwd:last:may:must:warn:expire:disable: Donde: username Es el nombre de usuario. passwd La clave encryptada. last Los dias que hace que se cambio la clave desde 1/1/1970. may Los dias que han de pasar para que la clave pueda ser cambiada. must Los dias en que espira la clave. warn Los dias en que se avisara al usurario antes de que el passwd expire. expire Son los dias que pueden pasar con la clave caducada antes de que se deshabilite la cuenta. Hay una seria de circunstancias en que poner contrase¤as a la sombra puede dar problemas: . Cuando en la maquina se verifica el password via NFS, NIS o algun otro metodo. . Cuando la maquina esta en una LAN y esta usando NIS (Network Information Services). En el fichero /etc/login.defs se especifica por ejemplo los dias maximos en que puede expirar una passwd, los dias minimos, los caracteres minimos que puede tener, el UID maximo etc... Podemos bloquear el programa passwd para que solo un grupo de usuarios o un usuario puedan ejecutarlo (cambiar su passwd) : Por ejemplo: chgrp grupo /bin/passwd Cambia el grupo propietario del programa passwd. chmod 4750 /bin/passwd Cambia los permisos para que solo pueda ejecutar el propietario y el grupo propietario del programa /bin/passwd. NOTA: Puedes ver el contenido del fichero /etc/passwd simplemente tecleando: cat /etc/passwd Si estas en una red que usa un servidor NIS las contraseñas de toda la red se guardan en este servidor, para ver el contenido del fichero passwd: ypcat passwd 2.4 CueNTaS PoR DeFecTo 3 SisTeMaS De FicHeRos. 3.1 PerMiSoS eN FicHeRos , chown , etc ... 3.2 La oRDeN uMasK 3.3 SuiD , sGiD 3.4 La VaRiaBLe PATH Cuentas de Invitado ("Guest") Las cuentas de invitado (Guest) a veces se suelen utilizar para comprobar configuraciones SMTP y demas. Estas cuentas, por defecto, suelen tener asociado un password JOE (un password JOE es aquel que es igual que el login), por lo que si hemos de habilitar estas cuentas lo mejor es cambiarles el password. Si no utilizas estas cuentas lo mejor es ponerlas el asterisco (*) en el /etc/passwd (un asterisco entre los dos primeros ":" inhabilita la cuenta, y por tanto el usuario no puede entrar en el sistema). Por si acaso se le puede poner como $HOME el /dev/null (el "aguejero negro" de nuestro sistema). Cuentas sin Passwords Numerosos sistemas tienen instaladas cuentas con nombres como "who", "date", "lpq", y demás con el objetivo de lanzar determinados comandos. Esto tiene la finalidad de permitir a los usuarios lanzar sus procesos sin necesidad de entrar en la maquina y ejecutarlos a mano. Estas cuentas NO suelen tener password, y por tanto su potencial problema es que abren inmensos agujeros de seguridad en la maquina; por lo general, ademas, estas cuentas suelen tener permisos de root (super-usuario). Que hacer, pues? Simplemente, NO permitir estas cuentas! Lista Extraída de : Hack en accion ( basico ) Parte I By PLaXiuS Cuentas por defetco mas comunes: AIX ~~~ guest guest AS/400 ~~~~~~ qsecofr qsecofr qsysopr qsysopr qpgmr qpgmr ibm password ibm 2222 ibm service qsecofr 1111111 qsecofr 2222222 qsvr qsvr secofr secofr DECserver ~~~~~~~~~ ACCESS SYSTEM HP-x000 ~~~~~~~ Este sistema es elaborado por Hewlett-Packard. Se caracteriza por el prompt ":". La secuencia de entrada a este sistema es una de las más complicadas. Debes escribir: "HELLO SESSION NOMBRE,USUARIO,NOMBRE-DE-CUENTA,GRUPO" Afortunadamente algunos de esos campos pueden dejarse en blanco. En ocasiones todos los campos están protegidos con passwords por lo que este sistema no es uno de los mas fáciles de acceder. Las cuentas defaults comunes son: Login User ~~~~~ ~~~~ MGR.TELESUP,PUB MGR Acct: HPONLYG rp: PUB MGR.HPOFFICE,PUB FIELD.SUPPORT,PUB FLD, MAIL.TELESUP,PUB MAIL, MGR.RJE FIELD.HPP189 ,HPP187,HPP189,HPP196 MGR.TELESUP,PUB,HPONLY,HP3 Hewlett Packard MPE-XL ~~~~~~~~~~~~~~~~~~~~~~ HELLO MANAGER.SYS HELLO MGR.SYS HELLO FIELD.SUPPORT HPUNSUP or SUPPORT or HP HELLO OP.OPERATOR MGR CAROLIAN MGR CCC MGR CNAS MGR CONV MGR COGNOS OPERATOR COGNOS MANAGER COGNOS OPERATOR DISC MGR HPDESK MGR HPWORD FIELD HPWORD MGR HPOFFICE SPOOLMAN HPOFFICE ADVMAIL HPOFFICE MAIL HPOFFICE WP HPOFFICE MANAGER HPOFFICE MGR HPONLY FIELD HPP187 MGR HPP187 MGR HPP189 MGR HPP196 MGR INTX3 MGR ITF3000 MANAGER ITF3000 MAIL MAIL MGR NETBASE MGR REGO MGR RJE MGR ROBELLE MANAGER SECURITY MGR SECURITY FIELD SERVICE MANAGER SYS MGR SYS PCUSER SYS RSBCMON SYS OPERATOR SYS OPERATOR SYSTEM FIELD SUPPORT OPERATOR SUPPORT MANAGER TCH MAIL TELESUP MANAGER TELESUP MGR TELESUP SYS TELESUP MGE VESOFT MGE VESOFT MGR WORD MGR XLSERVER Major BBS ~~~~~~~~~ Sysop Sysop PICK O/S ~~~~~~~~ DSA DS DESQUETOP PHANTOM Prolog ~~~~~~ PBX PBX NETWORK NETWORK NETOP <null> Rolm ~~~~ CBX Defaults op op op operator su super admin pwp eng engineer PhoneMail Defaults ~~~~~~~~~~~~~~~~~~ sysadmin sysadmin tech tech poll tech RSX ~~~ SYSTEM/SYSTEM (Username SYSTEM, Password SYSTEM) 1,1/system (Directory [1,1] Password SYSTEM) BATCH/BATCH SYSTEM/MANAGER USER/USER MICRO/RSX System 75 ~~~~~~~~~ bcim bcimpw bciim bciimpw bcms bcmspw, bcms bcnas bcnspw blue bluepw browse looker, browsepw craft crftpw, craftpw, crack cust custpw enquiry enquirypw field support inads indspw, inadspw, inads init initpw kraft kraftpw locate locatepw maint maintpw, rwmaint nms nmspw rcust rcustpw support supportpw tech field VMS ~~~ La computadora VAX es creada por Digital Equipment Corporation (DEC) y corre el sistema operativo VMS (virtual memory system). VMS se caracteriza por su prompt 'Username:'. Este sistema no te dire si has entrado un login correcto o no y te desconectara despues de tres malos intentos. Tambien mantiene un log de todos los logins que fallaron e informa al due¤o de la cuenta la proxima vez que entre cuantos intentos fallados se hicieron. Es uno de los sistemas más seguros desde fuera pero ya dentro tiene varios errores en la seguridad. Las VAX ademas tienen unos de los mejores archivos de ayuda de entre los demas sistemas, para acceder a esta ayuda solo escribe HELP en el prompt. Las cuentas defaults comunes son: [ usuario: password [,password] ] Login Password ~~~~~ ~~~~~~~~ decnet decnet demo demo field field field service guest guest operator operator sysmaint digital sysmaint service sysmaint sysmaint system manager system operator system syslib system system systest uetp UNIX ~~~~ Las cuentas defaults comunes son: Login Password ~~~~~ ~~~~~~~~ adm adm adm admin admin adm admin admin bin bin daemon daemon decnet ddennet decnet nonpriv default user demo demo field digital field service field test games games games player guest friend guest guest guest welcome host host learn learn netnonpriv nonpriv nuucp nuucp postmaster mail rje rje root root root sysop root system sys sys sys system sysop sysop sysman sys sysman sysman sysman system sysadmin adm sysadmin admin sysadmin sys sysadmin sysadmin sysadmin system sysbin sysbin sysmaint digital sysmaint service system manager system operator system syslib system uetp systest_clig systest test test tty tty unix test unix unix userp user uucp uucp uuhost uuhost who who PRIME ~~~~~ Esta computadora opera con el sistema operativo Primos. Son faciles de detectar ya que reciben a uno con el mensaje "Primecon xx.xx.xx" o algo parecido dependiendo de la version que te encuentres. Usualmente no ofrecen ningún prompt asi que debes escribir "login <usuario>". Si la version es anterior a la 18.00.00 puedes presionar un monton de caracteres de escape o CTRL-C y entraras. Este sistema ofrece la capacidad de conectarte a los NUAS de todo el mundo con el comando NETLINK...sintax: nc <nua> Las cuentas defaults comunes son: Login Password ~~~~~ ~~~~~~~~ guest guest guest prime guest1 guest netlink netlin prime prime prime primos primos prime primos primos primos_cs prime primos_cs primos primenet primenet system prime system primos system system test test test prime test primos DEC-10 ~~~~~~ Este es el equipo de computo más nuevo que existe dentro de la linea de DEC' s.Operan el sistema operativo TOPS-10. Este tipo de maquinas se reconocen por el prompt "." Las series DEC-10/20 son amables con los hackers permitiendo varios intentos en el login prompt sin guardar un log de los intentos fallados. Las cuentas están en forma [xxx,yyy]. Lo mejor de este sistema es la posibilidad de obtener informacion sobre las personas en linea antes de entrar a el usando el comando systat. Si ves una cuenta que lea [234,1001] BOB JONES, seria inteligente probar como password BOB, JONES, BOBBY, etc. Para entrar al sistema se usa el comando: login xxx,yyy [enter] password: Este sistema como antes habia dicho, permite intentos sin limite y ademas te avisa si el login que est s usando existe. Las cuentas defaults comunes son: Login Password ~~~~~ ~~~~~~~~ 1,2 manager 1,2 operator 1,2 syslib 2,7 maintain 5,30 games IRIS ~~~~ Iris significa (interactive real time information system). Originalmente corria en PDP-11's, pero ahora corre en otras minis. Para identificar uno de estos sistemas busca el texto "Welcome to `IRIS' R9.1.4 Timesharing" y el prompt ACCOUNT ID? (algunas veces es cambiado). IRIS no tiene limites a la hora de hackear una cuenta y no guarda un log de los intentos fallados. Login ~~~~~ accounting boss demo manager pdp8 pdp11 software VM/CMS ~~~~~~ Este sistema es ejecutado en las super computadoras de IBM (International Business Machines) llamadas mainframes. Una vez conectado a una de estas computadoras te mostrara un mensaje asi "VM/370 ONLINE", y te dare un prompt "." justo como la TOPS-10 lo hace. Para entrar debes ejecutar: LOGON <usuario> Las cuentas defaults comunes son: Login Password ~~~~~ ~~~~~~~~ autolog1 autolog autolog1 autolog1 cms cms cmsbatch cms cmsbatch cmsbatch erep erep maint maint maint maintain operatns operatns operatns operator operator operator rscs rscs smart smart sna sna vmtest vmtest vmutil vmutil vtam vtam NOS ~~~ NOS significa Networking Operating System y corre en la Cyber computadora hecha por Control Data Corp. A este sistema lo puedes identificar facilmente por la bienvenida "WELCOME TO THE NOS SOFTWARE SYSTEM...". El primer prompt que recibir sera FAMILY: (presiona enter) depues llegar a otro prompt USER NAME: donde cada uno es de 7 digitos alfanumericos y son dependientes del sistema por lo que no son palabras o frases conocidas. DECSERVER ~~~~~~~~~ Las DECs son una serie de computadoras conectadas entre si para formar una sola unidad de procesamiento, la funcionalidad de estos sistemas es altamente utilizado por los hackers para quebrar passwords de cuentas unix por la rapidez del sistema. El prompt usualmente sera: "Enter Username>" aunque yo he visto otros prompts en estos sistemas. El nombre de usuario puede ser cualquier cosa, lo mejor ser presionar algo nada sospechoso como `c' o algun numero. De ah¡ te presentar con el prompt `local>'. De ahi debes ejecutar `c <sistema>' para conectarte. Para obtener una lista de sistemas conectados ejecuta `sh' `services' o `sh nodes'. En algunos sistemas DEC'S existen comandos como MODEM o DIAL que permiten hacer uso de un modem para llamadas externas que te permitir n marcar a BBS internacionales a expensas de la compa¤ia que opera el DEC. 3. SiSTeMaS De FiCHeRoS El sistema de ficheros de UNIX/LINUX tiene una estructura de arbol. Un arbol esta constituido por directorios, que contiene a su vez subdirectorios, etc. Todo parte de un directorio raiz. En UNIX, todo esta representado mediante directorios o ficheros, como por ejemplo las unidades, el CD-ROM etc.. Cada fichero contiene un nombre, es propiedad de un usuario, tiene unos permisos etc. Toda esta informacion esta almacenada en los inodo, los inodos guardan todo lo asociado con el fichero excepto su nombre, los nombres son guardados en sus directorios y son asociados con los inodos mediante punteros. Los inodos no poseen nombre. En su defecto se distinguen por un numero o indice, que indica su posicion en la tabla de inodos. Los inodos son las entradas de una tabla de localizacion de ficheros, parecido a al FAT de dos, pero en formato etx2. Cada inodo contiene lo siguiente: . La ubicacion del contenido del objeto referenciado al disco. . El tipo de objeto (ficheros, directorios, enlace simbolico, etc). . El tama¤o del objeto en bytes. . La fecha en la que el inodo fue modificado por ultima vez. . La fecha en la que el Objeto fue accedido por ultima vez. . El Propietario del Objeto. . El grupo propietario del Objeto. . Los permisos del Objeto. En UNIX / Linux varios ficheros pueden estar referenciados al mismo inodo , a esto de le llama link o enlace. Cada directorio tiene como mínimo dos entradas. El punto (.), que referencia el propio directorio y los dos puntos (..), que apuntan al directorio padre ( al que esta mas cerca del directorio raiz). 3.1 PeRMiSoS eN FiCHeRoS Los permisos pueden ser: r Permiso de lectura. w Permiso de escritura. x Permiso de Ejecución. s Suid o Sgid. t Stlicky bit. LOS PERMISOS PUEDEN SER: Para el propietario (owner). Para el grupo (group). Para todos los demas (other). Para ver los permisos de un fichero basta con la orden ls -l. Para cambiar los permisos de los ficheros o directorios se utiliza la orden chmod , su sintaxis es: chmod [-Rfh] [agou] [+-=] [rwxst] nombre Donde: -R Algunas versiones no soportan esta opcion, con -R estamos diciendo que queremos cambiar los permisos recursivamente esto quiere decir que si cambiamos los permisos de un directorio con esta opcion se cambiaran los permisos de todos los archivos y subdirectorios del directorio. -f Si sucede algun error con esta opcion no sera mostrado. -h Se utiliza para los links con esta opcion se cambian los permisos del link pero no el del fichero al que apunta el link. Y donde: a Modifica para todos los usuarios el privilegio especificado. g Modifica los privilegios para el grupo. o Modifica los privilegios para los demás usuarios. u Modifica los privilegios para el propietario. Y donde: + A¤ade un privilegio. Quita un privilegio. = Quita todos los privilegios..... Y donde: r Permiso de lectura. w Permiso de escritura. x Permiso de ejecución. s SUID o SGID. t Sticky bit. Ejemplos: ls -lfiche1 -rwx-r-r- pedro usuarios 505 FEB 9 13:19 fiche1 Donde el primer carácter puede ser: - Fichero normal. d Directorio. c Dispositivo (tty o impresora etc..) b Dispositivos como el CD-ROM etc.. l Link simbolico. Etc... Despues del primer caracter los tres siguientes son permisos para el propietarios luego los tres que le siguen pal grupo y los otros para los demas usuarios si aparece el caracter - en el campo de alguno de estos significa que no existe dicho permisos. En el ejemplo de fiche1 tiene permiso de lectura, escritura, ejecucion para el propietario. Lectura para el grupo y lectura para todos los demas, y donde pedro es el propietario del fichero y usuarios es el nombre del grupo al cual pertenece el fichero. Para añadir permisos de escritura al grupo: Chmod g+w fiche1 Hacemos un ls -l fiche1 -rwx-rw-r- Otro ejemp: ls -l fiche2 -r-r-r- chmod a+w fiche2 ls -l -rw-rw-rw- Otro ejemplo: ls -l fich3 -rwxrwxrwx chmod go= fiche3 Esto quita todos los permisos para el grupo y para los demas usuarios: ls -l fiche3 -rwx------ Hay una manera numerica de poner permisos: Chmod [-Rfh] modo fichero Donde: El modo es: A chmod se le pueden especificar los permisos con un numero octal de 4 digitos, los numeros son: Numero Octal Permiso 4000 Permisos de SUID. 2000 Permisos de SGID. 1000 “Sticky bit” 0400 Permiso de Lectura para el usuario. 0200 Permiso de Escritura para el usuario. 0100 Permiso de Ejecucion para el usuario. 0040 Permiso de Lectura para el grupo. 0020 Permiso de Escritura para el grupo. 0010 Permiso de Ejecucion para el grupo. 0004 Permiso de Lectura para todos. 0002 Permiso de Escritura para todos. 0001 Permiso de Ejecucion para todos. La manera de calcular los permisos es ir sumandolos por ejemplo para poner permiso de Lectura, Escritura, Ejecucion para el usuario del fichero. Lectura y Ejecucion para el grupo.. Y ningún permiso para los demas. Se haria de la siguiente manera: chmod 0750 fichero Ya que: 0400 Lectura pal usuario. + 0200 Escritura pal usuario. + 0100 Ejecucion pal usuario. + 0040 Ejecucion para el grupo. + 0010 Ejecucion para el grupo. --------- 0750 Si hicieramos un ls -l fichero veriamos: -rwxr-w--- Permisos a directorios: Los permisos para los directorios son los mismos que para los ficheros de Lectura, Escritura, Ejecución pero tienen un significado algo distinto. Para un directorio el permiso de lectura indica que se pueden ver los nombres de los archivos del directorio, si se los quitas y hacer un ls no veras nada. Para ver los permisos de los directorios ejecuta ls -lF. Los permiso se cambian de la misma manera que los ficheros. Si no hay permisos de ejecucion no se podrá entrar en dicho directorio. Permiso sobre ficheros y directorios habituales: Número Octal Nombre Permiso 755 /bin/ls Todo el mundo puede copiar y ejecutar este programa. 0700 $HOME Nadie ha de poder entrar en tu directorio home (excepto el root :)). 0600 /usr/mail/$USER Nadie debería poder escribir ni leer tu mail :). 3.2 La oRDeN uMask: Cuando creamos un archivo o directorio este se crea con unos permisos predeterminados, se puede cambiar el modo predeterminado para un directorio, esto significara que todo lo que se cree dentro de este directorio lo hara con los permisos que nosotros hemos predeterminado, la orden umask utiliza el sistema de números para predeterminar permisos. El valor que nosotros queramos predeterminar lo hemos de restar de 777, por ejemplo queremos que para el directorio /root los valores predeterminados sean, Lectura, Escritura, para el usuario. Pues lo que debemos hacer es restar 177 de 777 y nos quedará 600 que es el valor que queremos. Ejemplo: umask 177 /root Que es esto del Sticky bit ? Cuando un ejecutable tiene este bit activado (Sticky bit) aparece con una t situada al final del campo de permisos. Al activar este bit estamos indicando al sistema que queremos que el programa permanezca en memoria al terminar su ejecucion, seria parecido a los programas residentes del Dos. Si se usa sobre un directorio este bit tiene un significado diferente, por ejemplo: chmod 1777 /tmp Todo el mundo podra escribir, pero nadie podrá borrar los archivos creadores por los demas usuarios. 3.3 eL SuiD y eL SGiD El tener los permisos suid o sgid activados en algun programa puede resultar bastante peligroso, muy peligroso :), ya que los exploits de buffer o Stack Overflow se aprovechan de estos permisos, me explico: Tener el permisos SUID activado en un programa significa que cuando un usuario ejecute el programa lo hará como si lo hubiera ejecutado el usuario del fichero o por el grupo si tiene el SGID activado. Porque utilizar estos permisos ? Hay programas que tienen que acceder a zonas donde solo tiene permiso el root , un ejemplo es el programa passwd el cual sirve para cambiar el password de un usuario, el propietarios de este programa es el root, si no tuviera permisos de suid el programa no podria ( o no debería poder ) modificar el fichero /etc/passwd ya que se hubiera ejecutado con la uid de usuario y por tanto un usuario normal no puede modificar dicho fichero, para solucionar esto se le dan permisos de suid, entonces el programa se ejecuta como si lo hubiera hecho el root y puedes modificar tranquilamente el fichero. SGID funciona igual que el SUID lo único que le programa se ejecutaria como si lo hubiera hecho el grupo propietario de dicho programa. EL peligro de estos permisos: Si mientras el programa esta ejecucion pudieramos sobreescribir parte de la pila, cambiar al direccion de retorno de alguna funcion etc... y consiguieramos que este programa ejecutase codigo que no pertenece a este programa, dicho codigo se ejecutaria con permisos del propietario del programa que habitualmente es el root. Para ver si un programa tiene activa el SUI o SGID basta con hacer un: ls -l nombredelfichero -rwsr-xr-x root root .... La s significa que el programa tiene activado los permisos de suid, ya que s esta en le campo del propietario, Asi que el programa tiene permisos de suid el propietarios es el root y el grupo propietario del programa es el grupo root. Dicho programa puede ser ejecutado por cualquiera y cuando se ejecute lo hara con permisos de root. NOTA: Para encontrar todos los archivos que tengan activado suid o el sgid : find / (-perm -004000 -o perm -002000) -type f -print Donde find empieza a buscar en el directorio raíz (/) y mira todos los archivos que tienen modo 002000 (sgid) o modo 004000 (suid). Donde la opcion -type f es para que solo busque ficheros normales y -printf para que lo que encuentre lo saque por pantalla. Si se esta usando NFS y solo se quieres buscar en el ordenador en el que estas y que no mire en los archivos montados de otros ordenadores: find / (-local -o -prune ) ( -perm -004000 -o -perm -002000 ) -typef -print Se ha de tener cuidado a la hora de montar archivos remotos o el floppy o el CD-ROM ya que en el caso de archivos remotos el usuario remoto simplemente creando un suid programa en su ordenador y haciendolo correr en la maquina en la que se montan estos archivos podria pillar permisos de root facilmente , por ejemplo el usuario copia en los archivos que se van a montar de un ordenador en el que tiene permisos una shell con suid activado cuyo propietario es root y lo ejecuta en el ordenador donde se montan estos ficheros... Tb pasaria con el floppy , puedes grabar una shell con suid activado en un floppy y luego montarlo en el ordenador y ejecutarlo. Para que no ocurra todo esto no ocurra se ha de impedir que se monten con el suid y sgid o que el sistema pase de todo estos permisos cuando proviene de un disquete, archivo remoto y tal.. En los archivos remotos (NSF) se ha de configurar el ficheros /etc/exports con las restricciones: nodev nosuid Y si se quiere tb noexec La opcion nodev hace que el sistema ignore los archivos montados, Si tiene el suid activado lo ignora. En el caso de disquetes y tal: Para unidades, archivos, flopyes etc, que se han de montar el fichero de configuracion es el /etc/fstab se pueden usar : nodev nosuid 3.4 La VaRiaBLe PaTH En la variable PATH se indican los directorios donde deberan buscarse los programas que se ejecuten, produciendose la busqueda en el orden en que aparece en la variable. Si la variable PATH se asigna de la forma PATH=.:/usr/bin:/usr/sbin primero se buscará en el directorio actual y luego en el resto de los que aparecen en la variable. Esto puede ser peligroso, por ejemplo: Si alguien creamos en un directorio donde tengamos permisos de escritura un fichero shell script llamado ls, si un usuario entra en ese directorio y teclea ls al tener en la variable PATH los .: buscaria primero en ese directorio el programa ls y ejecutaria nuestro shell script, este shell script podía hacer cualquier cosa y luego llamar al verdadero ls (/bin/ls), el usuario habria ejecutado un programa que no es el /bin/ls y no se habria dado ni cuenta. Par evitar esto, dicha variable debe de asignarse como: PATH:/usr/bin/:/usr/sbin: es decir con los dos puntos al final en lugar del principio, de esta forma se buscaría por último en el directorio actual. NOTA: Existen unos comandos para ver tanto las variables locales como las de entorno y sus valores asignados, estos comandos son: env Muestra por pantalla las variables de entorno y sus valores. set Muestra tanto las variables de entorno como las locales. unset acompa¤ado del nombre de la variable asigna a esta un valor NUL (nulo). El comando env en realidad es un programa que se encuentra en /usr/bin/env, mientras que set y unset son propios de la shell. Algunas variables Importantes: Variables Valor Descripcion ENV $HOME/.profile Ejecuta el fichero indicado al arrancar el shell. HOME /home/usuario Contiene la ruta del directorio principal del usuario. TERM vt100 Contiene el tipo de terminal utilizado en la conexion. TIMOUT 600 Determina el tiempo que debe de estar el terminal inactivo para que finalice automaticamente la conexion. Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original. Título: Re:Seguridad en Linux Publicado por: ..sR. aDiKtO.. en 19 Septiembre 2002, 14:23 pm Muy bueno alex, esta de pm el doc
|