Permisos en LINUX/GNU Imprimir

  • linux, chmod, centos, ubuntu
  • 0

La gestión de permisos en Linux (proceso de autorización para uso de recursos) es bastante distinta a la que usa Windows. Linux usa un esquema de permisos bastante más simple, ya que las ACL de los recursos sólo admiten 3 tipos de usuarios, y básicamente 3 tipos de permisos. Sin embargo, aunque es un sistema muy simple, con una buena planificación permite desarrollar políticas de seguridad lo suficientemente buenas para el uso cotidiano de un sistema.

En Linux cada recurso pertenece a un usuario, y a un grupo de usuarios.

La columna permisos, consta de 10 caracteres y se divide de la siguiente manera:
1er. carácter: Nos indica que tipo de fichero es, los valores posibles para este carácter son:

  • d : directorio
  • l : enlace simbólico (ver sección )
  • b : dispositivo de bloque
  • c : dispositivo de caracteres
  • s : socket
  • p : tubería (pipe)
  • - : fichero regular

2do 3ro 4to carácter. Es el primer trío de permisos, y nos indican los permisos que el usuario (U) tiene sobre ese fichero. Este usuario es el que aparece en la línea del ls.

5to 6to 7mo carácter. Es el segundo trío de permisos, y nos indica los permisos que el grupo (G) tiene sobre ese fichero. Este grupo es el que aparece en la línea del ls.

8vo 9no 10mo carácter. Es el tercer trío de permisos, y nos indica los permisos que los otros (O) tienen sobre ese fichero. Otros se refiere a cualquier usuario que no sea el usuario del fichero (U) ni pertenezca al grupo del fichero (G).


TIPO USUARIO (u) GRUPO (g) OTROS (o)
- rwx rwx rwx
  read write exec read write exec read write exec

Para cada uno de estos tres tríos vemos que existen tres tipos de permisos fundamentales:

r: read (lectura). El usuario que tenga este permiso podrá si es un directorio listar los recursos almacenados en él, y si es cualquier otro tipo de fichero podrá leer su contenido.

w: write (escritura). Todo usuario que posea este permiso para un fichero podrá modificarlo. Si se posee para un directorio se podrán crear y borrar ficheros en su interior.


x: execute (ejecución). Este permiso para el caso de los ficheros permitirá ejecutarlos desde la línea de comandos y para los directorios, el usuario que lo posea tendrá acceso para realizar el resto de las funciones permitidas mediante los otros permisos (lectura y/o escritura). Si un usuario no tiene permiso de ejecución en un directorio, directamente no podrá entrar en el mismo, ni pasar por el.

Los tres tipos de permisos mencionados poseen una representación numérica basada en el sistema octal que parte de representar como 1'' los bits de los permisos otorgados y 0'' para los negados. Luego se transforma la representación binaria así obtenida en octal. De esta forma se obtienen para cada tipo de permiso los siguientes valores:


||< Permiso ||= R ||= W ||= X ||
||< Valor Binario ||= 4 ||= 2 ||= 1 ||

La combinación de los tres tipos de permisos para un tipo de usuario oscila desde cero (ningún permiso) hasta siete (todos los permisos).

Ejemplos:

rw- = 110 (4 + 2 + 0) (6 en octal)
rwx = 111 (4 + 2 + 1) (7 en octal)
r-x = 101 (4 + 0 + 1) (5 en octal)
r-- = 100 (4 + 0 + 0) (4 en octal)

Los permisos "totales'' de un recurso constan de nueve indicadores, donde los tres primeros indican los permisos asociados al dueño, los otros tres, al grupo y los últimos, al resto de los usuarios.


Ejemplos:
rwx r-x --- = 111 101 000 (750 en octal)
rw- r-- r-- = 110 100 100 (644 en octal)

Sólo el dueño de un recurso siempre tendrá derecho a cambiar sus permisos, además del root, por supuesto.

Comando chmod

Para cambiar los permisos de un recurso se utiliza el comando chmod.

Sintaxis:
chmod [opciones] <permisos> <ficheros>

Las formas de expresar los nuevos permisos son diversas, se puede emplear la representación numérica o utilizando caracteres.

Utilizando caracteres, la orden chmod se usa asi:
Chmod (letra del trío a cambiar) (+ - o =) (permisos) fichero

Donde:
Letra de trío a cambiar puede ser:
u - Usuario (1o trío)
g - Grupo (2o trío)
o - Otros (3o trío)
a - All, todos los tríos.

El carácter puede ser:
+ Otorga el permiso
- Quita el permiso
= deja el permiso exactamente igual (es decir, quitará todos los demas).
Permisos puede ser cualquier combinación de:
r para leer
w para escribir
x para ejecutar

Utilizando la representación numérica, simplemente hay que poner chmod (representación numérica) fichero

Ejemplo:
$ chmod u+x clase.txt # añade el permiso de ejecución al dueño

$ chmod g=rx program.sh # asigna exactamente los permisos de lectura y ejecución al grupo

$ chmod go-w profile # elimina el permiso de escritura en el grupo y en otros

$ chmod a+r,o-x *.ts # adiciona el permiso de lectura para todos los usuarios y elimina el de ejecución para otros

$ chmod 755 /home/pepe/dc/ # asigna los permisos con representación octal 755 (rwx r-x r-x)

$ chmod -R o+r apps/ # adiciona el permiso de lectura a otros para un directorio de forma recursiva (incluyendo todo su contenido)

$ chmod +x ./bin/* # adiciona el permiso de ejecución a todos los usuarios que les corresponde por defecto.

Umask

Para determinar cuales permisos se asocian por defecto a los ficheros o directorios creados, cada usuario posee una máscara de permisos. Esta se expresa en el formato numérico octal o sea, posee tres dígitos entre cero y siete (Ej. 166). La máscara indica que permisos no se desea que tenga el
recurso creado. Por defecto esta máscara es 022.

Para calcular los permisos finales dado que se tiene la máscara 022, se hace la siguiente operación por parte del sistema:

Ficheros = totales_para_ficheros – máscara = 666 - 022 = 644 = -rw-r--r--
Directorios = totales_para_directorios - máscara = 777 - 022 = 755 = drwxr-xr-x

Para colocar u observar la máscara se puede emplear el comando umask.

Sintaxis: umask [-S]

[máscara]
Ejemplos:

$ umask # sin argumentos muestra la máscara actual en formato numérico

$ umask -S # muestra el complemento de la máscara en formato de caracteres u

$ umask 037 # asigna la máscara 037 (niega permisos de ejecución y de
escritura para el grupo, y todos los permisos para el resto de los usuarios).

$ umask g=rx,o= # especifica el complemento la máscara utilizando el formato
de caracteres

Para ser bien restrictivos se recomienda hacer: $ umask 077

Los nuevos directorios tendrán el permiso: 700 = drwx------

Los nuevos ficheros tendrán el permiso: 600 = -rw-------

Resumiendo, si queremos que a partir de este momento los nuevos ficheros que creemos, tengan como permiso por ejemplo rw- r-- ---, calculamos la representación numérica de estos permisos, que
en este caso son 640. Ahora restamos a 666 el número obtenido, y obtenemos 026, pues este es el número que debemos usar en umask para conseguir lo que queremos. #umask 026.


Si en lugar de pensar en ficheros, pensamos en directorios, habría que restar no 666, sino 777. (Se recomienda no trabajar en números impares con umask, es decir, obviamos trabajar con el bit del permiso de ejecución)

¿Fue útil la respuesta?

« Atrás