permisos y derechos en linux

15
Permisos y derechos en Linux Cuántos de nosotros hemos tenido la necesidad de “limitar el acceso” a los archivos contenidos en determinado directorio/carpeta o simplemente necesitamos evitar que algunas personas vean, eliminen o modifiquen el contenido de determinado archivo? Más de uno, verdad? Podremos lograrlo en nuestro amado pingüino? La respuesta es: por supuesto que sí:D. Introducción Muchos de los que provenimos de Windows, estábamos acostumbrados a lidiar con esta “problemática” de una manera muy diferente, para conseguir este objetivo teníamos que recurrir a “técnicas” poco ortodoxas, como, ocultar el fichero por medio de sus atributos, mover nuestra información al lugar más recóndito de nuestro equipo (dentro de 20,000 carpetas) para tratar de disuadir a nuestro “enemigo” XD, cambiando o eliminando la extensión del archivo, o la más “común” de las practicas, descargar un programa que nos permita “cerrar” nuestro directorio detrás de un lindo cuadro de dialogo que nos pida una contraseña para acceder al mismo. Teníamos otra alternativa mucho mejor? No. Lo siento mucho por mis amigos “Windoleros” (lo digo con mucho cariño para que nadie se ofenda, ok? ;)), pero hoy me toca ensañarme un poquito con Windows :P, ya que explicare el porqué este SO no permite de manera nativa esta funcionalidad. Cuántos de ustedes habrán notado que cuando nos sentamos detrás de un equipo “Windows” (aunque no sea el nuestro) nos convertimos automáticamente en dueños de todo aquello que contiene el ordenador (imágenes, documentos, programas, etc.)? A que me refiero? Bueno, a que simplemente al tomar el “control de Windows”, podemos copiar, mover, eliminar, crear, abrir o modificar carpetas y archivos a diestra y siniestra, independientemente si nosotros somos los “dueños” de esta información o no. Esto refleja un gran fallo en la seguridad del sistema operativo, verdad? Bueno, todo esto se debe a que los sistemas operativos de Microsoft no fueron diseñados desde el

Upload: alexandra-mujiica

Post on 13-Jun-2015

170 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Permisos y derechos en linux

Permisos y derechos en Linux

Cuántos de nosotros hemos tenido la necesidad de “limitar el acceso” a los archivos contenidos en determinado directorio/carpeta o simplemente necesitamos evitar que algunas personas vean, eliminen o modifiquen el contenido de determinado archivo? Más de uno, verdad? Podremos lograrlo en nuestro amado pingüino? La respuesta es: por supuesto que sí:D.

Introducción

Muchos de los que provenimos de Windows, estábamos acostumbrados a lidiar con esta “problemática” de una manera muy diferente, para conseguir este objetivo teníamos que recurrir a “técnicas” poco ortodoxas, como, ocultar el fichero por medio de sus atributos, mover nuestra información al lugar más recóndito de nuestro equipo (dentro de 20,000 carpetas) para tratar de disuadir a nuestro “enemigo” XD, cambiando o eliminando la extensión del archivo, o la más “común” de las practicas, descargar un programa que nos permita “cerrar” nuestro directorio detrás de un lindo cuadro de dialogo que nos pida una contraseña para acceder al mismo. Teníamos otra alternativa mucho mejor? No.

Lo siento mucho por mis amigos “Windoleros” (lo digo con mucho cariño para que nadie se ofenda, ok? ;)), pero hoy me toca ensañarme un poquito con Windows :P, ya que explicare el porqué este SO no permite de manera nativa esta funcionalidad.

Cuántos de ustedes habrán notado que cuando nos sentamos detrás de un equipo “Windows” (aunque no sea el nuestro) nos convertimos automáticamente en dueños de todo aquello que contiene el ordenador (imágenes, documentos, programas, etc.)? A que me refiero? Bueno, a que simplemente al tomar el “control de Windows”, podemos copiar, mover, eliminar, crear, abrir o modificar carpetas y archivos a diestra y siniestra, independientemente si nosotros somos los “dueños” de esta información o no. Esto refleja un gran fallo en la seguridad del sistema operativo, verdad? Bueno, todo esto se debe a que los sistemas operativos de Microsoft no fueron diseñados desde el inicio para ser multiusuario. Cuando se lanzaron las versiones de MS-DOS y algunas versiones de Windows, confiaban plenamente en que el usuario final sería el responsable de “custodiar” su respectivo equipo para que ningún otro usuario tuviera acceso a la información almacenada en el mismo… vaya ingenuidad ¬¬. Ahora amigos WinUsers, ya saben el porqué ha este “misterio” :D.

A contrapartida, GNU/Linux, al ser un sistema diseñado fundamentalmente para trabajo en red, la seguridad de la información que almacenemos en nuestros equipos (y no se diga en los servidores) es fundamental, ya que muchos usuarios tendrán o podrán tener acceso a parte de los recursos de software (tanto aplicaciones como información) y hardware que están gestionados en estos ordenadores.

Ahora podemos ver porque la necesidad de un sistema de permisos? Adentrémonos en el tema ;).

Page 2: Permisos y derechos en linux

En GNU/Linux, los permisos o derechos que los usuarios pueden tener sobre determinados archivos contenidos en él se establecen en tres niveles claramente diferenciados. Estos tres niveles son los siguientes:

<° Permisos del propietario.<° Permisos del grupo.<° Permisos del resto de usuarios (o también llamados “los otros”).

Para tener claros estos conceptos, en los sistemas en red (como lo es el pingüino) siempre existe la figura del administrador, superusuario o root. Este administrador es el encargado de crear y dar de baja a usuarios, así como también, de establecer los privilegios que cada uno de ellos tendrá en el sistema. Estos privilegios se establecen tanto para el directorio HOME de cada usuario como para los directorios y archivos a los que el administrador decida que el usuario pueda acceder.

Permisos del propietario

El propietario es aquel usuario que genera o crea un archivo/carpeta dentro de su directorio de trabajo (HOME), o en algún otro directorio sobre el que tenga derechos. Cada usuario tiene la potestad de crear, por defecto, los archivos que quiera dentro de su directorio de trabajo. En principio, él y solamente él será el que tenga acceso a la información contenida en los archivos y directorios que hay en su directorio HOME.

Permisos del grupo

Lo más normal es que cada usuario pertenezca a un grupo de trabajo. De esta forma, cuando se gestiona un grupo, se gestionan todos los usuarios que pertenecen a éste. Es decir, es más fácil integrar varios usuarios en un grupo al que se le conceden determinados privilegios en el sistema, que asignar los privilegios de forma independiente a cada usuario.

Permisos del resto de usuarios

Por último, también los privilegios de los archivos contenidos en cualquier directorio, pueden tenerlos otros usuarios que no pertenezcan al grupo de trabajo en el que está integrado el archivo en cuestión. Es decir, a los usuarios que no pertenecen al grupo de trabajo en el que está el archivo, pero que pertenecen a otros grupos de trabajo, se les denomina resto de usuarios del sistema.

Muy lindo, pero como puedo identificar todo esto? Sencillo, abre una terminal y realiza lo siguiente:

$ ls -l

Nota: son letras “L” minúsculas ;)

Nos aparecerá algo como lo siguiente:

Page 3: Permisos y derechos en linux

Como podrán observar, este comando despliega o “lista” el contenido de mi HOME, lo que nos ocupa son las líneas de color rojo y verde. El recuadro de color rojo, nos muestra quien es propietario y el recuadro de color verde indica a qué grupo pertenece cada uno de los archivos y carpetas anteriormente listadas. En este caso tanto el propietario y el grupo se llaman “perseo”, pero bien pudieron haberse encontrado con un grupo distinto como pudiera ser “ventas”. Por lo demás, no se preocupen por ahora, lo veremos más adelante :D.

Tipos de permisos en GNU/Linux

Antes de aprender cómo se establecen los permisos en GNU/Linux, debemos saber cómo se pueden diferenciar los diferentes tipos de archivos que el sistema puede tener.

Cada archivo en GNU/Linux queda identificado por 10 caracteres mismos a los que se les denomina máscara. De estos 10 caracteres, el primero (de izquierda a derecha) hace referencia al tipo de archivo. Los 9 siguientes, de izquierda a derecha y en bloques de 3, hacen referencia a los permisos que se le conceden, respectivamente, al propietario, al grupo y al resto u otros. Una captura para demostrar todo este rollo:

Page 4: Permisos y derechos en linux

El primer carácter de los archivos puede ser el siguiente:

Permiso Identifica

- Archivo

d Directorio

b Archivo de bloques especiales (Archivos especiales de dispositivo)

c Archivo de caracteres especiales (Dispositivo tty, impresora…)

l Archivo de vinculo o enlace (soft/symbolic link)

p Archivo especial de cauce (pipe o tubería)

Los siguientes nueve caracteres son los permisos que se les concede a los usuarios del sistema. Cada tres caracteres, se referencian los permisos de propietario, grupo y resto de usuarios.

Los caracteres que definen estos permisos son los siguientes:

Permiso Identifica

- Sin permiso

r Permiso de lectura

w Permiso de escritura

x Permiso de ejecución

Permisos para archivos

Page 5: Permisos y derechos en linux

<° Lectura: permite, fundamentalmente, visualizar el contenido del archivo.<° Escritura: permite modificar el contenido del archivo.<° Ejecución: permite ejecutar el archivo como si de un programa ejecutable se tratase.

Permisos para directorios

<° Lectura: Permite saber qué archivos y directorios contiene el directorio que tiene este permiso.<° Escritura: permite crear archivos en el directorio, bien sean archivos ordinarios o nuevos directorios. Se pueden borrar directorios, copiar archivos en el directorio, mover, cambiar el nombre, etc.<° Ejecución: permite situarse sobre el directorio para poder examinar su contenido, copiar archivos de o hacia él. Si además se dispone de los permisos de escritura y lectura, se podrán realizar todas las operaciones posibles sobre archivos y directorios.

Nota: Si no se dispone del permiso de ejecución, no podremos acceder a dicho directorio (aunque utilicemos el comando “cd”), ya que esta acción será denegada. También permite delimitar el uso de un directorio como parte de una ruta (como cuando pasamos la ruta de un archivo que se encuentra en dicho directorio como referencia. Supongamos que queremos copiar el archivo “X.ogg” el cual se encuentra en la carpeta “/home/perseo/Z” -para lo cual la carpeta “Z” no tiene permiso de ejecución-, haríamos lo siguiente:

$ cp /home/perseo/Z/X.ogg /home/perseo/Y/

obteniendo con esto un mensaje de error diciéndonos que no tenemos los permisos suficientes para acceder al archivo :D). Si el permiso de ejecución de un directorio está desactivado, se podrá ver su contenido (si se cuenta con permiso de lectura), pero no se podrá acceder a ninguno de los objetos contenidos en él, pues para ello este directorio es parte del camino necesario para resolver la ubicación de sus objetos.

Gestión de permisos en GNU/Linux

Hasta ahora, hemos visto para que nos sirven los permisos en GNU/Linux, a continuación veremos cómo asignar o restar permisos o derechos.

Antes de comenzar, debemos de tener en cuenta que cuando damos de alta o creamos un usuario en el sistema, le concedemos de forma automática unos privilegios. Estos privilegios, por supuesto, no serán totales, es decir, los usuarios no dispondrán, normalmente, de los mismos permisos y derechos del superusuario. Cuando el usuario se crea, el sistema genera por defecto los privilegios del usuario para manejo de archivos y para manejo de directorios. Evidentemente, éstos pueden ser modificados por el administrador, pero el sistema genera unos privilegios más o menos válidos para la mayoría de las operaciones que cada usuario realizará sobre su directorio, sus archivos y sobre los directorios y archivos del resto de usuarios. Por lo general, son los siguientes permisos:

Page 6: Permisos y derechos en linux

<° Para archivos: - rw- r-- r--<° Para directorios: - rwx rwx rwx

Nota: no son los mismos permisos para todas las distribuciones de GNU/Linux.

Estos privilegios nos permiten crear, copiar y borrar archivos, crear nuevos directorios, etc. Veamos en la práctica todo esto :D:

Tomemos como ejemplo el archivo “CSS Avanzado.pdf”. Observemos que aparece de la siguiente manera: -rw-r--r-- … CSS Avanzado.pdf. Miremos más a fondo.

Tipo Usuario Grupo Resto de usuarios (otros) Nombre del archivo

- rw- r-- r-- CSS Avanzado.pdf

Esto significa que:

<° Tipo: Archivo<° El usuario puede: Leer (visualizar el contenido) y escribir (modificar) el archivo.<° El grupo al que pertenece el usuario puede: Leer (únicamente) el archivo.<° Otros usuarios pueden: Leer (únicamente) el archivo.

Para aquellos curiosos que se están preguntando en estos momentos a que se refieren los otros campos del listado obtenido por ls -l, aquí la respuesta:

Page 7: Permisos y derechos en linux

Si desean saber más acerca de los hard y soft/symbolic links, aquí la explicación y susdiferencias.

Bueno amigos, llegamos a la parte más interesante y pesada del tema en cuestión…

Asignación de permisos

El comando chmod (“change mode”) permite modificar la máscara para que se puedan realizar más o menos operaciones sobre archivos o directorios, dicho de otra forma, con chmod puedes quitar o eliminar derechos a cada tipo de usuarios. Si no se especifica el tipo de usuario al que queremos quitar, poner o asignar privilegios, lo que sucederá al realizar la operación es afectar a todos los usuarios simultáneamente.

Lo básico que hay que recordar es que le demos dar o quitar permisos en estos niveles:

Parámetro Nivel Descripción

u dueño dueño del archivo o directorio

g grupo grupo al que pertenece el archivo

o otros todos los demás usuarios que no son el dueño ni del grupo

Tipos de permiso:

Permiso Identifica

Page 8: Permisos y derechos en linux

r Permiso de lectura

w Permiso de escritura

x Permiso de ejecución

Dar permiso de ejecución al dueño:

$ chmod u+x komodo.sh

Quitar permiso de ejecución a todos los usuarios:

$ chmod -x komodo.sh

Dar permiso de lectura y escritura a los demás usuarios:

$ chmod o+r+w komodo.sh

Dejar solo permiso de lectura al grupo al que pertenece el archivo:

$ chmod g+r-w-x komodo.sh

Permisos en formato numérico octal

Hay otra forma de utilizar el comando chmod que, para muchos usuarios, resulta “más cómoda”, aunque a priori sea algo más compleja de entender ¬¬.

La combinación de valores de cada grupo de los usuarios forma un número octal, el bit “x” es 20 es decir 1, el bit w es 21 es decir 2, el bit r es 22 es decir 4, tenemos entonces:

<° r = 4<° w = 2<° x = 1

La combinación de bits encendidos o apagados en cada grupo da ocho posibles combinaciones de valores, es decir la suma de los bits encendidos:

Permiso Valor Octal Descripción

- - - 0 no se tiene ningún permiso

Page 9: Permisos y derechos en linux

- - x 1 solo permiso de ejecución

- w - 2 solo permiso de escritura

- w x 3 permisos de escritura y ejecución

r - - 4 solo permiso de lectura

r - x 5 permisos de lectura y ejecución

r w - 6 permisos de lectura y escritura

r w x 7 todos los permisos establecidos, lectura, escritura y ejecución

Cuando se combinan los permisos del usuario, grupo y otros, se obtienen un número de tres cifras que conforman los permisos del archivo o del directorio. Ejemplos:

Permiso Valor Descripción

rw- --- -– 600 El propietario tiene permisos de lectura y escritura

rwx --x --x 711 El propietario lectura, escritura y ejecución, el grupo y otros solo ejecución

rwx r-x r-x 755 El propietario lectura, escritura y ejecución, el grupo y otros pueden leer y ejecutar el archivo

rwx rwx rwx

777 El archivo puede ser leído, escrito y ejecutado por quien sea

r-- --- -– 400 Solo el propietario puede leer el archivo, pero ni el mismo puede modificarlo o ejecutarlo y por supuesto ni el grupo ni otros pueden hacer nada en el

rw- r-- --- 640 El usuario propietario puede leer y escribir, el grupo puede leer el archivo y otros no

Page 10: Permisos y derechos en linux

pueden hacer nada

Permisos especiales

Aún hay otro tipo de permisos que hay que considerar. Se trata del bit de permisos SUID (Set User ID), el bit de permisos SGID (Set Group ID) y el bit de permisos de persistencia (sticky bit).

setuid

El bit setuid es asignable a ficheros ejecutables, y permite que cuando un usuario ejecute dicho fichero, el proceso adquiera los permisos del propietario del fichero ejecutado. El ejemplo más claro de fichero ejecutable y con el bit setuid es:

$ su

Podemos ver que el bit está asignado como “s” en la siguiente captura:

Para asignar este bit a un fichero seria:

$ chmod u+s /bin/su

Y para quitarlo:

Page 11: Permisos y derechos en linux

$ chmod u-s /bin/su

Nota: Debemos utilizar este bit con extremo cuidado ya que puede provocar una escalada de privilegios en nuestro sistema ¬¬.

setgid

El bit setid permite adquirir los privilegios del grupo asignado al fichero, también es asignable a directorios. Esto será muy útil cuando varios usuarios de un mismo grupo necesiten trabajar con recursos dentro de un mismo directorio.

Para asignar este bit hacemos lo siguiente:

$ chmod g+s /carpeta_compartida

Y para quitarlo:

$ chmod g-s /carpeta_compartida

sticky

Este bit suele asignarse en directorios a los que todos los usuarios tienen acceso, y permite evitar que un usuario pueda borrar ficheros/directorios de otro usuario dentro de ese directorio, ya que todos tienen permiso de escritura.Podemos ver que el bit está asignado como “t” en la siguiente captura:

Page 12: Permisos y derechos en linux

Para asignar este bit hacemos lo siguiente:

$ chmod o+t /tmp

Y para quitarlo:

$ chmod o-t /tmp

Bueno amigos, ahora ya saben cómo proteger de mejor manera su información, con esto espero que dejen de buscar alternativas para Folder Lock o Folder Guard que en GNU/Linux no los necesitamos para nada XD.