Recibo un error de permisos en CentOS 7 cuando intento crear un enlace duro. Con los mismos permisos establecidos en CentOS 6, no obtengo el error. El problema se centra en los permisos de grupo. No estoy seguro de qué versión del sistema operativo es correcta y cuál es incorrecta.
Déjame ilustrar lo que está sucediendo. En mi directorio de trabajo actual, tengo dos directorios: origen y destino. Al principio, el destino está vacío; fuente contiene un archivo de texto.
[root@tc-dlx-nba cwd]# ls -l
total 0
drwxrwxrwx. 2 root root 6 Jun 12 14:33 destination
drwxrwxrwx. 2 root root 21 Jun 12 14:33 source
[root@tc-dlx-nba cwd]# ls -l destination/
total 0
[root@tc-dlx-nba cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[root@tc-dlx-nba cwd]#
Como puede ver, con respecto a los permisos, los dos directorios son 777, con el propietario y el grupo configurados como root. El propietario y el grupo del archivo de texto también están configurados como root. Sin embargo, los permisos del archivo de texto son de lectura y escritura para el propietario, pero de solo lectura para el grupo.
Cuando estoy conectado como root, no tengo problemas para crear un enlace duro en el directorio de destino que apunta al archivo de texto (en el directorio de origen).
[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt
Sin embargo, si inicio sesión como otro usuario, en este caso, administrador, no puedo crear el enlace. Me sale: "Operación no permitida".
[root@tc-dlx-nba cwd]# rm -f destination/test.txt
[root@tc-dlx-nba cwd]# su admin
bash-4.2$ pwd
/root/cwd
bash-4.2$ ln source/test.txt destination/
ln: failed to create hard link ‘destination/test.txt’ => ‘source/test.txt’: Operation not permitted
Lo que sucede en realidad tiene sentido para mí, pero como lo anterior está permitido en CentOS 6, quería verificar si estaba malentendiendo algo. Para mí, parece un error en CentOS 6 que se ha solucionado en CentOS 7.
Alguien sabe lo que da? ¿Estoy en lo cierto al creer que el comportamiento anterior es el correcto? ¿Es CentOS 6 lo correcto? O bien, ¿tienen razón y quizás haya un problema sutil de permisos de grupo que me falta? Gracias.
Editar: Intenté la misma prueba en este momento en una máquina virtual Debian v7 que tengo. Debian está de acuerdo con CentOS 7: "Operación no permitida".
Edición n. ° 2: acabo de intentar lo mismo en Mac OS X (Yosemite). Eso funcionó de la manera que lo hizo CentOS 6. En otras palabras, permitió que se creara el enlace. (Nota: en OS X, el grupo raíz se llama "rueda". Esa es la única diferencia, por lo que puedo decir).
fuente
Respuestas:
Hice algunos CentOS 6 y 7 vm nuevos y pude recrear el comportamiento exacto que mostraste. Después de investigar un poco, resulta que esto es en realidad un cambio en el núcleo con respecto al comportamiento predeterminado con respecto a los enlaces duros y blandos en aras de la seguridad. Las siguientes páginas me apuntaron en la dirección correcta:
http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415
http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
Si hace que el mundo del archivo sea editable, su usuario administrador podrá crear el enlace duro.
Para volver al comportamiento del sistema CentOS 6 en todo el sistema, se agregaron nuevos parámetros del kernel. Establezca lo siguiente en /etc/sysctl.conf:
entonces corre
En cuanto a por qué su programa opta por usar enlaces en lugar de copiar archivos, ¿por qué crear una copia exacta de un archivo que necesita usar cuando puede crear una entrada que apunte a los bloques originales? Esto ahorra espacio en disco y la operación es menos costosa en términos de CPU y E / S. El nuevo enlace duro es el mismo archivo, solo que con metadatos / inodo diferentes. Si tuviera que eliminar el archivo original después de crear un enlace duro, no afectará el enlace. Un archivo solo se 'elimina' una vez que se han eliminado todos los enlaces.
fuente