Esta pregunta está asociada con ¿Dónde está instalado el archivo central con abrt-hook-cpp? .
Mientras intentaba generar un archivo central para un programa que fallaba intencionalmente, al principio, abrt-ccpp parecía obstaculizar la generación del archivo central. Así que traté de editar manualmente /proc/sys/kernel/core_pattern
con vim:
> sudo vim /proc/sys/kernel/core_pattern
Cuando traté de guardar el archivo, vim informó este error:
"/proc/sys/kernel/core_pattern" E667: Fsync failed
Pensé que se trataba de un problema de permisos, así que intenté cambiar los permisos:
> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted
Finalmente, basándome en esta publicación, probé esto:
>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'
Esto funcionó.
Basado en la solución de trabajo, también probé estos, que fallaron:
> echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
>
> sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
Pregunta :
¿Por qué la edición, chmod
ing y redirigir echo
salida al archivo /proc/sys/kernel/core_pattern
todos fallaron, y solo la invocación anotada de sudo bash...
pudo sobrescribir/editar el archivo?
Pregunta :
Específicamente, escriba los intentos de invocar sudo
en los intentos fallidos anteriores:¿por qué fracasaron? Pensé sudo
ejecutó el siguiente comando con privilegios de root, que pensé que te permitía hacer cualquier cosa en Linux.
Respuesta aceptada:
Las entradas en procfs son administradas por código ad hoc. El código que establecería los permisos y la propiedad de los archivos en /proc/sys
(proc_sys_setattr
) rechaza cambios de permisos y titularidad con EPERM. Por lo tanto, no es posible cambiar los permisos o la propiedad de estos archivos, punto final. Dichos cambios no están implementados, por lo que ser root no ayuda.
Cuando intenta escribir como usuario no root, obtiene un error de permiso. Incluso con sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
, está intentando escribir como usuario no root:sudo
ejecuta echo
como root, pero la redirección ocurre en el shell desde el que sudo
se ejecuta, y ese shell no tiene privilegios elevados. Con sudo bash -c '… >…'
, la redirección se realiza en la instancia de bash que se inicia mediante sudo
y que se ejecuta como root, por lo que la escritura se realiza correctamente.
La razón por la que solo se debe permitir que root configure el kernel.core_pattern
sysctl es que permite especificar un comando y, dado que esta es una configuración global, este comando podría ser ejecutado por cualquier usuario. De hecho, este es el caso de todas las configuraciones de sysctl en varios grados:todas son configuraciones globales, por lo que solo la raíz puede cambiarlas. kernel.core_pattern
es solo un caso particularmente peligroso.