Permisos básicos en GNU/Linux con chmod

53
176263

¡Buenas gente! 🙂 antes que nada cabe mencionar que es mi primer aporte a la comunidad, espero que a alguien le sea de utilidad

=> Estructura básica de permisos en archivos
=> Estructura básica de permisos en directorios
=> Usuario, Grupos y Otros
=> Chmod octal


1.- Estructura básica de permisos en archivos

Hay 3 atributos básicos para archivos simples: lectura, escritura y ejecutar.

>> Permiso de lectura (read)
Si tienes permiso de lectura de un archivo, puedes ver su contenido.

>> Permiso de escritura (write)
Si tienes permiso de escritura de un archivo, puedes modificar el archivo. Puedes agregar, sobrescribir o borrar su contenido.

>> Permiso de ejecución (execute)
Si el archivo tiene permiso de ejecución, entonces puedes decirle al sistema operativo que lo ejecute como si fuera un programa. Si es un programa llamado “foo” lo podremos ejecutar como cualquier comando.
O un script (interprete) que necesita permiso de lectura y ejecución, un programa compilado solo necesita ser lectura.

Los caracteres atribuidos a los permisos son:
r quiere decir escritura y viene de Read
w quiere decir lectura y viene de Write
x quiere decir ejecución y viene de eXecute

Usando chmod para cambiar los permisos
chmod (change mode) es el comando utilizado para cambiar permisos, se pueden agregar o remover permisos a uno o mas archivos con + (mas) o – (menos)

Si quieres prevenirte de modificar un archivo importante, simplemente quita el permiso de escritura en tu “archivo” con el comando chmod

$ chmod -w tuArchivo

si quieres hacer un script ejecutable, escribe

$ chmod +x tuScript

si quieres remover o agregar todos los atributos a la vez

$ chmod -rwx archivo
$ chmod +rwx archivo

también puedes usar el signo = (igual) para establecer los permisos en una combinación exacta, este comando remueve los permisos de escritura y ejecución dejando solo el de lectura

$ chmod =r archivo

Cuidado con editar los permisos de tus archivos, si los editas no olvides dejarlos como estaban originalmente

2.- Estructura básica de permisos en directorios

En el caso de los directorios tenemos los mismo permisos, pero con un significado diferente.

>> Permiso de lectura en un directorio
Si un directorio tiene permiso de lectura, puedes ver los archivos que este contiene. Puedes usar un “ls (list directory)” para ver su contenido, que tengas permiso de lectura en un directorio no quiere decir que puedas leer el contenido de sus archivos si no tienes permiso de lectura en esos.

>> Permiso de escritura en un directorio.
Con el permiso de escritura puedes agregar, remover o mover archivos al directorio

>> Permiso de ejecución en un directorio.
Ejecución te permite usar el nombre del directorio cuando estas accediendo a archivos en ese directorio, es decir este permiso lo hace que se tome en cuenta en búsquedas realizadas por un programa, por ejemplo, un directorio sin permiso de ejecución no seria revisado por el comando find

3.- Usuarios, Grupos y Otros

Ahora conocemos los 3 permisos y como agregar o remover estos, pero estos 3 permisos son almacenados en 3 lugares diferentes llamados.
Usuario (u) proviene de user
Grupo (g) proviene de group
Otros (o) proviene de other

Cuando ejecutas

$ chmod =r archivo

Cambia los permisos en 3 lugares, cuando haces una lista de directorios con “ls -l” veras algo parecido a.

-r--r--r--    1  wada  users  4096 abr 13 19:30 archivo

nota esas 3 “r”s para los 3 diferentes tipos de permisos

donde:

x-------------x-------------x
|  permisos   |  pertenece  |
x-------------x-------------x
|  rwx------  | usuario     |
|  ---r-x---  | grupo       |
|  ------r-x  | otros       |
x-------------x-------------x

podemos remover permisos para cada dueño; supongamos que tenemos un archivo:

-rwxr-xr-x    1  wada  users  4096 abr 13 19:30 archivo

Para remover los permisos de ejecución a grupos y otros basta con usar:

$ chmod g-x,o-x archivo

nuestro archivo quedara con estos permisos

-rwxr--r--    1  wada  users  4096 abr 13 19:30 archivo

si deseas remover a usuario el permiso de escritura:

$ chmod u-x archivo
-r-xr--r--    1  wada  users  4096 abr 13 19:30 archivo

Agregando y removiendo dos permisos a la vez:

$ chmod u-x+w archivo
-rw-r--r--    1  wada  users  4096 abr 13 19:30 archivo

¿muy simple verdad? big_smile

4.- chmod en octal

La representación octal de chmod es muy sencilla

Lectura tiene el valor de 4
Escritura tiene el valor de 2
Ejecución tiene el valor de 1

Entonces:

x-----x-----x-----------------------------------x
| rwx |  7  | Lectura, escritura y ejecución    |
| rw- |  6  | Lectura, escritura        |
| r-x |  5  | Lectura y ejecución       |
| r-- |  4  | Lectura               |
| -wx |  3  | Escritura y ejecución             |
| -w- |  2  | Escritura                         |
| --x |  1  | Ejecución             |
| --- |  0  | Sin permisos          |
x-----x-----x-----------------------------------x

Por lo tanto:

x------------------------x-----------x
|chmod u=rwx,g=rwx,o=rx  | chmod 775 | 
|chmod u=rwx,g=rx,o=     | chmod 760 |
|chmod u=rw,g=r,o=r      | chmod 644 |
|chmod u=rw,g=r,o=       | chmod 640 |
|chmod u=rw,go=          | chmod 600 |
|chmod u=rwx,go=         | chmod 700 |
x------------------------x-----------x

53 COMENTARIOS

    • un truco sencillo es verlo en binario: rwx representan 3 bits (Read,Write,eXecute). si queires permisos de lectura y escritura, te quedaría 110 binario, que en octal es el número 4. Además si sabes que se organiza como GUO (Grupo,Usuario,Otros) ya lo tienes hecho. Ejemplo: lectura, escritura y ejecución para grupo y usuario; lectura y ejecución para otros; quedaría: 111,111,101 –> 775

  1. Buenas!

    Muy buen artículo, pero una pequeña corrección debería realizarse:

    r quiere decir escritura y viene de Read
    w quiere decir lectura y viene de Write
    x quiere decir ejecución y viene de eXecute

    (R) Read es Lectura y (W) Write es Escritura

    Un saludo!

    • Eso pasa por hacer notas a altas horas de la noche hahahaha perdón mi error en cuanto pueda lo corrijo, ahorita me da error, Gracias 🙂

      • Te dá error.. ..porque por más que seas el autor del post, no te dan el permiso de editarlo una vez posteado..

        Otro pequeño error.. ..en el punto 3.-..cuando decís “si deseas remover a usuario el permiso de escritura”..pusiste “$ chmod u-x archivo”.. ..y debería ser “$ chmod u-w archivo”..para que coincida con lo que decís..y con el resultado..

  2. Yo he intentado compartir una carpeta con Samba, y dar permisos de lectura y escritura a invitados, pero el caso es que cuando creo una carpeta nueva desde uno de los dos equipos (huésped o cliente) esa nueva carpeta no tiene asignados permisos para lectura y escritura para todos… ¿Hay alguna manera de arreglar eso sin tener que editar los permisos cada vez que se crea una carpeta? Es un poco engorroso. Por cierto, todo lo hago mediante interfaz gráfica.

  3. Muy claro el artículo. Un detalle, donde dice:
    |chmod u=rwx,g=rx,o= | chmod 760 |
    Debería ser:
    |chmod u=rwx,g=rw,o= | chmod 760 |
    o bien:
    |chmod u=rwx,g=rx,o= | chmod 750 |

  4. Para Dark Purple:
    De lo poco que aun estoy aprendiendo, he rescatado este conocimiento (que no sé realmente si te ayudará en tu problema, pero vale probar; y que falta en esta publicación):
    Dar permisos recurrentes (-R) así:
    chmod -R 777 directorio_padre/*
    Esto daría todos los permisos a todos los usuarios, grupos, y otros respecto a la carpeta padre, y a todas las carpetas y archivos que se encuentren dentro (permisos por defecto para las nuevas creadas en este directorio, al menos así es en mi slax)

  5. En forma gráfica, deberías buscar alguna opción que diga “hacer recurrente esta orden” o “hacer esto para las carpetas incluidas”

  6. hola!

    mira, no se si sea pertinente pero tengo un problema con los permisos para grabar, borrrar, en mi mp4. No me deja cambiar los permisos, por lo que solo esta para lectura. Ingrese los comandos que diste pero la respuesta fue
    chmod: cambiando los permisos de «/media/0C87-B6D2»: Sistema de archivos de solo lectura

    he revisar muchos foros y nada me ha funcionado, te cuento que soy principiante en esto asi que puede ser que algo yo estoy haciendo mal.

    espero que puedas ayudarme.

    besos

  7. casualmente estuve leyendo sobre el comando chmod en una guia sobre administracion de sistemas linux, la cual tambien me quedo claro, solo que alla me hablaron de 3 comandos mas -s -S y -t que son unos permisos adicionales, eso fue lo que no me quedo claro, mañana le echare otra leida bien, muy buenas tus tablas, saludos

  8. Hola, muy interesante, quisiera saber como o as bien con que programa puedo editar archivos, chmod o q estan en esa carpeta,
    Quiero editar unos permisos, que están hay…

    O como es esto… gracias

    Gracias

  9. Buen aporte. Gracias por él. Quisiera hacer una aclaración que considero importante. En español remover no es equivalente al inglés remove. En español remover no significa eliminar.
    Según la RAE significa:

    1. tr. Pasar o mudar algo de un lugar a otro. U. t. c. prnl.
    2. tr. Mover algo, agitándolo o dándole vueltas, generalmente para que sus distintos elementos se mezclen.

    En este sentido, en lugar de remover, debería usarse el verbo eliminar.

    • Falto que agregaras la tercer linea…
      3. tr. Quitar, apartar u obviar un inconveniente.
      Nunca lo dije en el afán de “Eliminar” si no de quitar 🙂 perdón si se entendió por eliminar. Gracias por pasar y por la aclaración la tendré en cuenta.

  10. Buenas

    Por favor alguien me aclara una duda, eso segun tengo entendido aplica solo para el usuario y el grupo dueño del archivo o directorio, pero si tengo un usuario o grupo “xyz” por ejemplo, como hago para asignarle permiso ya sea de r, w o x solo a ese usuario o grupo y no al o los propietarios.

  11. Hola tengo un problemita las pc las tengo en lubuntu y en dominio con el usuario local no da problema pero con el usuario del dominio si y es a la hora de abrir mozilla y el thunderbird que se queda congelado todo el sistema espero puedan ayudarme
    saludes

  12. Excelente artículo… Solo me gustaría poder contar con la respuesta de algún piadoso de este foro, sobre la siguiente duda: “Si agregue a un usuario A a mi grupo GROUP, cuyos permisos de este grupo GROUP son rwx, todos los usuarios de este grupo, incluyendo A, tendrán estos permisos rwx sobre el directorio/archivos internos? Tomando en cuenta que los archivos internos ya tienen también rwx para el grupo GROUP? Gracias!!!!!! 🙂

  13. Muy útil tu aporte, extrañamente tengo un problema que los archivos que siempre he usado están “solo lectura” ejecute
    chmod 777 archivo
    root@Leps:/home/leps# chmod: cambiando los permisos de «Descargas/canaima-popular-4.1~estable_i386/canaima-popular-4.1~estable_i386.iso»: Sistema de ficheros de sólo lectura

    y con todos los archivo es lo mismo, de hecho lo ejecute con Ctrl+Alt+F1 como root y es lo mismo. Que puedo hacer?

  14. […] a estas opciones en el menú de WordPress. DashboardUsers Your Profile Contribuidor Nivel 1 Autor. Permisos básicos en GNU/Linux con chmod. ¡Buenas gente! Antes que nada cabe mencionar que es mi primer aporte a la comunidad, espero que a […]

  15. Está muy bien el tutorial, muy completo. Quizás los pequeños errores, pero ya se ha comentado que no se pueden editar. Aún así muy bueno para aprender

  16. Saludo visitantes de Desdelinux Blog.

    Me ocurre algo curioso usando una distro ubuntera como LMint.
    Copio y Pego la carpeta de un theme al directorio /usr/share/themes mediante uso de ‘sudo’ (pidiendo contraseña de mi usuario).
    Allí en esa carpeta del sistema, al hacer un listado mediante ‘ls -l’, ó ‘ls -la’, dicha carpeta del theme o tema, es de propiedad de mi nombre de usuario (y grupo), es decir, no de Root.

    Entonces, me dispongo a hacer el cambio de quitarle el permiso de escritura a mi usuario sobre dicho directorio del tema descargado, ya que al revisar todos sus ficheros y carpetas recursivamente con ‘ls -laR’, mi usuario es el único que puede escribir en dichas carpetas y ficheros. Claro supongo que todopoderoso Root también.
    Situándome desde Terminal, con ‘cd /usr/share/themes/el-theme-descargado’, y luego simplemente ejecutando ‘chmod -Rv u-w *’, sin requerir ‘sudo’ o permisos de root. Me informó que modificó exitosamente el permiso de escritura de mi usuario a todos los ficheros y subcarpetas de ‘el-theme-descargado’. Pero, no modificó los permisos de la carpeta madre desde donde ejecuto el comando, ‘el-theme-descargado’, teniendo en cuenta que por norma recursivamente debería hacerlo.

    Al revisar mediante el explorador de archivos “Caja” dicha carpeta del tema descargado, me aparecen las primeras subcarpetas de allí con un candadito, y ocurre algo absurdo, puedo copiar cualquiera de esas carpetas y pegarla allí mismo con todo su contenido, siendo que debería estar denegado. Y luego al intentar eliminar dicha copia, no puede efectuarlo: permiso denegado, supongo debido a que todos los subdirectorios y ficheros de dentro, antes se les hubo elminado el permiso de escritura, como practiqué.

    Desconozco si sea un Bug del comando chmod, el que no modifique el permiso de la carpeta desde donde se lance el comando, y luego el rollo de poder copiar subdirectorios que se les configuró sin permiso de escritura.

    En los artículos de internet, incluído el presente, describe que estos son los pasos para hacerlo recursivamente bien.
    Busqué en inglés, a ver si faltase alguna opción del comando, pero no hallé al respecto. Sin embargo induje de test previos, que el comando se podría usar así ‘chmod -Rv u-w ./ *’ , y efectivamente, me modifica los permisos de la carpeta o directorio desde donde ejecuto el comando, la carpeta del theme descargado, a pesar de que no he visto esa opción de ‘./’ en el uso de chmod.
    Si algún conocedor, por favor me pueda dilucidar sobre mis dudas.

    Gracias.

Dejar una respuesta