¿Cómo se aplican los permisos de archivo a los archivos recién creados?

12

Tengo un directorio que tiene los siguientes permisos establecidos:

drwxr-s---. user group folder

En el escritorio, accedo a esta carpeta y hago clic derecho para crear una nueva llamada de archivo foo.txt. Luego, usando el terminal, creé otro archivo usando el comando $ touch bar.txt.

Cuando verifico los permisos para estos archivos, tengo:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Yo estaba esperando -rw-r-----. user group. ¿Cómo surgió el permiso de escritura adicional para el grupo y el permiso de lectura para otros?

Desbordamiento de preguntas
fuente

Respuestas:

16

setguid

Hay 2 fuerzas aquí en el trabajo. El primero es el bit setgid que está habilitada en la carpeta, folder.

drwxr-s---. user group folder

Ese es el spaquete de caracteres al comienzo de esta línea. Se agrupan así:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

Esto r-ssignifica que cualquier archivo o directorio creado dentro de esta carpeta tendrá el grupo configurado automáticamente en el grupo group.

Eso es lo que causó los archivos foo.txty bar.txtse creó así:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

permisos y umask

Los permisos que estás viendo son otro asunto. Estos se rigen por la configuración de su umask. Puede ver a qué umaskestá configurado con el comando umask:

$ umask
0002

NOTA: estos bits también se denominan bits de "modo".

Es una máscara, por lo que deshabilitará cualquiera de los bits relacionados con los permisos que están habilitados. En este ejemplo, lo único que quiero es los permisos de escritura para otros.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

La representación de los "bits" en este comando está en forma decimal. Entonces un 2 equivale a 010 en forma binaria, que es el bit de escritura. Un 4 (100) significaría que desea leer deshabilitado. Un 7 (111) significa que desea leer / escribir / ejecutar todo deshabilitado. Construyéndolo desde aquí:

$ umask 007

Deshabilitaría los bits de lectura / escritura / ejecución para otros usuarios.

Entonces, ¿qué pasa con tus archivos?

Bueno, umaskgobierna los permisos que se establecerán cuando se cree un nuevo archivo. Entonces, si tuviéramos el siguiente umaskconjunto:

$ umask 007

Y comenzamos a tocar nuevos archivos, los veríamos creados así:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Si lo cambiamos por otra cosa, di esto:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Sin embargo, no tendrá ningún impacto en los archivos que ya hemos creado. Mira aquí:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Entonces, ¿qué está pasando con el navegador de archivos?

Esto umaskes lo que yo llamé una configuración "suave". De ninguna manera es absoluto y puede pasarse por alto con bastante facilidad en Unix de varias maneras. Muchas de las herramientas toman interruptores que le permiten especificar los permisos como parte de su operación.

Toma mkdirpor ejemplo:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

Con el -minterruptor podemos anular umask. El touchcomando no tiene esta función, por lo que debe ser creativo. Vea estas preguntas y respuestas de U&L tituladas: ¿Se pueden crear archivos con permisos establecidos en la línea de comando? solo por tales métodos.

¿Otras maneras? Solo anular umask. Lo más probable es que el explorador de archivos haga esto o simplemente ignore por completo umasky coloque el archivo usando los permisos para los que esté configurado.

slm
fuente
Pensé que se suponía que umask eliminaba privilegios, no agregaba. ¿O me estoy perdiendo algo?
Desbordamiento de preguntas el
@QuestionOverflow: la máscara controla qué permisos se permiten cuando se crean archivos y directorios. De ahí su nombre. Enmascara los bits que se usan durante el proceso de creación.
slm
Mi umask lee 0002. Si umask establece permisos en lugar de eliminar permisos, el bit de ejecución se establecerá tanto para el usuario como para el grupo cuando lo haga touch, pero no lo está.
Desbordamiento de preguntas el
@QuestionOverflow: esa es una limitación del touchcomando. Vea el enlace que incluí
slm
Solo para aclarar algunos puntos basados ​​en los comentarios: 1) los permisos de un nuevo archivo siempre están determinados por umask + el programa utilizado para crear el archivo, 2) los permisos nunca se heredan del directorio principal.
Desbordamiento de preguntas el