¿Qué permisos afectan la creación de enlaces duros? ¿Importa la propiedad del archivo?
Supongamos que el usuario alice
desea crear un enlace fijo al archivo target.txt
en un directorio target-dir
.
- ¿Qué permisos
alice
necesita en ambostarget.txt
ytarget-dir
? - Si
target.txt
es propiedad del usuariobill
ytarget-dir
es propiedad del usuariochad
, ¿cambia algo?
Intenté simular esta situación creando la siguiente estructura de carpetas / archivos en un ext4
sistema 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 alice
puede 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 alice
posee target.txt
y no se cambian los permisos, el enlace duro tiene éxito. ¿Que me estoy perdiendo aqui?
linux
permissions
hard-link
gcscaglia
fuente
fuente
target.txt
ytarget-dir
permisos, a menos quesudo
como root.alice
puedo acceder tanto al archivo original como a un enlace duro (creado consudo
), pero no puedo crear el enlace como el usuario aalice
pesar de que todos estamos de acuerdo con estos permisos debería ser suficiente para ello.Respuestas:
Para crear el enlace duro
alice
necesitaráwrite+execute
permisostarget-dir
en todos los casos. Los permisos necesariostarget.txt
variarán:fs.protected_hardlinks = 1
entoncesalice
necesita propiedadtarget.txt
o al menosread+write
permisos sobre él.fs.protected_hardlinks = 0
entonces 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
alice
necesita al menos permiso de lecturatarget.txt
y 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:alice
es el usuario propietario, los permisos necesarios deben estar en la parte "usuario".alice
es parte del grupo que lo posee, los permisos requeridos deben estar en la parte "grupo".alice
no lo posee y no forma parte del grupo que lo posee, los permisos necesarios deben estar en la "otra" parte.fuente
target.txt
tiene 444 permisos ytarget-dir
tiene 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.