1. Quién puede cambiar qué
Antes de los comandos, las reglas. Los permisos, el dueño y el grupo de un archivo están anotados en su inodo, y no cualquiera puede modificarlos:
| Para cambiar… | Comando | Puede hacerlo |
|---|---|---|
| Los permisos | chmod | El dueño del archivo, y root. |
| El grupo | chgrp | El dueño, pero solo hacia un grupo al que él pertenezca; y root, hacia cualquiera. |
| El dueño | chown | Solo root. |
Hay un detalle en la primera fila que conviene notar. Para cambiar los permisos de un archivo no hace falta tener permiso de escritura sobre él: alcanza con ser el dueño. Los permisos no forman parte del contenido. Por eso, en el caso paradójico del tema anterior, la dueña de un archivo de solo lectura siempre puede devolverse la escritura.
Preparamos un taller con un archivo, un directorio y un script de una línea:
$ cd ~/practica
$ mkdir taller
$ cd taller
$ touch informe.txt
$ mkdir docs
$ echo 'echo "Hola desde un script"' > hola.sh
$ ls -l
total 8
drwxrwxr-x 2 ana ana 4096 oct 12 16:30 docs
-rw-rw-r-- 1 ana ana 28 oct 12 16:30 hola.sh
-rw-rw-r-- 1 ana ana 0 oct 12 16:30 informe.txt
2. chmod y sus dos notaciones
chmod, de change mode, recibe una descripción de permisos y uno o más archivos. «Modo» es el nombre técnico del conjunto de permisos de un archivo. La descripción se puede escribir de dos maneras:
| Notación | Ejemplo | Dice |
|---|---|---|
| Simbólica | chmod g-w informe.txt | Un cambio: «quítale la escritura al grupo». Lo demás queda como está. |
| Octal | chmod 644 informe.txt | Un estado: «que los permisos sean exactamente estos», sin importar los anteriores. |
Las dos producen los mismos resultados y las dos se usan a diario. Las vemos por separado y al final las comparamos.
3. La notación simbólica
Una expresión simbólica tiene tres partes, que responden tres preguntas: a quién, qué operación, qué permiso.
chmod g-w informe.txt
│││
││└─ qué permiso: w, escritura
│└─ qué operación: -, quitar
└─ a quién: g, el grupo
| A quién | Operación | Permiso |
|---|---|---|
u — el dueño (user) | + — agregar | r — lectura |
g — el grupo | - — quitar | w — escritura |
o — los otros | = — fijar exactamente | x — ejecución |
a — todos (all): los tres a la vez |
Las letras de la primera columna son las que presentamos en el tema 17. Veamos una serie de cambios sobre informe.txt, que empieza en rw-rw-r--. La opción -v hace que chmod informe lo que hizo, en las dos notaciones:
$ chmod -v g-w informe.txt # quitar escritura al grupo
mode of 'informe.txt' changed from 0664 (rw-rw-r--) to 0644 (rw-r--r--)
$ chmod -v o-r informe.txt # quitar lectura a los otros
mode of 'informe.txt' changed from 0644 (rw-r--r--) to 0640 (rw-r-----)
$ chmod -v a+r informe.txt # dar lectura a todos
mode of 'informe.txt' changed from 0640 (rw-r-----) to 0644 (rw-r--r--)
Cada comando tocó un solo permiso y dejó intactos los demás. Esa es la virtud de la notación simbólica: no hace falta saber cómo estaba el archivo para modificarle una cosa.
Con ella se puede reproducir la situación del tema anterior, y comprobar que el algoritmo del kernel no tiene contemplaciones con el dueño:
$ chmod u-w informe.txt # la dueña se quita la escritura
$ ls -l informe.txt
-r--r--r-- 1 ana ana 0 oct 12 16:30 informe.txt
$ echo "una línea" >> informe.txt
bash: informe.txt: Permission denied
$ chmod u+w informe.txt # pero puede devolvérsela
4. Simbólica: combinar, fijar y copiar
La expresión admite varias letras en cada parte y varias cláusulas separadas por comas, sin espacios:
| Expresión | Efecto |
|---|---|
go-w | Quita la escritura al grupo y a los otros. |
u+rw | Agrega lectura y escritura al dueño. |
u+x,go-w | Dos cambios en un solo comando. |
go= | Deja al grupo y a los otros sin ningún permiso. |
u=rw,g=r,o= | Fija los tres tríos completos: rw-r-----. |
g=u | Da al grupo los mismos permisos que tiene el dueño. |
+x | Sin indicar a quién: agrega la ejecución a todos los que la configuración del sistema permita. |
El operador = se comporta distinto de los otros dos, y es el que acerca la notación simbólica a la octal: no agrega ni quita, sino que reemplaza el trío entero. g=r deja al grupo solo con lectura, tuviera lo que tuviera.
$ chmod go= informe.txt
$ ls -l informe.txt
-rw------- 1 ana ana 0 oct 12 16:30 informe.txt
$ chmod u=rw,g=r,o= informe.txt
$ ls -l informe.txt
-rw-r----- 1 ana ana 0 oct 12 16:30 informe.txt
Queda una letra más, que veremos en la sección 9: la X mayúscula, pensada para los cambios recursivos.
5. Hacer ejecutable un script
El uso más repetido de chmod en la vida de un programador es este. Un script recién escrito no se puede ejecutar, porque los archivos nacen sin la x:
$ ./hola.sh
bash: ./hola.sh: Permission denied
$ chmod +x hola.sh
$ ls -l hola.sh
-rwxrwxr-x 1 ana ana 28 oct 12 16:30 hola.sh
$ ./hola.sh
Hola desde un script
Con el permiso otorgado, el archivo de texto pasó a funcionar como un comando. ls lo muestra ahora en verde. El ./ delante sigue siendo necesario por lo que vimos en el tema 3: la shell no busca comandos en el directorio actual.
| Comando | Quién puede ejecutarlo después |
|---|---|
chmod +x script | Todos. Es la forma habitual. |
chmod u+x script | Solo el dueño. Lo indicado para un script personal. |
El permiso de ejecución se da a lo que se entiende y en lo que se confía. Antes de hacer ejecutable un archivo descargado, conviene leerlo: es texto, y less lo muestra. Los scripts son el tema 41, y la materia de todo el curso siguiente.
6. La notación octal
La segunda notación describe los nueve permisos con tres dígitos, uno por trío. Cada dígito se obtiene sumando el valor de los permisos presentes:
| Permiso | Valor |
|---|---|
r — lectura | 4 |
w — escritura | 2 |
x — ejecución | 1 |
- — ausente | 0 |
rwxr-xr-- se escriben 754: cada trío se convierte en un dígito sumando 4, 2 y 1.Como los tres valores son distintas potencias de dos, cada suma corresponde a una sola combinación. Hay ocho posibles, del 0 al 7, y de ahí el nombre: es un número en base ocho.
| Dígito | Suma | Trío | Significa |
|---|---|---|---|
| 7 | 4 + 2 + 1 | rwx | Todo. |
| 6 | 4 + 2 | rw- | Leer y escribir. |
| 5 | 4 + 1 | r-x | Leer y ejecutar. |
| 4 | 4 | r-- | Solo leer. |
| 3 | 2 + 1 | -wx | Escribir y ejecutar. |
| 2 | 2 | -w- | Solo escribir. |
| 1 | 1 | --x | Solo ejecutar. |
| 0 | 0 | --- | Nada. |
En la práctica se usan cinco: 7, 6, 5, 4 y 0. No hace falta memorizar la tabla; alcanza con recordar 4, 2, 1 y sumar. La conversión inversa es igual de mecánica: un 6 solo puede ser 4 + 2, es decir, rw-.
$ chmod 640 informe.txt
$ chmod 755 hola.sh
$ chmod 700 docs
$ ls -l
total 8
drwx------ 2 ana ana 4096 oct 12 16:30 docs
-rwxr-xr-x 1 ana ana 28 oct 12 16:30 hola.sh
-rw-r----- 1 ana ana 0 oct 12 16:30 informe.txt
7. Los números de todos los días
Unos pocos valores cubren casi todos los casos, y terminan reconociéndose como palabras. Son los que en el tema anterior mostraba stat:
| Número | En un archivo | En un directorio | Uso |
|---|---|---|---|
| 644 | rw-r--r-- | — | Archivo que todos leen y solo su dueño modifica. |
| 600 | rw------- | — | Archivo privado: claves, contraseñas, datos personales. |
| 640 | rw-r----- | — | Legible para un grupo, cerrado al resto. |
| 664 | rw-rw-r-- | — | Archivo de trabajo compartido con el grupo. |
| 755 | rwxr-xr-x | rwxr-xr-x | Programa o script público; directorio que todos pueden recorrer. |
| 700 | rwx------ | rwx------ | Script o directorio privados. |
| 750 | rwxr-x--- | rwxr-x--- | Accesible para el grupo, cerrado al resto. |
| 775 | rwxrwxr-x | rwxrwxr-x | Directorio de trabajo de un grupo. |
La tabla tiene una regularidad que sirve de control. Los números de los archivos comunes son pares —6, 4, 0—, porque no llevan x. Los de los directorios y los programas son impares —7, 5—, o cero, porque la x, que vale 1, acompaña a la r. Un 6 o un 4 en un directorio, o un 7 en un documento, casi siempre son un error.
Verás a veces cuatro dígitos, como 0644, en la salida de stat y de chmod -v. El primero corresponde a los permisos especiales del tema 21; cuando vale cero se puede omitir.
8. Simbólica u octal
| Simbólica | Octal | |
|---|---|---|
| Expresa | Un cambio respecto de lo que hay | El estado final completo |
| Lo que no se nombra | Se conserva | Se reemplaza |
| Hay que saber cómo estaba | No | No, pero hay que decidir los nueve permisos |
| Ventaja | Se lee como una frase; no altera lo demás | Breve y sin ambigüedad: después del comando, se sabe exactamente qué quedó |
| Riesgo | El resultado depende del punto de partida | Pisa permisos que quizá convenía conservar |
| Situación | Conviene | Ejemplo |
|---|---|---|
| Agregar o quitar un permiso puntual | Simbólica | chmod +x script.sh |
| Dejar un archivo en un estado conocido | Octal | chmod 600 clave.pem |
| Cambiar muchos archivos con permisos distintos entre sí | Simbólica | chmod -R go-w proyecto |
| Seguir una documentación o un mensaje de error | La que use | Casi siempre, octal |
La tercera fila es el caso en que la diferencia importa de verdad. En un directorio con programas, documentos y subdirectorios, cada uno con sus permisos, go-w les quita a todos la escritura ajena respetando lo demás. Un número los igualaría a todos, con los resultados de la sección siguiente.
9. Cambios recursivos
La opción -R aplica el cambio a un directorio y a todo lo que contiene. Es potente, y tiene una trampa que conviene ver ocurrir. Ponemos algo dentro de docs y cometemos el error clásico: aplicar a un árbol entero el número de un archivo.
$ touch docs/a.txt docs/b.txt
$ mkdir docs/sub
$ chmod -R 644 docs # «que sean todos de lectura»
chmod: cannot access 'docs/a.txt': Permission denied
chmod: cannot access 'docs/b.txt': Permission denied
chmod: cannot access 'docs/sub': Permission denied
$ ls -ld docs
drw-r--r-- 3 ana ana 4096 oct 12 16:41 docs
$ cd docs
bash: cd: docs: Permission denied
chmod aplicó el 644 al directorio, y con eso le quitó la x. Sin permiso de paso no pudo llegar a los archivos de adentro, ni puede entrar su dueña. El número era correcto para un archivo y fatal para un directorio. Se repara devolviendo el permiso:
$ chmod 755 docs
El problema de fondo es que archivos y directorios necesitan permisos distintos: los directorios requieren x, los documentos no deben tenerla. Para eso existe la X mayúscula de la notación simbólica:
La X mayúscula otorga el permiso de ejecución solo a los directorios, y a los archivos que ya lo tienen para alguien. A los archivos comunes no se lo da.
$ chmod -R u=rwX,go=rX docs
$ ls -l docs
total 4
-rw-r--r-- 1 ana ana 0 oct 12 16:41 a.txt
-rw-r--r-- 1 ana ana 0 oct 12 16:41 b.txt
drwxr-xr-x 2 ana ana 4096 oct 12 16:41 sub
Un solo comando dejó los archivos en 644 y los directorios en 755. La otra manera de lograrlo es separar los dos casos con find, del tema 10, que es más larga y más explícita:
$ find docs -type d -exec chmod 755 {} +
$ find docs -type f -exec chmod 644 {} +
Un cambio recursivo no tiene deshacer: los permisos anteriores de cada archivo, que podían ser distintos entre sí, se pierden. Un chmod -R o un chown -R lanzado con sudo sobre /, /etc o /usr por una ruta mal escrita deja el sistema inservible, y la reparación suele ser reinstalar. Valen las comprobaciones del rm -r: dónde estoy, sobre qué voy a actuar, y la línea releída.
10. chown y chgrp: dueño y grupo
Los otros dos datos del inodo se cambian con comandos propios. chgrp, de change group, cambia el grupo, y el dueño de un archivo puede usarlo siempre que el grupo de destino sea uno de los suyos:
$ chgrp users informe.txt # ana pertenece a «users»: puede
$ ls -l informe.txt
-rw-r----- 1 ana users 0 oct 12 16:30 informe.txt
$ chgrp root informe.txt # no pertenece a «root»: no puede
chgrp: changing group of 'informe.txt': Operation not permitted
Con el primer comando, el archivo quedó legible para todos los miembros de users, porque el trío del grupo es r--. Así se comparte: se elige el grupo, y se ajusta su trío.
chown, de change owner, cambia el dueño, y admite cambiar el grupo en la misma operación. Requiere ser root, de modo que se usa con sudo:
| Comando | Cambia |
|---|---|
chown luis archivo | El dueño. |
chown luis:ventas archivo | El dueño y el grupo. |
chown :ventas archivo | Solo el grupo. Equivale a chgrp. |
chown luis: archivo | El dueño, y el grupo por el primario de ese usuario. |
chown -R luis:ventas directorio | Lo mismo, en todo un árbol. |
$ chown root informe.txt
chown: changing ownership of 'informe.txt': Operation not permitted
$ sudo chown root:root informe.txt
[sudo] password for ana:
$ ls -l informe.txt
-rw-r----- 1 root root 0 oct 12 16:30 informe.txt
$ cat informe.txt
cat: informe.txt: Permission denied
El archivo está en el directorio de ana, lo creó ella, y ya no puede leerlo: no es la dueña ni pertenece al grupo root, y el trío de los otros es ---. El algoritmo del tema 17, aplicado sin excepciones.
Lo que sí puede hacer es borrarlo, y es la demostración práctica de la regla más extraña del tema anterior:
$ rm informe.txt
rm: remove write-protected regular empty file 'informe.txt'? y
$ ls
docs hola.sh
Un archivo de root, sin ningún permiso para ella, eliminado por una usuaria común. Borrar es modificar el directorio, y el directorio taller es suyo.
El uso más frecuente de chown es precisamente reparar esta situación: archivos que quedaron a nombre de root dentro del directorio personal por haber usado sudo donde no hacía falta. Se corrige con sudo chown -R ana:ana directorio.
11. Por qué no se puede regalar un archivo
Que el dueño no pueda ceder lo suyo a otro usuario parece una restricción innecesaria. Tiene dos razones:
| Si un usuario pudiera cambiar el dueño de sus archivos… | Consecuencia |
|---|---|
| Podría atribuir a otro lo que él creó. | El dueño de un archivo dejaría de ser una prueba de quién lo puso allí. |
| Podría eludir los límites de espacio. | Donde hay cuotas de disco por usuario, llenaría el disco a nombre de otro. |
El dueño de un archivo es, por eso, un dato confiable: solo el administrador lo asigna. La manera de pasarle un archivo a otra persona sin ser root es que ella lo copie, con lo que la copia nace a su nombre.
Esto explica también una diferencia entre dos mensajes que hasta ahora parecían sinónimos:
| Mensaje | Significa |
|---|---|
Permission denied | Los permisos del archivo o de un directorio no te autorizan. Otro usuario, o tú con otros permisos, podría. |
Operation not permitted | La operación está reservada a root, o al dueño. No depende de los nueve caracteres. |
12. umask: los permisos de nacimiento
Queda una pregunta que el taller plantea desde el principio: ¿por qué los archivos nuevos aparecieron con rw-rw-r-- y los directorios con rwxrwxr-x? No lo decidimos nosotros.
Un programa que crea un archivo propone permisos amplios: 666 para un archivo común, 777 para un directorio. El sistema recorta esa propuesta con un filtro que cada proceso lleva consigo:
La máscara de creación, o umask, es un número que indica qué permisos se quitan a todo archivo o directorio nuevo.
$ umask
0002
$ umask -S # en forma simbólica: lo que se concede
u=rwx,g=rwx,o=rx
Se lee con los mismos valores 4, 2 y 1, pero al revés: cada dígito dice lo que no se da. El valor de Ubuntu, 002, quita solo la escritura (2) a los otros:
| Archivo | Directorio | |
|---|---|---|
| Propuesta del programa | 666 — rw-rw-rw- | 777 — rwxrwxrwx |
Máscara 002 | quita -------w- | quita -------w- |
| Resultado | 664 — rw-rw-r-- | 775 — rwxrwxr-x |
Son exactamente los permisos que venimos viendo desde el tema 2. Los archivos nunca nacen ejecutables porque la propuesta de partida, 666, no incluye la x: es la protección de la que hablamos en el tema anterior.
| umask | Archivos nuevos | Directorios nuevos | Carácter |
|---|---|---|---|
002 | 664 | 775 | Compartido con el grupo. El valor de Ubuntu, razonable porque cada usuario tiene su grupo privado. |
022 | 644 | 755 | Solo el dueño escribe. El valor tradicional, y el de root. |
027 | 640 | 750 | El grupo lee; los otros, nada. |
077 | 600 | 700 | Todo privado. |
El comando umask seguido de un número cambia la máscara de la shell actual, y afecta a lo que se cree a partir de ese momento. Los archivos existentes no cambian.
$ umask 077
$ touch privado.txt
$ mkdir reservado
$ ls -ld privado.txt reservado
-rw------- 1 ana ana 0 oct 12 16:55 privado.txt
drwx------ 2 ana ana 4096 oct 12 16:55 reservado
$ umask 002 # volver al valor habitual
Es útil antes de generar archivos delicados: nacen cerrados, en lugar de quedar abiertos un instante hasta que se les aplique chmod. El cambio dura lo que la shell; para hacerlo permanente se escribe en ~/.bashrc, que estudiamos en el tema 34. umask es un comando interno, por la misma razón que cd: modifica un dato de la propia shell.
13. Recetas
| Quiero… | Comando |
|---|---|
| Ejecutar un script que escribí | chmod +x script.sh |
| Que un archivo sea solo mío | chmod 600 archivo |
| Que un directorio sea solo mío | chmod 700 directorio |
| Proteger un archivo de mis propios descuidos | chmod a-w archivo |
| Que nadie más que yo modifique un árbol | chmod -R go-w directorio |
| Dejar un árbol con permisos normales | chmod -R u=rwX,go=rX directorio |
| Compartir un directorio con un grupo | chgrp -R grupo dir y chmod -R g+rwX dir |
Recuperar archivos que quedaron a nombre de root | sudo chown -R ana:ana directorio |
| Copiar los permisos de un archivo a otro | chmod --reference=modelo destino |
La segunda fila es de aplicación obligada en algunos casos. Ciertos programas se niegan a usar un archivo secreto si otros usuarios pueden leerlo. El más conocido es ssh, que rechaza una clave privada con permisos distintos de 600, con un aviso de que el archivo está «demasiado abierto».
14. Las malas ideas
Hay una receta que no está en la tabla y que circula por todos los foros como solución universal:
777 concede lectura, escritura y ejecución a todos los usuarios y a todos los programas del sistema. El Permission denied desaparece, sí, porque ya no hay permisos que negar. Cualquier proceso, incluido un servicio comprometido, puede modificar o reemplazar esos archivos. Cuando un problema «se resuelve» con 777, la causa real era otra —el dueño equivocado, un grupo que faltaba, un directorio del camino— y sigue sin resolverse. El diagnóstico del tema 17 lleva dos minutos y da la solución correcta.
| Mala idea | Qué sale mal | En su lugar |
|---|---|---|
chmod -R 777 directorio | Todo queda abierto y todos los documentos pasan a ser ejecutables. | Ajustar el dueño o el grupo, y dar g+rwX. |
chmod -R 644 directorio | Los directorios pierden la x y quedan inaccesibles. | u=rwX,go=rX, o find por tipo. |
chmod -R 755 directorio | Todos los archivos pasan a ser ejecutables. | Lo mismo. |
sudo chown -R ana / y variantes | El sistema deja de funcionar: muchos programas exigen que ciertos archivos sean de root. | Limitar el cambio al directorio que corresponde. |
sudo para trabajar en el directorio personal | Deja archivos de root que luego no se pueden modificar. | Sin sudo; y reparar con chown lo que haya quedado. |
Desarmamos el taller. Todo lo que queda en él es de ana:
$ cd ~/practica
$ rm -r taller
$ ls
fotos informe.txt notas.txt tareas.txt
Y la referencia del tema:
| Comando | Qué hace |
|---|---|
chmod u+x archivo | Agrega un permiso. Las clases son u, g, o, a; las operaciones, +, -, =. |
chmod 644 archivo | Fija los permisos. r vale 4, w vale 2, x vale 1. |
chmod -R … directorio | Aplica el cambio a todo un árbol. |
chmod -v … | Informa cada cambio. |
chgrp grupo archivo | Cambia el grupo. |
sudo chown usuario:grupo archivo | Cambia el dueño y el grupo. |
umask | Muestra la máscara de creación. |
umask 077 | La cambia para la shell actual. |
A lo largo del tema usamos sudo como una fórmula. En el tema 19 lo estudiamos: qué es actuar como administrador, qué diferencia hay entre su y sudo, y cómo se decide quién puede hacerlo.
15. Resumen
- Los permisos los cambia el dueño del archivo o
root; el dueño, soloroot; el grupo, el dueño hacia uno de sus propios grupos. chmodtiene dos notaciones. La simbólica expresa un cambio; la octal, el estado completo.- En la simbólica se indica a quién (
u,g,o,a), la operación (+,-,=) y el permiso (r,w,x). Varias cláusulas se separan con comas. chmod +xhace ejecutable un script.- En la octal, cada trío es un dígito: la suma de 4 por lectura, 2 por escritura y 1 por ejecución.
- Los valores habituales son 644 y 600 para archivos, 755 y 700 para programas y directorios.
-Raplica el cambio de manera recursiva. Un número pensado para archivos deja inaccesibles los directorios; laXmayúscula da ejecución solo a los directorios.chgrpcambia el grupo ychownel dueño, o ambos con la formausuario:grupo.Operation not permittedindica una operación reservada arooto al dueño;Permission denied, que los permisos no alcanzan.umaskes la máscara que se quita a los permisos de todo archivo nuevo. Con002, los archivos nacen en 664 y los directorios en 775.chmod 777elimina toda protección y no corrige la causa del problema.
16. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Quién puede cambiar los permisos de un archivo? ¿Y su dueño?
Los permisos, el dueño del archivo y root. El dueño, solamente root.
2. ¿Qué hace chmod go-w archivo?
Quita el permiso de escritura al grupo y a los otros. Los demás permisos no cambian.
3. ¿Qué diferencia hay entre chmod g+r y chmod g=r?
La primera agrega la lectura al grupo, conservando lo que tuviera. La segunda deja al grupo únicamente con lectura, quitándole cualquier otro permiso.
4. Escribiste un script y al ejecutarlo recibes «Permission denied». ¿Qué comando lo resuelve?
chmod +x script.sh, o chmod u+x script.sh si solo debe poder ejecutarlo su dueño.
5. ¿Cuánto valen r, w y x en la notación octal?
4, 2 y 1. Cada dígito es la suma de los permisos presentes en un trío.
6. Convierte a octal: rw-r--r--, rwxr-x--- y rw-------.
644, 750 y 600.
7. Convierte a letras: 755, 640 y 700.
rwxr-xr-x, rw-r----- y rwx------.
8. ¿Por qué un número de permisos impar en un documento de texto suele ser un error?
Porque un dígito impar incluye el 1, la ejecución, y un documento no debería ser ejecutable.
9. ¿Cuándo conviene la notación simbólica y cuándo la octal?
La simbólica, para agregar o quitar un permiso sin alterar los demás, sobre todo en muchos archivos. La octal, para dejar un archivo en un estado exacto y conocido.
10. ¿Qué ocurre con chmod -R 644 proyecto, y cómo se hace bien?
Los directorios pierden el permiso de paso y quedan inaccesibles. Lo correcto es chmod -R u=rwX,go=rX proyecto, o aplicar permisos distintos a archivos y directorios con find.
11. ¿Qué hace la X mayúscula?
Da el permiso de ejecución solo a los directorios y a los archivos que ya son ejecutables para alguien. No lo da a los archivos comunes.
12. ¿Qué hace sudo chown -R luis:ventas /srv/datos?
Asigna el usuario luis como dueño y ventas como grupo del directorio y de todo su contenido.
13. ¿Qué diferencia hay entre «Permission denied» y «Operation not permitted»?
El primero indica que los permisos del archivo o de un directorio no autorizan el acceso. El segundo, que la operación está reservada a root o al dueño, como cambiar el dueño de un archivo.
14. Con umask 022, ¿con qué permisos nacen un archivo y un directorio?
El archivo, con 644: 666 menos la escritura del grupo y de los otros. El directorio, con 755.
15. ¿Por qué chmod 777 no es una solución?
Porque no corrige la causa del problema: elimina todas las restricciones, y deja los archivos modificables por cualquier usuario y cualquier programa del sistema.
Para practicar
- En un directorio de pruebas, crea un archivo y llévalo, con la notación simbólica y de a un cambio, por estos estados:
rw-r--r--,rw-------,r--------,rwxr-x---. Verifica cada paso conls -l. - Repite el recorrido con la notación octal, usando
chmod -vpara ver las dos formas. - Crea un script de una línea con
echo 'date' > fecha.sh. Intenta ejecutarlo, dale permiso solo al dueño, y ejecútalo. - Quítale la lectura a ese script dejando la ejecución, con
chmod u-r, e intenta ejecutarlo. ¿Por qué falla? - Crea un directorio con dos archivos. Quítale sucesivamente la
r, lawy laxal dueño, devolviendo cada una antes de quitar la siguiente, y prueba en cada casols,cd,catde un archivo ytouchde uno nuevo. Compara con la tabla del tema 17. - Reproduce la trampa de la sección 9 con
chmod -R 644sobre un árbol de prueba, repárala, y déjalo bien con laXmayúscula. - Cambia el grupo de un archivo tuyo a otro de tus grupos, y ajusta los permisos para que ese grupo pueda leerlo y los demás no.
- Con
sudo, crea un archivo en tu directorio de pruebas:sudo touch ajeno.txt. Mira su dueño, intenta escribir en él, y devuélvelo a tu nombre conchown. - Ejecuta
umask 027, crea un archivo y un directorio, y explica sus permisos. Restablece la máscara y comprueba que los ya creados no cambiaron. - Averigua con
stat -c '%a %n'los permisos de~/.bashrc,~/.bash_historyy, si existe,~/.ssh. ¿Coinciden con lo que cabría esperar por su contenido?