Marca lectura, escritura y ejecucion para propietario, grupo y otros para obtener el numero octal de chmod, la cadena simbolica rwx y un comando listo para pegar en la terminal.
Marca las casillas para obtener el numero, o escribe el numero para ver que permite realmente. Los permisos se aplican a tres audiencias - el propietario del archivo, el grupo propietario y todos los demas - y cada una recibe lectura, escritura y ejecucion de forma independiente. Cambia la rejilla o escribe un valor octal; ambos se mantienen sincronizados.
Quien
Lectura (4)
Escritura (2)
Ejecucion (1)
Propietario (u)
Grupo (g)
Otros (o)
–
Leer y escribir los bits de permisos de Unix
Tres triadas, tres bits cada una
Cada archivo Unix lleva nueve bits de permisos organizados en tres grupos de tres. La primera triada pertenece al propietario del archivo, la segunda al grupo del archivo y la tercera a todos los demas usuarios del sistema. Dentro de cada triada los bits significan lectura, escritura y ejecucion, y valen 4, 2 y 1 respectivamente. Sumar los valores de los bits que quieres produce un unico digito de 0 a 7, que es la razon por la que los permisos se escriben tradicionalmente como tres digitos octales.
Ese es todo el truco detras de un numero como 755. El digito del propietario es 7, es decir 4 + 2 + 1, asi que el propietario puede leer, escribir y ejecutar. Los digitos de grupo y de otros son ambos 5, es decir 4 + 1, asi que pueden leer y ejecutar pero no modificar. Escrito de forma simbolica el mismo valor se lee rwxr-xr-x, que es exactamente lo que imprime ls -l despues del caracter inicial de tipo de archivo.
Los tres verbos significan algo ligeramente distinto en un directorio. La lectura permite listar los nombres que contiene, la escritura permite crear y borrar entradas, y la ejecucion permite atravesarlo para alcanzar una ruta que ya conoces. Un directorio con lectura pero sin ejecucion es casi inutil: puedes ver los nombres pero no abrir nada detras de ellos.
Los valores que escribiras de verdad
Un punado de combinaciones cubre la mayor parte del trabajo real. 644 (rw-r--r--) es el modo normal de un documento o un archivo de codigo fuente: el propietario lo edita y los demas lo leen. 755 (rwxr-xr-x) es el modo normal de un directorio o de un script ejecutable, porque ambos necesitan el bit de ejecucion para poder usarse. 600 (rw-------) mantiene un archivo privado para su propietario, que es lo que OpenSSH exige para las claves privadas, y 700 hace lo mismo con un directorio.
Los modos que conceden escritura a otros merecen una segunda mirada. 777 permite que cualquier cuenta de la maquina sobrescriba o borre el archivo, y casi nunca es la respuesta correcta: es simplemente la forma mas rapida de hacer desaparecer un error de permisos sin entenderlo. Cuando un servidor web no puede escribir en un directorio de subidas, el arreglo real suele ser cambiar el usuario o el grupo propietario con chown, no abrir el archivo al mundo entero.
Los permisos tambien interactuan con la umask. Los archivos nuevos se crean con un modo por defecto reducido por el valor de la umask, habitualmente 022, y por eso un archivo recien creado suele llegar como 644 en lugar de 666.
Setuid, setgid y el sticky bit
Un cuarto digito puede colocarse delante de los tres habituales, y transporta tres bits especiales: setuid (4), setgid (2) y el sticky bit (1). Cambian con que identidad se ejecuta un programa y como trata un directorio a los archivos creados dentro de el.
Setuid en un ejecutable hace que se ejecute con los privilegios del propietario del archivo en lugar de los del usuario que lo lanzo. Asi es como passwd puede actualizar un archivo del sistema mientras lo ejecuta un usuario sin privilegios, y tambien es la razon por la que los binarios setuid se auditan con tanto cuidado: un fallo en uno de ellos es una via directa a los privilegios del propietario. Setgid hace lo mismo para el grupo. En un directorio, setgid tiene un significado mas amable: los archivos nuevos creados dentro heredan el grupo del directorio, lo que mantiene coherente una carpeta de proyecto compartida escriba quien escriba.
El sticky bit resulta mas familiar en /tmp, escrito normalmente como 1777. Permite que cualquiera cree archivos en el directorio mientras restringe el borrado al propietario de cada archivo, de modo que los usuarios no pueden eliminar los archivos temporales de los demas. En un listado largo estos bits sustituyen al caracter de ejecucion: una s en lugar de x significa que setuid o setgid estan activos, una S mayuscula significa que el bit esta puesto pero la ejecucion no, y una t marca el sticky bit.
Preguntas frecuentes
Que significa exactamente 755?
El propietario puede leer, escribir y ejecutar; el grupo y los demas pueden leer y ejecutar pero no modificar. Es el modo habitual para directorios y para scripts que deben poder ejecutar otros usuarios.
Mi script es legible pero dice permiso denegado. Por que?
Leer un archivo y ejecutarlo son bits distintos. Un script necesita el bit de ejecucion para el usuario que intenta lanzarlo, asi que 644 no basta: usa 755 o ejecutalo explicitamente a traves de su interprete.
Es 777 alguna vez la eleccion correcta?
Casi nunca en una maquina compartida o expuesta a internet, porque permite que cualquier cuenta local modifique o borre el archivo. Si un servicio no puede escribir, cambia el propietario o el grupo en lugar de ampliar el modo.
Cual es la diferencia entre 644 y 0644?
Ninguna para los nueve bits estandar. El cero inicial es el digito de bits especiales y ponerlo a 0 limpia setuid, setgid y el sticky bit. Mucha gente escribe cuatro digitos por pura costumbre.
Por que SSH rechaza mi clave privada?
OpenSSH rechaza una clave privada que otros usuarios puedan leer. Pon la clave en 600 y el directorio .ssh que la contiene en 700, y el aviso desaparece.
Se comporta chmod igual en macOS y en Linux?
Los modos numericos son identicos. Las diferencias aparecen en los atributos extendidos y las ACL, que macOS senala con un `+` tras la cadena de permisos y que chmod por si solo no gestiona.