Aug
18
2009
0

Comando chmod -R (recursivo) en directorios y archivos por separado

Unix Magazin Final
Creative Commons License photo credit:

En un post anterior hablamos exhaustivamente del comando chmod, que sirve para cambiar los privilegios de acceso a tus archivos en linux.

Vimos que con la opción -R podemos aplicar este comando recursivamente a un directorio, y así operar sobre todos los archivos y subdirectorios que contenga. Bien, espero que no hayas metido la pata ya.


Porque si así lo hacemos damos el mismo tipo de privilegios a directorios y archivos normales por igual.

Hace tiempo que tenía este problema con chmod. Recién ayer encontré un post sobre el tema Recursively chmod only directories or files.

Los siguientes comandos usan find y chmod conjuntamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Encontrar directorios (-type d) en el directorio actual (.) y darles
# acceso 755
find . -type d -exec chmod 755 {} \;

# Encontrar archivos (-type f) en el directorio actual (.) y darles
# acceso 644
find . -type f -exec chmod 644 {} \;

# Encontrar archivos (-type f) html (-name '*.htm*') en el subdirectorio
# web (./web) y darles acceso 644
find ./web -type f -name '*.htm*' -exec chmod 644 {} \;

# Encontrar archivos/directorios con permiso 777 (-perm 777) en el
# directorio actual (.) y darles acceso 755. La opción -print entrega
# más información sobre el resultado
find . -perm 777 -exec chmod 755 {} \; -print
Escrito por NomikOS en: Comandos |
Hoy 10 lectores.
Aug
01
2009
4

Comando chmod – Modificación de accesos a un archivo

Calculadora chmod
 
  read write execute
owner
group
other

No he podido hacer que esta calculadora aparezca en otro lugar más que en el principio. Es un muy sencillo plugin WP que hice para enmascarar el script en javascript desarrollado por Jeroen Vermeulen. Si lo quieres deja un comentario y si no, también. Como ves es un excelente juguete para practicar lo que aquí veremos.

NomikOS.-

Introducción

El comando chmod (change mode) permite asignar a un archivo o directorio distintos tipo de accesos –o permisos de acceso– a distintos tipos de usuarios.

1
2
3
4
5
6
7
8
9
10
man chmod
NAME
       chmod - change file mode bits
SYNOPSIS
       chmod [OPTION]... MODE[,MODE]... FILE...
       chmod [OPTION]... OCTAL-MODE FILE...
       chmod [OPTION]... --reference=RFILE FILE...

# o sea basicamente el formato es:
chmod [opciones] permisos archivo[s]

Tipos de permisos

Tenemos 3 tipos de permisos de acceso que pueden ser otorgados o revocados a cada archivo:

  • r read: lectura
  • w write: escritura –modificación, borrado, renombrado
  • x execute: ejecución –si es archivo, acceso si es directorio

  • Tipos de usuarios

    Tenemos 4 tipo de usuarios: usuario, grupo, otros y todos.

  • u user: dueño del archivo
  • g group: grupo al que pertenece el archivo
  • o others: el resto de usuarios
  • a all: todos los usuarios

  • Opciones

    Los más usados son:

  • R recursive: aplica el comando recursivamente a todos los archivos y subdirectorios de un directorio.
  • v verbose: informa de resultados por cada archivo procesado (no muy útil en verdad).

    Recuerda que las opciones siempre se anteceden por un (y sólo un) guión (-). Por ejemplo:

    chmod -vR ugo=rwx archivo

  • Operadores

    Los permisos pueden ser otorgados de la siguiente manera. Luego veremos otra forma, la octal.

  • + agrega permiso
  • - elimina permiso
  • = hace igual a (los ejemplos aclararán esto)

  • Ejemplos con notación literal

    Para entender la diferencia entre = y +/- fíjate muy bien en los comentarios (nada más) y (y mantiene los demás)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # en general haremos combinaciones: ugoa [operador] permisos
    chmod u/g/o/a +/-/= r/w/x

    # puedes definir varios accesos a varios archivos en un sólo paso
    # separando por comas los permisos y por espacios los archivos
    chmod u+rwx, go+rx, go-w archivo1 archivo2

    # dueño lee, escribe y ejecuta (es decir, permite todo tipo de acceso)
    chmod u=rwx archivo

    # grupo lee y ejecuta (nada más)
    # otros leen y escriben (nada más)
    chmod g=rx, o=rw archivo

    # dueño agrega permiso de escritura (y mantiene los demás)
    # grupo agrega permisos de lectura y ejecución (y mantiene los demás)
    # grupo elimina permisos de escritura (y mantiene los demás)
    chmod u+w, g+rx, g-w archivo

    # ahora dicho más sencillamente:
    # grupo y otros sólo pueden ejecutar el archivo
    # el dueño puede leerlo y ejecutarlo manteniendo otros permisos ya dados
    chmod go=x, u+rx archivo

    Modo octal

    Con lo ya visto puedes definir todos los tipos de permisos de una manera bastante representativa, verdad? Cuando ya tienes más experiencia buscas elegancia y eficiencia. Con el modo octal logras esto.
    Le llamamos octal porque usa números en base 8: un modo de contar con el que podemos obtener todos los números (0 .. infinito) usando sólo los dígitos 0 a 7.

    Solo recuerda esto. En una escala de 1 a 7:

  • Lo más preciado es poder leer un archivo. Le damos un 4.
  • Después, es poder escribir en él –no necesariamente leerlo. Le damos un 2.
  • Lo mínimo que podemos hacer con un archivo es poder ejecutarlo –sin saber como está escrito ni poder modificarlo. Le damos un 1.
  • En verdad, lo mínimo que podemos hacer con un archivo es nada. Le damos un 0.

    Ahora, si podemos hacer todo lo que queramos con el archivo –leerlo, modificarlo y ejecutarlo– le damos la suma de todos, un 7 (4+2+1)

    Asimilándolo al formato r-w-x tenemos:

  • r -leer- es un 4
  • w -escribir- es un 2
  • x -ejecutar- es un 1

  • Ahora que sabemos que como interpretar estos números, los usaremos escribiéndolos en un determinado orden.
    Este orden determina a que tipo de usuario (ugo) le asignamos que tipo de permiso –dado por los números 4,2,1,0,7; basándonos en su posición.

  • posición 1: u -dueño
  • posición 2: g -grupo
  • posición 3: o -otros

    posición 1 posición 2 posición 3 -> u g o

    Nota:

    El tipo de usuarios a (all: todos) está implicita, ya que u+g+o=a
    usuario + grupo + otros = todos

  • Eso es todo. Sencillo verdad?

    Ejemplos con notación octal

    Fíjate como obtenemos todas las combinaciones posibles sumando los permisos básicos 4, 2 y 1.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # dueño puede leer, escribir y ejecutar (4+2+1)
    # grupo puede escribir y ejecutar (2+1) --no leer
    # otros no tiene ningún acceso (0)
    chmod 730 archivo

    # este tipo de permiso es muy usado en archivos de servidores web
    # dueño puede leer y escribir (4+2)
    # grupo y otros sólo pueden leer (4)
    chmod 644 archivo

    # este tipo de permiso es muy usado en directorios de servidores web
    # dueño puede leer, escribir y acceder al directorio
    # grupo y otros pueden leer y acceder (4+1) achivos al directorio
    chmod 755 directorio

    La notación r-w-x es la usada por el comando ls -l para decirnos los permisos de cada archivo:

    1
    2
    3
    drwxr-xr-x  2 nomikos users      104 2009-07-10 03:54 backups
    -rwxr-xr-x  1 nomikos users   103282 2009-07-10 03:56 program
    -rw-r--r--  1 nomikos users 19734183 2009-07-31 07:27 blog.sql
    1
    2
    3
    -rwxr-xr-x // se representa como 755 en notación octal.
    -rw-rw-r-- // se representa como 664 en notación octal.
    -r-x------ // se representa como 500 en notación octal.

    El primer guión (-) dice que es un archivo regular, podría ser (d) de directorio, (l) link simbólico y otros.

    Por último, en general los links simbólicos siempre muestran todos los permisos para todos los tipos de usuarios:

    1
    2
    lrwxrwxrwx   1 root root     3 2009-07-18 15:50 X11R6 -> X11
    lrwxrwxrwx   1 root root     8 2009-07-18 15:50 adm -> /var/adm

    Eso es normal y no significa que el archivo apuntado tenga esos permisos. Si aplicas chmod a uno de estos archivos –los links tambien son archivos– los permisos se darán al archivo apuntado.

    Escrito por NomikOS en: Comandos |
    Hoy 8 lectores.

    Powered by WordPress. Theme: TheBuckmaker. Modifications by NomikOS