GNU/Linux >> Tutoriales Linux >  >> Cent OS

Centos:¿el comportamiento de los permisos de enlace duro es diferente entre Centos 6 y Centos 7?

Recibo un error de permisos en CentOS 7 cuando intento crear un enlace físico. Con los mismos permisos establecidos en CentOS 6 no me sale 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.

Permítanme 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.

[[email protected] 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
[[email protected] cwd]# ls -l destination/
total 0
[[email protected] cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[[email protected] 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 inicio sesión como root, no tengo ningún problema en crear un enlace físico en el directorio de destino que apunte al archivo de texto (en el directorio de origen).

[[email protected] cwd]# ln source/test.txt destination/
[[email protected] cwd]# ls destination/
test.txt

Sin embargo, si inicio sesión como otro usuario, en este caso, administrador, no puedo crear el enlace. Obtengo:"Operación no permitida".

[[email protected] cwd]# rm -f destination/test.txt 
[[email protected] 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 dado que lo anterior está permitido en CentOS 6, quería verificar si estaba malinterpretando algo. Para mí, parece un error en CentOS 6 que se solucionó en CentOS 7.

Alguien sabe que da? ¿Tengo razón al creer que el comportamiento anterior es el comportamiento correcto? ¿Es CentOS 6 el correcto? ¿O ambos tienen razón y tal vez hay algún problema sutil de permisos de grupo que me estoy perdiendo? Gracias.

Editar: Intenté la misma prueba hace un 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ó como lo hizo CentOS 6. En otras palabras, permitió crear el enlace. (Nota:en OS X, el grupo raíz se llama "rueda". Esa es la única diferencia, que yo sepa).

Respuesta aceptada:

Hice girar algunas máquinas virtuales CentOS 6 y 7 nuevas y pude recrear el comportamiento exacto que mostraste. Después de investigar un poco, resulta que esto es en realidad un cambio en el kernel con respecto al comportamiento predeterminado con respecto a los enlaces físicos y físicos por razones de seguridad. Las siguientes páginas me señalaron en la dirección correcta:

Relacionado:¿Cambiar el color de fondo del terminal GNOME al vuelo?

http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415

http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1

Si hace que se pueda escribir en el mundo del archivo, su usuario administrador podrá crear el enlace físico.

Para volver al comportamiento de todo el sistema CentOS 6, se agregaron nuevos parámetros del kernel. Configure lo siguiente en /etc/sysctl.conf:

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

entonces corre

sysctl -p

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 solo 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 fijo es el mismo archivo, solo que con diferentes metadatos/inodos. Si eliminara el archivo original después de crear un enlace físico, no afectará el enlace. Un archivo solo se "elimina" una vez que se han eliminado todos los enlaces.


Cent OS
  1. Centos:¿la diferencia entre el apagado a las 18:00 y el apagado a las 18:00?

  2. Ulimit:¿Diferencia entre límites duros y suaves?

  3. ¿La diferencia entre enlaces simbólicos y duros?

  4. ¿Centos 4.8 y Glibc 2.5?

  5. Cómo instalar y configurar web2py en CentOS 7

Copie archivos entre Linux y FreeDOS

Cómo crear enlaces duros y simbólicos en Linux

Instale la compatibilidad con Apache2, PHP5 y MySQL en CentOS 6.5 (LAMP)

¿Diferencia entre el usuario de Sudo y el usuario raíz?

Centos – “Enlace simbólico no permitido o objetivo de enlace no accesible” / ¿Apache en Centos 6?

Shell Script para encontrar el estado y la velocidad del enlace de la interfaz de red (CentOS/RHEL)