GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Warum ist das Bearbeiten von Core_pattern eingeschränkt?

Diese Frage steht im Zusammenhang mit Wo ist die Kerndatei mit installiertem abrt-hook-cpp? .

Während ich versuchte, eine Core-Datei für ein absichtlich abstürzendes Programm zu generieren, schien die Generierung der Core-Datei zunächst durch abrt-ccpp behindert zu werden. Also habe ich versucht, /proc/sys/kernel/core_pattern manuell zu bearbeiten mit vim:

> sudo vim /proc/sys/kernel/core_pattern

Als ich versuchte, die Datei zu speichern, meldete vim diesen Fehler:

"/proc/sys/kernel/core_pattern" E667: Fsync failed

Ich dachte, das sei ein Berechtigungsproblem, also habe ich versucht, die Berechtigungen zu ändern:

> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted

Schließlich habe ich basierend auf diesem Beitrag Folgendes versucht:

>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'

Das hat funktioniert.

Basierend auf der funktionierenden Lösung habe ich auch diese ausprobiert, die fehlgeschlagen sind:

> 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

Frage :

Warum diese Bearbeitung, chmod ing und Umleitung von echo Ausgabe in die Datei /proc/sys/kernel/core_pattern alles fehlgeschlagen, und nur der notierte Aufruf von sudo bash... konnte die Datei überschrieben/bearbeitet werden?

Frage :

Insbesondere bezüglich der Versuche, sudo aufzurufen bei den gescheiterten Versuchen oben:Warum sind sie gescheitert? Ich dachte sudo führte den folgenden Befehl mit Root-Rechten aus, von denen ich dachte, dass Sie unter Linux alles tun können.

Akzeptierte Antwort:

Einträge in procfs werden per Ad-hoc-Code verwaltet. Der Code, der Berechtigungen und Besitzrechte für die Dateien unter /proc/sys festlegen würde (proc_sys_setattr ) lehnt Änderungen von Berechtigungen und Eigentumsrechten mit EPERM ab. Es ist also nicht möglich, die Berechtigungen oder den Besitz dieser Dateien zu ändern, Punkt. Solche Änderungen werden nicht implementiert, also hilft es nicht, root zu sein.

Wenn Sie versuchen, als Nicht-Root-Benutzer zu schreiben, erhalten Sie einen Berechtigungsfehler. Sogar mit sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , versuchen Sie, als Nicht-Root-Benutzer zu schreiben:sudo führt echo aus als root, aber die Umleitung erfolgt in der Shell, von der aus sudo ausgeführt wird und diese Shell keine erhöhten Rechte hat. Mit sudo bash -c '… >…' , wird die Umleitung in der Bash-Instanz durchgeführt, die von sudo gestartet wird und die als root ausgeführt wird, sodass das Schreiben erfolgreich ist.

Der Grund:Nur root muss berechtigt sein, das kernel.core_pattern zu setzen sysctl besteht darin, dass ein Befehl angegeben werden kann, und da dies eine globale Einstellung ist, kann dieser Befehl von jedem Benutzer ausgeführt werden. Dies ist in der Tat für alle sysctl-Einstellungen in unterschiedlichem Maße der Fall:Sie sind alle globale Einstellungen, sodass nur root sie ändern kann. kernel.core_pattern ist nur ein besonders gefährlicher Fall.

Verwandte:Debian – Holen Sie sich das neueste gcc für Debian?
Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux – Wann sollten /dev und /sys für die Userspace-Kernel-Kommunikation verwendet werden?

  3. /proc/[pid]/pagemaps und /proc/[pid]/maps | Linux

  4. Dev, Proc, Sys in einer Chroot-Umgebung mounten?

  5. Wo sind die Linux-Kernel-Parameter in /proc/sys dokumentiert?

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wechsel des Standortes der Bohrkernhalde

Wo ist der Inhalt von /proc des Linux-Kernels dokumentiert?

/sys/ Dokumentation?

Warum ist die Bearbeitung von core_pattern eingeschränkt?