¿Qué hace chmod -u?

19

Por accidente, corrí chmod -u filenamey eliminó todos los permisos que tenía filename.

La página del manual no hace referencia a una -uopción. Experimentando pude concluir que no elimina todos los permisos, sino que solo lee y ejecuta el acceso, dejando intacto el acceso de escritura.

Entonces, ¿qué hace esto exactamente?


Mi conclusión anterior es incorrecta, ahora creo que lo que hace es eliminar los permisos que tiene el propietario, de todas las categorías.


Creo que el comportamiento es análogo a=u, solo que es en -lugar de =y ase puede descartar como se puede, por ejemplo, con a+x.

y_wc
fuente
66
+1 por hacer una pregunta básica que no está en la página del manual.
1
"El formato de un modo simbólico es [ugoa...][[-+=][perms...]...], donde perms hay cero o más letras del conjunto rwxXst, o una sola letra del conjuntougo " (página de manual de GNU chmod); POSIX es bastante oscuro, pero define una producción de "permcopy" para el mismo efecto.
Michael Homer
1
@MichaelHomer No dice lo que hace.
y_wc
1
@y_wc "En lugar de una o más de estas letras, puede especificar exactamente una de las letras ugo : los permisos otorgados al usuario propietario del archivo ( u), los permisos otorgados a otros usuarios que son miembros del grupo del archivo ( g) , y los permisos otorgados a los usuarios que no pertenecen a ninguna de las dos categorías anteriores ( o) ".
Michael Homer
1
Sí, lo leí. No veo que mencione lo que hace. Dice que puedo especificar una de esas letras. Especificando, por ejemplo u, especificaré los permisos otorgados al usuario propietario del archivo. Pero no dice lo que hace. ¿Qué significa incluso especificar?
y_wc

Respuestas:

19

Esta no es una opción, sino una forma estándar (pero poco común) de especificar los permisos. Significa para eliminar ( -) los permisos asociados con el propietario del archivo ( u), para todos los usuarios (sin precedentes u, go o). Esto está documentado en la página del manual.

La página de manual de GNU chmod documenta esto como:

El formato de un modo simbólico es [ugoa...][[-+=][perms...]...], donde permses cero o más letras del conjunto rwxXst, o una sola letra del conjunto ugo

y después

En lugar de una o más de estas letras, puede especificar exactamente una de las letras ugo: los permisos otorgados al usuario propietario del archivo ( u), los permisos otorgados a otros usuarios que son miembros del grupo del archivo ( g) y permisos otorgados a usuarios que no pertenecen a ninguna de las dos categorías anteriores ( o)

Por -ulo tanto, significa eliminar ( -) los permisos que estén habilitados actualmente para el propietario ( u) para todos (de manera equivalente a-u, excepto honrar la umask actual). Si bien eso no suele ser muy útil, chmod +ua veces lo mismo será copiar los permisos del propietario a otros cuando se opera de forma recursiva, por ejemplo.


También está documentado en POSIX , pero se define de manera más oscura: la especificación del permiso es ampliamente who[+-=]perms(o un número), y el efecto de estos se especifica más a fondo:

Los símbolos permcopy u, gy ose representan los permisos actuales asociados con el usuario, grupo, y otras partes de los bits de modo de archivo, respectivamente. Para el resto de esta sección, se permrefiere a los no terminales permy permcopyen la gramática.

y entonces

-

... Si no se especifica quién , los bits de modo de archivo representados por perm para el propietario, el grupo y otros permisos, excepto aquellos con los bits correspondientes en la máscara de creación de modo de archivo del proceso de invocación, se borrarán.

Michael Homer
fuente
Gracias Michael. La documentación POSIX es convincente. El GNU sin embargo ... Por favor, vea este comentario mío. No veo cómo lo que viene después de "Entonces" se deduce de lo que había antes. permspuede ser u, que tengo. Sí, uespecifica los permisos o el propietario. Pero, ¿cómo se deduce que -uelimina los permisos del propietario (módulo umask) de todos los usuarios?
y_wc
Porque eso es lo que -siempre hace: elimina los permisos especificados de la clase de usuarios especificada. -ues exactamente análogo ao -w(más cercano) a ugo-u.
Michael Homer
Estaba a punto de decir que no vine aquí para discutir documentación y que estaba feliz de entender lo que estaba pasando, pero los documentos simplemente hicieron clic. Gracias.
y_wc
¿Podría molestarlo con otra chmodpregunta de documentación? Avíseme si cree que esto merece una pregunta separada. "y = hace que se agreguen y que se eliminen los bits no mencionados, excepto que los bits de ID de grupo y usuario de un directorio no mencionados no se ven afectados". Esto, para mí, significa que, dado un directorio cuyo propietario solo tiene acceso de escritura, chmod u=rx directorydejará los permisos del propietario como rwx. Pero eso no es lo que sucede, sino que se convierten en lo esperado r-x. ¿Estoy malinterpretando algo?
y_wc
Está diciendo que los sbits setuid / setgid ( ) se dejan solos si no los menciona, y todo lo que no especificó se elimina.
Michael Homer
2

La respuesta es un poco similar a /unix//a/429424/255251 .

chmod -u file_name

no elimina todos los permisos, pero considera el umaskvalor.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Ahora cambie el valor de umask

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
Prvt_Yadav
fuente
2
Instructivo, bueno de conocer y muy útil, pero creo que este no es realmente el problema, aunque está muy relacionado. Gracias.
y_wc