Linux pasa por ser un sistema seguro, y, aunque esta en nuestras manos, con muy poco esfuerzo podemos conseguir que nuestra maquina sea bastante segura. En este post veremos como establecer los permisos de archivos y directorios basándonos en grupos y usuarios que hemos debido crear como explicábamos en Empezando con linux. Grupos y usuarios.

En nuestra maquina todo fichero o directorio tiene establecido permisos para el propietario, para el grupo y para el resto. Estos permisos los podemos ver haciendo un

$ ls -l

salida del comando ls -lcomo comentábamos en el post dedicado a Archivos y directorios, en la columna 1 vemos los permisos asignados a cada elemento. Estos permisos nos indican para el propietario, el grupo y otros, si puede leer(r), puede grabar(w) o puede ejecutar(x)

Descripcion de los permisos de ficheros

Esta imagen os permitira haceros una idea de lo que estamos hablando, por ejemplo un fichero que tuviera estos permisos, significaria que el propietario puede leer y escribir, pero el grupo y otros solo puede leer.

La capacidad que tiene el sistema es bastante mas grande de lo que parece debido a su simplicidad, vamos a detallar un poco mas todo esto.

El primer espacio nos indica el tipo de entrada que es, según la siguiente tabla

Contenido Significado
Archivo común
d Directorio
c Dispositivo de caracteres (tty o impresora)
b Dispositivo de Bloque (usualmente disco rígido o CD-ROM)
l Enlace simbólico
s Socket
p Pipe

En un directorio normal, solo nos encontraremos con los tipos -,d y l

y a continuación en grupos de tres letras los permisos del propietario, los permisos del grupo y los permisos de los que no son propietario, ni son del grupo indicado. Tened en cuenta que cuando se habla del propietario, hablamos del usuario que aparece en la columna 3 y cuando hablamos del grupo, hablamos del que aparece en la columna 4

chmod – Modificar permisos

Para modificar los permisos, tenemos el comando chmod. Este comando tiene dos formas de trabajar: con simbolos y con numeros.

Para utilizarlos con  símbolos utilizaremos a,u,g,o que representan a todos (a «all»), al usuario (u), al grupo (g) y a todos los demás (o). Utilizaremos para agregar (+) quitar () o dejar invariantes los permisos (=), e indicaremos lo que queremos modificar con:

  • el permiso de lectura (r)
  • el permiso de escritura (w)
  • el permiso de ejecución (x).

Solo root y el dueño del archivo puede cambiarlo

Veamos todo esto en funcionamiento

$ ls -l
-rw-r–r– 1 king king 0 Mar 27 13:44 temp
$ chmod g+w temp
$ ls -l
-rw-rw-r– 1 king king 0 Mar 27 13:44 temp

hemos dado permiso de escritura en al fichero a los miembros del grupo king (g+w)

$ ls -l
-rw-r–r– 1 king king 0 Mar 27 13:44 temp
$ chmod a+w temp
$ ls -l
-rw-rw-rw- 1 king king 0 Mar 27 13:44 temp

En este caso le hemos dado permiso de escritura a todos (propietario,grupo y otros)

$ ls -l
-rw-r–r– 1 king king 0 Mar 27 13:44 temp
$ chmod o-r temp
$ ls -l
-rw-r—– 1 king king 0 Mar 27 13:44 temp

Y con esta linea (o-r),le hemos quitado a otros el permiso de lectura

La segunda forma del comando chmod nos permite gestionar los permisos jugando con la representación octal de los permisos. Si asignamos el valor 4 a r, el valor 2 a w y el valor 1 a x, cada columna la podemos representar con un numero; p. ej;

-rw-r–r–

tendrá los valores

644

con lo que si queremos dar permiso de grabación al grupo, deberemos hacer:

$ chmod 664 temp

como veis he puesto en la posición correspondiente al grupo, un 6 (4 + 2 , r+w) en vez de un 4 (r)

setuid, setgid, y stickbit

Realmente para representar los permisos de un fichero, necesitamos una posicion mas, (0644). El primer numero corresponde a tres valores que controlan el comportamiento del directorio o fichero; vamos a ver que pasa con los ficheros

setuid

Si activamos el setuid (4), lo que conseguimos es que, si el fichero es un ejecutable, se lance el proceso con los permisos de propietario del fichero en lugar del usuario conectado. Si el propietario del fichero es root, el proceso se ejecutara con los permisos de root, evitando que el usuario tenga conocimiento de la clave de root, o permisos en sudoers.

-rwxr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

chmod u+s file1.txt

o

chmod 4750 file1.txt

-rwsr-xr-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

Por ultimo remarcar que la s minuscula que aparece en permiso de ejecucion, será mayuscula si el fichero NO tiene permiso de ejecucion. Esta nota vale tambien para setgid

setgid

Si activamos el gid(2), pasará algo semejante, pero los permisos que se utilizaran seran los del grupo.

Y con directorios?

Para directorios la funcionalidad es totalmente distinta, el setuid no tiene uso, mientras que lo que provoca el setgid es que cualquier fichero nuevo, quede automáticamente asignado el grupo propietario del directorio.

Por ultimo el stikbit se utiliza para provocar un comportamiento de directorio muy especial, el ejemplo mas claro de uso, lo tenemos en el directorio tmp. Este directorio debe tener permisos 777, pero es conveniente que solo el propietario de un archivo, o root lo pueda borrar; pues para eso sirve el stikbit (1). Un directorio que lo tenga activo, impedirá que un fichero sea borrado por alguien que no sea su propietario, o root.

Algunas comprobaciones

Buscar todos los ficheros con permisos SUID o SGID

# find / -path /proc -prune -o -type f -perm +6000 -ls

Buscar todos los ficheros con permisos solo SUID

# find / -path /proc -prune -o -type f -perm +4000 -ls

Buscar todos los ficheros con permisos solo SGID

# find / -path /proc -prune -o -type f -perm +2000 -ls

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.