¿Por qué no se pueden borrar setuid/setgid/sticky bits mediante notación octal con chmod?

¿Por qué no se pueden borrar setuid/setgid/sticky bits mediante notación octal con chmod?

Así que hoy, en el trabajo, la gerencia aparece al azar y me pide que dé un curso intensivo sobre el uso de Linux a un grupo de ingenieros. Aparentemente, se enteraron de mi desacuerdo con Microsoft (debido a problemas de privacidad y seguridad de Win 10) y ahora soy el "experto" residente en cualquier cosa *nix.

Después de explicar al grupo la belleza de la simplicidad de Linux, surgen preguntas sobre los permisos de archivos. Explico chmodla sintaxis octal de usuario-grupo-mundo para asignar permisos.

Luego, pasemos al bit setuid/setgid/sticky: lo demuestro con un ejemplo simple como chmod 2755 somefile.txty señalo que el bit setgid ahora está habilitado. Para borrar ese bit, emito chmod 0755, pero para mi consternación el bit setgid persiste. ¿¿Qué?? Sé que he usado esa sintaxis para borrar partes adhesivas antes (aunque probablemente hace una década). Fue bastante vergonzoso descubrir que no funcionaba justo después de haber hablado de lo elegante que era el diseño.

De todos modos, también les mostré la g+staquigrafía g-salternativa y descubrí que g-sSÍ funcionó.

Después de la presentación, pensé que había encontrado un error chmod, pero al revisar la manpágina descubrí que el comportamiento era "por diseño", ya que hay una nota explícita que indica que chmodse puede usar para configurar las banderas adhesivas, pero no para borrarlas. .

¿POR QUÉ se eliminó la capacidad de chmodborrar bits pegajosos usando notación octal? Busqué en Google y encontré algunas personas que decían que el cero inicial era "confuso" y debería omitirse. ¿En realidad? Siguiendo esa lógica, también podríamos decir que es ilegal que los bytes (por ejemplo, el código ASCII) contengan bits "0" iniciales porque es "confuso". Las personas que encuentran confuso el cero inicial pueden utilizar la notación simbólica. Las personas que quieran utilizar la notación octal deberían poder utilizarla.

¿Por qué estaba chmodlisiado por no admitir la notación octal para borrar los bits pegajosos?

Respuesta1

El problema es que antes de la introducción de los bits adhesivos, ya había muchos scripts de shell, etc. que solo usaban tres dígitos octales (o menos). Además, la convención de que cualquier número puede completarse con ceros a la izquierda está bastante arraigada.

Entonces, si uno hubiera permitido que la forma octal con un cero a la izquierda restableciera los bits adhesivos, muchos scripts los habrían restablecido accidentalmente. Depurar eso habría sido una pesadilla, por lo que chmodterminó con la restricción de que no se pueden restablecer los bits adhesivos en formato octal. Después de todo, si realmente desea restablecerlos (lo que rara vez ocurre), siempre puede utilizar la forma alternativa.

Entonces, como muchas formas de sorprendente complejidad, la respuesta es "compatibilidad con versiones anteriores".

información relacionada