2 - ADMINISTRACION BÁSICA
[ CONCEPTOS BÁSICOS ] - [
ADMINISTRACION ELEMENTAL ] - [ AUTENTIFICACION
DE USUARIOS ] - [ POLITICAS DE SEGURIDAD ] -
[
SEGURIDAD EN EL NUCLEO ] -
[ COPIAS DE SEGURIDAD ] - [
BIBLOGRAFIA ]
2.1 - EL FICHERO /etc/passwd
2.2 - PERMISOS BÁSICOS
2.3 - CREACION DE NUEVOS USUARIOS
2.4 - SETUID - SETGID
2.5 - MONTAR Y DESMONTAR
UNIDADES
2.6 - UTILIDADES MTOOLS
2.7 - GLOSARIO BASICO PARA TRABAJAR CON
ARCHIVOS
Utilizando el sistema operativo Linux como ejemplo, configurare
una serie de parametros básicos que se deberian revisar en cualquier
sistema informatico minimamente seguro.
2.1 - EL FICHERO /etc/passwd
Los ficheros /etc/passwd y el /etc/shadow
contienen informacion sobre los usuarios que pueden conectarse al sistema.
Las entradas del fichero /etc/passwd tienen el siguiente formato:
--1----:2:-3--:-4-:--5---:----6--------:----7----
p.ej:
al052354:x:1071:100:Javier:/home/al052354:/bin/bash
Cada numero corresponde a:
-
1. nombre del login
-
2. password codificado o x, en cuyo caso el password se encuentra
en el fichero /etc/shadow
-
3. uid: valor numérico que identifica al usuario
-
4. gid: valor numérico del grupo principal
-
5. descripcion de la cuenta.( en este caso, el nombre del
usuario)
-
6. directorio del HOME
-
7. Shell de inicio
Ademas del /etc/passwd tambien existe el /etc/shadow, el
cual se compone de los siguientes campos:
---1---:-------2-----:--3--:-------4---
p.ej:
al052354:asd43fcas909;:10640:99999::::
Cada numero corresponde a:
-
1. nombre del login
-
2. password codificado
-
3. fecha de última modificación
-
4. campos indicando duraciones de validez del password fecha,
etc.
En las primeras versiones Linux solo existia el /etc/passwd,
debido a ciertas medidas de seguridad se decidio separar en dos, por ello
parte de la informacion la contiene el /etc/passwd y la informacion extrictamente
confidencial la tiene el /etc/passwd/.
En caso que quisieramos echar un vistazo a estos ficheros,
es tan facil como utilizar un editor de texto (el emacs, por ejemplo) y
visualizarlos e incluso modificarlos. Tambien existe una orden que permite
modificar dicho fichero. Si en un terminal escribimos passwd
podremos modificar ciertos parametros de este archivo sin saber apenas
nada de él. Por ejemplo, si queremos modificar nuestro password
como usuario, una vez iniciada una sesion, abrimos un terminal, escribimos
passwd
nos pedira nuestra actual contraseña, la nueva contraseña
y una verificacion de la nueva contraseña. Es posible que
no se pueda cambiar el password debido a ciertos parametros temporales
o sintacticos, es decir, una maquina nos puede denegar el cambio de password
en un plazo de una semana desde la ultima modificación o bien exigirnos
que nuestra nueva password contenga ciertos caracteres que poseia la antigua.
La seguridad de la particion de estos dos ficheros radica
en que el fichero /etc/passwd tiene permiso de lectura global , mientras
que el /etc/shadow solo puede leerlo el root del sistema. De esta forma,
todos los programas pueden conocer todos los atributos de cualquier usuario,
excepto la informacion relativa al password.
La cualidad de super-usuario no se debe al hecho de llamarse
"root", sino que en el campo UID esta a 0, por lo que es posible crear
otro usuario con nombre Juan, pero con permisos de root, lo unico que se
debe tener en cuenta es que solo aparezca una entrada con UID=0.
2.2 - PERMISOS
BÁSICOS
En linux la mayoria de los mecanismos de proteccion se
basan en la proteccion de ficheros, estos se basan en una seria de permisos
que segun usuarios dejan realizar determinadas operacion sobre ellos o
no. Distinguiremos tres operaciones lectura, escritura, ejecucion
de un fichero.
Es básico conocer notablemente los permisos de
los ficheros y directorios: rwxrwxrwx
-
r: seria permiso activado para la lectura del fichero
-
w: seria permiso activado para la escritura del fichero
-
x: seria permiso activado para la ejecucion del fichero
captura de pantalla de mi maquina como ejemplo para ilustrar el
sistema de permisos de linux
En la imagen se puede comprobar como haciendo un ls -l
en un terminal de linux nos aparece informacion de los ficheros encontrados
en un directorio. Primero, la primera de las "-" indica si es un directorio
o no. En la imagen no existe ningun directorio, si lo hubiera apareceria
una "d".
Los permisos estan agrupados de tres en tres:
-
Primer grupo (izquierda) : permisos aplicados cuando el propietario
-
Segundo grupo (central) : permisos aplicados a los miembros
del grupo propietario
-
Tercer grupo (derecha) : permisos aplicados al resto de usuarios
Para entender mejor el sistema de permisos cogere un archivo
de la imagen y lo analizare. Por ejemplo, el archivo "vigenere.c" posee
unas caracteristicas -rw-r--r--. El primer campo nos indica que
no es un directorio. Los tres primeros parametros me indican que yo tengo
permiso para leer y escribir sobre ese fichero, los tres siguientes me
indican que los miembros del grupo en que yo me encuentre tendran poder
para leer ese fichero, y finalmente el resto de usuarios que accedan a
la maquina tendran capacidad para leer ese fichero.
2.3 - CREACION DE NUEVOS
USUARIOS
Para la creacion de nuevos usuarios podriamos distinguir
tres caminos principales: creacion "a mano" de un usuario, la utilizacion
de useradd o bien la utilizacion de algun programa de entorno gráfico.
Explicare brevemente los dos primeros metodos. La creacion
a mano es la mas compleja sin duda.
-
El primer paso seria editar el fichero /etc/passwd/,
teniendo en cuenta de elegir un UID que no coincida con el de otro usuario
existente en esta máquina. También es conveniente elegir
un UID que no exista en ninguna maquina en un posible departamento.
ejemplo de un trozo del fichero /etc/passwd
-
Añadir la correspondiente entrada en el fichero /etc/shadow
-
Crear el directorio HOME del usuario, normalmente situado
en /home: # mkdir /home/javier/; chmod 700 /home/javier/
-
Copiar los fichero de configuracion por defecto, los cuales
podremos encontrar usualmente en el directorio /etc/skel/: #cp
-r /etc/skel/.??* /home/javier
-
Cambiar el propietario y grupo del directorio HOME y todo
su contenido para que pertenezca al usuario creado: #
chown -R javier:javier_group /home/javier
La segunda opcion bastaria con abrir un termina y invocar
al comando #useradd -m pepe. Las de interfaz grafica son mas faciles
e intuitivas de utlizar, por ello ocultan ciertos pasos del proceso haciendolos
totalmente transparentes al usuario.
2.4 - SETUID -
SETGID
Ademas de los bits de proteccion basicos hay tres bits
mas que son bastante interesantes, de los cuales comentaremos el SETUID
y el SETGUD. El SETUID es un bit que aplicado a un fichero establece ciertos
parametros en su ejecucion. Es decir un fichero setuidado parace
en el campo de ejecucion una "s" en lugar de una "x", en el primer grupo
de permisos (el que se refire al usuario).
fragmento del archivo /usr/bin
En la imagen de arriba se nos muestra un fragmento del archivo
/usr/bin y podemos observar como en un par de ficheros se ha establecido
el permiso "s". Pues bien, cuando este bit está activo en un fichero
ejecutable, el proceso que se lanzará a partir de este ejecutable
tendrá los permisos del propietario del fichero y no del usuario
que lo ejecute.
Por ejemplo, si al editor de textos vi le establecemos
el permiso "s" #chmod +s /bin/vi , cualquier usuario podrá
ver cualquier archivo del sistema con tal de utilizar vi para editarlo.
Y si pusieramos un parametro "s" en la orden rm (borrar fichero)
tendriamos potestad para borrar lo que quisieramos.
El bit de seguridad SETGID se comporta de forma analoga
al SETUID, actua de la misma forma aunque este a nivel de grupo. Es decir,
cuando este bit está activo en un fichero ejecutable, el proceso
que se lanzará a partir de este ejecutable tendrá los permisos
del grupo del fichero ejecutable y no del grupo del usuario que lo ejecute.
2.5 - MONTAR
Y DESMONTAR UNIDADES
El sistema de ficheros de linux utiliza unos enlaces para
conectar los dispositivos de almacenamiento fisico a su sistema de ficheros.
Es decir , no tenemos una letra asignada a cada dispositivo de almacenamiento
fisico como en windows, en linux los dispositivos se montan a libre antojo.
Lo que supone una mejora respecto a windows, ya que montamos y desmontamos
unidades a nuestro libre antojo.
Para montar unidades utilizaremos el comando de terminal
mount.
Si
ejecutamos el comando sin ningun argumento, el sistema nos informara del
estado de puntos de montaje en que se encuentra nuestra maquina, algo asi:
ejemplo de mount
Para montar un sistema de ficheros se utilizan mount con
dos parametros. /dev/fd0 es el fichero especial por el que se accede a
la primera disquetera y /mnt/floppy/ es un directorio "normal" que existe
en el sistema. Los directorios sobre os que se montan sistemas de archivos
se llaman puntos de montaje.
# mount /dev/fd0 /mnt/floppy/
La inversa de este proceso es desmontar un sistema de
almacenamiento, con el comando unmount , es decir, para poder extraer
físicamente el disco del sistema es obligatorio desmontarlo.
#unmount /mnt/floppy/
En principio la tarea de montar y desmontar es exclusivamente
del super-usuario. Tambien podemos hacer que el sistema operativo monte
automaticamente los dispositivos al arrancar. La informacion se encuentra
en el fichero /etc/fstab , se trata de una tabla que contiene informacion
sobre los dispositivos y los puntos de montaje, asi como informacion sobre
como se deben montar cada uno de ellos. Seria una cosa asi:
Se debe de tener especial atencion con los tipos de sistemas
de ficheros, ya que cada sistema operativo puede variar en cuanto a este
factor. Existen un buen grupo de sistemas de ficheros tales como el FAT32,
ext2, vfat o ntfs. En el caso de que se implantrara un sistema de ficheros
sobre un sistema operativo que no utiliza podriamos acarrear serio problemas
de perdidas de informacion de nuestros dispositivos. Tambien es posible
que determinados componentes utilicen ciertas caracteristicas especiales,
las mas importantes son las utilizadas por las operaciones:
-
noauto: el sistema no se monta al arrancar el sistema.
-
user: se permite que los usuarios monten y desmonten
este sistema en ese punto de montaje
-
check: No distingue entre mayusculas y minusculas
en los nombres de ficheros, tal como en sistemas de ficheros tipo MS-DOS
y iso9660.
2.6 - UTILIDADES
MTOOLS
Las mtools son un conjunto de instrucciones que emulan
la forma de trabajar de ms-dos, es decir nos aportan los clasicos comandos
del DOS , dir, format, copy ,etc...
Las mtools se componen de las siguientes intrucciones:
mattrib,
mbadblocks, mcat, mcopy, mdel, mdeltree, mdir, mdoctorfat, mdu, mformat,
minfo, mlabel, mmd, mmount, mpartition, mrd, mread, mmove, mren, mshowfat,
mtoolstest, mtype, mwrite, mzip.
Por ejemplo:
como si en MS-DOS hubieramos tecleado dir a:
El fichero de configuracion /etc/mtools.conf contiene
la configuracion que indica las asociaciones entre dispositivos UNIX y
letra de MS-DOS. Las mtools no son un fichero de root setuidado, por lo
que si queremos que los usuarios puedan utilizar las ordenes "mtools" tendremos
que habilitar los permisos correspondientes en los ficheros especiales
que utilizamos. #chmod 666 /dev/fd?
El primer parametro que recibe cualquier programa cuando
se pone en ejecucion es el nombre del fichero desde el que se ejecuta.
Algunas ordenes UNIX utilizan el propio nombre del fichero para hacer varias
cosas. Para conseguir este efecto no es necesario tener muchas copias del
fichero, podemos hacer enlaces duros o enlaces simbolicos. Con lo que se
consigue tener ordenes eficientes utilizando muy poco disco. #ln -s
/usr/bin/ssh ~/bin/xpc02.
2.7 - GLOSARIO BASICO PARA TRABAJAR
CON ARCHIVOS
-
tar: Es la version UNIX de comandos como pkzip de
MSDOS. Con tar se pueden transportar cualquier tipo de ficheros entre distintos
UNIX's. "tar" crea un fichero conteniendo otros muchos ficheros.
-
locate: Diariamente UNIX actualiza una base de datos
con el nombre de todos los ficheros existentes en el disco duro("updatedb").
Con la orden "locate" podemos encontrar de forma casi inmediata cualquier
fichero con tal de conocer algun fragmento del nombre.
-
grep: busca cadenas de caracteres dentro de ficheros
-
find: busca ficheros en directorios de forma recursiva.
Es una orden muy pesada que hay que utilizar con moderacion. Se pueden
realizar búsquedas muy complejas he incluso se pueden realizar busquedas
en los contenidos de los ficheros
-
whereis: Busca el ejecutable, los fuentes y la hoja
de manual del nombre que se le de como parametro
-
which: Se le pasa como parametro una orden e imprime
el nombre completo del fichero que se ejecutaria. Muy importante para saber
exactamente que version de ejecutable estamos utilizando.
-
file: En UNIX cualquier fichero puede contener cualquier
tipo de informacion independientemente de la extension que tenga. "file"
nos dice que es lo que realmente contiene cada fichero
-
sort: Ordena ficheros. Espera el fichero por la entrada
estandar y el resultado lo saca por la salida estandar.
-
socket: Crea conexiones TCP/IP, tanto como cliente
como servidor. Muy util para comprobar el funcionamiento de servidores
(realizando conexiones directas) o para construir nuestros propios servidores.
Por ejemplo, la siguiente orden crea un demonio que devuelve la clave pública
de nuestra maquina:
# socket -ls 3040 -p "cat /etc/ssh2/hostkey.pub" &
[ CONCEPTOS BÁSICOS ] - [
ADMINISTRACION ELEMENTAL ] - [ AUTENTIFICACION
DE USUARIOS ] - [ POLITICAS DE SEGURIDAD ] -
[
SEGURIDAD EN EL NUCLEO ] -
[ COPIAS DE SEGURIDAD ] - [
BIBLOGRAFIA ]