PDF de programación - Permisos en Linux

Imágen de pdf Permisos en Linux

Permisos en Linuxgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 12 de Diciembre del 2017)
1.463 visualizaciones desde el 12 de Diciembre del 2017
838,8 KB
18 paginas
Creado hace 9a (24/04/2015)
Permisos en Linux



En este documento pretendo describir la funcionalidad del sistema de permisos de Linux, a un nivel básico
claro, no queremos enfrentarnos a un sistema tan complejo como PAM de momento. Para realizar esta
introducción primero dejaremos claros los elementos involucrados en el control de permisos, las
estructuras de datos utilizadas y cómo el sistema operativo utiliza esos componentes para permitir o
denegar la realización de acciones en el sistema.

INDICE

1 USUARIOS – PROCESOS - FICHEROS

1.1

1.2

1.3

Usuarios

Procesos

Ficheros

2 ACCIONES Y PERMISOS

2.1

Acciones

2.1.1 Acciones sobre directorios

2.2

2.3

Permisos

Permisos sobre Directorios

2.3.1

Ejemplos de órdenes y permisos en directorios

2.4

Otras acciones

2.4.1

chmod

3 OTROS MODIFICADORES

3.1

SETUID y SETGID

3.1.1

SGID en directorios

3.2

Sitcky bit

PÁGINAS WEB RELACIONADAS

4


2

2

3

4

10

11
11

12

13
14

15
15

16

16
17

17

18

1 USUARIOS – PROCESOS - FICHEROS

Existen tres conceptos básicos que es necesario tener claro antes de comenzar hablar del sistema de
permisos de Linux, conceptos que además son comunes a casi todos los sistemas operativos tipo UNIX.
Estos conceptos son complementarios y en algunas ocasiones la misma palabra tiene diferentes
significados según se aplique a cada uno de ellos.

Estos tres conceptos son los usuarios, los procesos y los ficheros.

1.1 USUARIOS
Cuando hablamos de usuarios en un sistema Unix estamos hablando de la definición que se ha realizado
previamente de perfiles de ejecución. Estos perfiles de ejecución pueden estar ligados a un usuario
concreto o a una forma de trabajar.

Es cierto que lo más normal es la primera interpretación y que normalmente se confunde el término
usuario con “cuenta de acceso” a la máquina, pero un usuario de Linux es bastante más que eso. De hecho
nada más instalar Linux podemos ver que existen múltiples usuarios definidos, aunque en el proceso de
instalación se nos haya preguntado y sólo hayamos creado uno o dos (contando el superusuario y root).

Esto se hace así para definir perfiles de ejecución para algunas aplicaciones que no requieran todo los que
una aplicación asociada a root puede llegar a hacer en el sistema. Un ejemplo de esto es el caso de Android,
donde se crea un usuario por cada aplicación instalada para poder definir mejor los permisos que tendrá
dicha aplicación durante su ejecución… y eso aunque la persona que está usando el dispositivo Android
sea el mismo “usuario” (desde otro punto de vista claro).

No vamos a entrar aquí en definir las múltiples formas de definir usuarios en una máquina Unix (local,
NDIS, YP, ActiveDirectory….), eso se sale del propósito de este documento.

Todos los usuarios están identificados por un número y una cadena. Al número se le denomina
Identificador de Usuario o UID y la cadena se la denomina “login name”. Estos dos componentes son
ÚNICOS para cada usuario. El sistema utiliza el UID, pero para nosotros suele ser más cómodo recordar y
utilizar el “login”, de ahí su existencia.

Además de esta identificación personal, a cada usuario se le asignan una serie de identificadores
adicionales que se corresponden a los GRUPOS a los que el usuario pertenece. Estos grupos permiten
definir acciones comunes para conjuntos de usuarios. Por ejemplo, puede existir el grupo conf_web que
permita a todos los usuarios que pertenezcan a ese grupo acceder y modificar la configuración de un
posible servidor web.

¿Cómo saber a que grupos pertenezco?

La orden básica para obtener información de un usuario es id.

Leer la página de manual de esta orden es una buena forma de
comenzar a obtener información sobre todo este sistema. Existen
otras ordenes parecidas, por ejemplos groups, que permiten obtener
la misma información de otra forma, como casi siempre en UNIX, hay
múltipels formas de llegar al mismo resultado.



Todos los elementos del sistema tienen que pertenecer a un usuario, es decir, todos los demás elementos
que nos vamos a encontrar tendrán un campo UID que indicará que usuario es el responsable/propietario
de dicho elemento.

1.2 PROCESOS
Los procesos son programas en ejecución las aplicaciones que estamos ejecutando, hasta aquí espero que
todos estemos de acuerdo. Como ya hemos comentado en el curso, los procesos en UNIX forman un árbol
desde el proceso inicial y la relación de los elementos de ese árbol es de padres-hijos.

Cada proceso está etiquetado con un identificador único: su PID. Además almacena el identificador del
proceso que lo creó (PPID). Si el proceso que lo creó muere este valor se pone a “1” y se considera que el
proceso es hijo de INIT (proceso inicial).

Los procesos guardan información sobre el usuario que es responsable del proceso, recordemos que
llamamos UID a un entero que identifica a un usuario. Pero, para complicar un poco las cosas, los procesos
almacenan 4 UID y 4 identificadores de grupo. Estos identificadores se denominan:

 UIDreal: identificador del usuario que es el responsable de este proceso. Es un valor que no

cambia a lo largo de la vida del proceso, salvo que el proceso tenga privilegios especiales.

 GIDreal: identificador del grupo principal al que se asocia este proceso. Normalmente es el grupo

principal del usuario, pero puede cambiar bajo determinados supuestos.

 UIDefectivo: identificador de usuario que se utilizará para comprobar los permisos que tiene el
proceso. Este valor puede cambiar a lo largo de la vida de un proceso siguiendo un conjunto de
reglas que explicaremos a continuación.

 GIDefectivo: identificador de grupo adicional que se usará para determinar los permisos.
 UIDsaved,GIDsaved: UID y GID salvados del proceso. Se pueden utilizar para modificar los otros

UID /GID a su valor.

 UIDfs, GIDfs: caso especial de LINUX. Se añadieron para poder implementar algunos servicios de
Red como NFS y se han quedado. NO se suelen utilizar y toda la documentación hablará de UID y
GID reales y efectivos.

Un proceso siempre puede cambiar intercambiar el valor de los UID real, efectivo y salvado.

Un proceso recién arrancado tiene en estos campos los mismos valores que el proceso que lo crea.

Sobre los grupos


Además del GID efectivo, un proeso también está etiquetado con un
conjunto de grupos que normalmente es igual a los grupos a los que
pertenece el usuario que lo creó. Esto debe estar muy presente a la hora
de suponer que se va a denegar un acción a un proceso porque el
GIDEfectivo no es el apropiado, a que es posible que alguno de los grupos
secundarios sí que sea suficiente para realizar una acción.



Cojamos el el UID, si nos preguntamos por qué es necesario tener más de un identificador el motivo es
poder dar temporalmente más o menos accesos a un proceso y que el proceso siempre pueda volver a
utilizar el identificador original que tenía. Es decir, si un proceso cambia su UID efectivo por lo que sea el
proceso SIEMPRE podrá ver que identificador tenía originalmente y actuar en consecuencia, incluso puede
volver a poner como efectivo el identificador real o el salvado, o cambiar el real por el salvado.

¿Cómo saber los identificadores del proceso N en LINUX?

Suponemos que N es el PID del proceso.

La forma más rápida de conocer todoa su información en LINUX es acceder a
/proc/N/status. Para realizar este acceso bast con escribir en una consola: cat
/proc/N/status

De toda la información mostrada nos interesarán las líneas que empienzan con UID, Gid
y Groups.

Además de:

http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

http://man7.org/linux/man-pages/man5/proc.5.html



Para más información sugiero leer las páginas de manual setuid y seteuid y setresuid.

1.3 FICHEROS


Todo en UNIX es un fichero...

Es bastante habitual oír esta expresión que, aunque no es completamente cierta, sí que define la filosofía
de UNIX muy bien. La idea es que todo lo que no pueda recibir un nombre concreto, y hasta ahora sólo
tenemos procesos y usuarios, lo identificaremos como FICHERO. Esto quiere decir que los dispositivos, la
memoria, los elementos de control, las redes, las conexiones de red o los directorios se verán como
elementos del sistema de fichero de UNIX.

El sistema de ficheros de UNIX es un árbol, a diferencia de Windows donde encontramos lo que yo
denomino “un bosque”. Una ruta en Windows tiene el formato “NOM_DISP:/RUTA” donde NOM_DISP
suele ser una letra para aquellos dispositivos que se pueden acceder como un disco. En cambio en UNIX

tenemos un solo directorio raíz “/”, del que cuelgan TODOS los ficheros accesibles en un momento dado
por el sistema. Como se introducen los discos y otros dispositivos de bloques en esta estructura cae fuera
del objetivo de este documento, aunque siempre se puede leer la página del manual de la orden mount.

Ya sabemos que las órdenes básicas para movernos por el sistema de directorios son: cd para cambiar de
directorio, pwd para averiguar la ruta desde “/” del directorio donde nos encontramos y ls para mostrar
el contenido de un directorio. Para ls recordar la opción –l si se quiere obtener información adicional
sobre las entradas.

Por ejemplo, en un sistema se ha realizado “ls –l /” y se ha obtenido la siguiente salida:

mimateo@shell-labs:~$ ls -l /
total 120
drwxr-xr-x 2 root root 4096 dic 1 08:27 bin
drwxr-xr-x 3 root root 4096 dic 1 09:23 boot
drwxr-xr-x 2 root root 4096 jun 27 2011 cdrom
drwxr-xr-x 14 root root 3980 dic 3 13:09 dev
drwxr-xr-x 142 root root 12288 dic 3 13:10 etc
drwxr-xr-x
  • Links de descarga
http://lwp-l.com/pdf7849

Comentarios de: Permisos en Linux (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad