Como descubrí, cuando usas umask, los permisos más altos que puedes otorgar a los archivos son 666. Lo cual es realizado por umask 0000
. Esto se debe a los permisos de creación de archivos predeterminados, que parecen ser 666 en todos los sistemas que conozco.
Sé que para los archivos necesitamos derechos ejecutables para mostrar su contenido.
Pero, ¿por qué limitamos los permisos de creación de archivos predeterminados en 666?
permissions
filesystems
files
Peter
fuente
fuente
umask
que conocía era siempre 0022, creando el permiso predeterminado 644.umask 0000
, lo que todavía limita a los permisos de archivo de 666. (Pero aparentemente las carpetas usan 777)Respuestas:
Por lo que puedo decir, esto está codificado en las utilidades estándar. I
strace
D tantotouch
la creación de un nuevo archivo ymkdir
crear un nuevo directorio.El
touch
rastro produjo esto:mientras que el
mkdir
rastro produjo esto:A falta de codificar el proceso de creación de archivos / directorios en C, no veo una forma de modificar los permisos predeterminados. Sin embargo, me parece que no tiene sentido hacer que los archivos sean ejecutables de manera predeterminada: no desea que ningún texto aleatorio se interprete erróneamente como comandos de shell.
Actualizar
Para darle un ejemplo de cómo los bits de permiso están codificados en las utilidades estándar. Aquí hay algunas líneas relevantes de dos archivos en el
coreutils
paquete que contiene el código fuente para ambostouch(1)
ymkdir(1)
, entre otros:mkdir.c
:En otras palabras, si no se especifica el modo, configúrelo en
S_IRWXUGO
(lectura: 0777) modificado porumask_value
.touch.c
es aún más claro:Es decir, otorgue permisos de lectura y escritura a todos (lectura: 0666), que serán modificados por el proceso
umask
de creación de archivos, por supuesto.Es posible que pueda sortear esto solo mediante programación: es decir, al crear archivos desde un programa en C, donde realiza las llamadas al sistema directamente o desde un lenguaje que le permite realizar una llamada al sistema de bajo nivel (consulte, por ejemplo, Perl
sysopen
enperldoc -f sysopen
)fuente
umask file
yumask dir
. Establecer dos valores predeterminados diferentes y bien. Pero ahora no tengo forma de crear archivos con permisos de ejecución.mkdir(1)
le ofrece un-m
interruptor para especificar el modo del directorio en el momento de la creación. Sin embargo, con los archivos, dado que la creación de archivos utiliza laopen(2)
llamada al sistema, la herramienta que utiliza para crear el archivo es la responsable de pasar los bits de modoopen
y no tiene voz en el asunto.install(1)
de forma predeterminada, copia su archivo a una nueva ubicación y establece los bits de ejecución, pero eso aún no sucede en el momento de la creación.touch
por ejemplo, es responsable de establecer los valores correctos. ¿Sabes dónde almacena los valores? Tal vez están configurados en todo el sistema, ¿para que podamos cambiarlos? Porque quiero liberarme ;)En primer lugar, no hay un valor predeterminado global, los permisos dependen de la aplicación que crea el archivo. Por ejemplo, este pequeño programa en C creará un archivo '/ tmp / foo' con permisos 0777 si umask es 0000 (en cualquier caso, los permisos serán 0777 y ~ umask):
Dicho esto, muchas aplicaciones crean archivos con permisos de 0666. Eso tiene dos razones:
fuente