¿Qué permisos afectan la creación de enlaces duros? ¿Importa la propiedad del archivo?
Supongamos que el usuario alicedesea crear un enlace fijo al archivo target.txten un directorio target-dir.
- ¿Qué permisos
alicenecesita en ambostarget.txtytarget-dir? - Si
target.txtes propiedad del usuariobillytarget-dires propiedad del usuariochad, ¿cambia algo?
Intenté simular esta situación creando la siguiente estructura de carpetas / archivos en un ext4sistema de archivos:
#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir
source-dir:
-r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt
target-dir:
-rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
Si bien alicepuede crear un enlace suave a target.txt, ella no puede crear un enlace duro:
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
Si aliceposee target.txty no se cambian los permisos, el enlace duro tiene éxito. ¿Que me estoy perdiendo aqui?
linux
permissions
hard-link
gcscaglia
fuente
fuente

target.txtytarget-dirpermisos, a menos quesudocomo root.alicepuedo acceder tanto al archivo original como a un enlace duro (creado consudo), pero no puedo crear el enlace como el usuario aalicepesar de que todos estamos de acuerdo con estos permisos debería ser suficiente para ello.Respuestas:
Para crear el enlace duro
alicenecesitaráwrite+executepermisostarget-diren todos los casos. Los permisos necesariostarget.txtvariarán:fs.protected_hardlinks = 1entoncesalicenecesita propiedadtarget.txto al menosread+writepermisos sobre él.fs.protected_hardlinks = 0entonces cualquier conjunto de permisos servirá; Incluso 000 está bien.Esta respuesta a una pregunta similar tenía la información faltante para responder a esta pregunta.
De http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [énfasis mío]:
fuente
alicenecesita al menos permiso de lecturatarget.txty escritura + permiso de ejecucióntarget-dir.Ahora, la estructura de permisos funciona como un conjunto separado triple:
Por lo tanto, la pregunta de propiedad afecta solo en qué conjunto de permisos son los permisos requeridos
alice, siendo:alicees el usuario propietario, los permisos necesarios deben estar en la parte "usuario".alicees parte del grupo que lo posee, los permisos requeridos deben estar en la parte "grupo".aliceno lo posee y no forma parte del grupo que lo posee, los permisos necesarios deben estar en la "otra" parte.fuente
target.txttiene 444 permisos ytarget-dirtiene 777 permisos, pero no puedo crear un enlace rígido a menos que lo haga como root o sea el propietario del archivo al que me estoy vinculando. Por extraño que parezca, un enlace suave funcionará como usted describe.