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

Warum ist die Bearbeitung von core_pattern eingeschränkt?

Einträge in procfs werden per Ad-hoc-Code verwaltet. Der Code, der Berechtigungen und Eigentumsrechte 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. Auch mit sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , versuchen Sie, als Nicht-Root-Benutzer zu schreiben:sudo läuft echo 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, den 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 tatsächlich in unterschiedlichem Maße für alle sysctl-Einstellungen der Fall:Sie sind alle globale Einstellungen, sodass nur root sie ändern kann. kernel.core_pattern ist nur ein besonders gefährlicher Fall.


Unter Ubuntu 18.04 kann ich das Muster aktualisieren mit:

sudo bash -c 'echo "/data/app_crash/%t.%e.core.%p" > /proc/sys/kernel/core_pattern'

Ich kann auch /etc/sysctl.conf aktualisieren und fügen Sie die Zeile hinzu:

kernel.core_pattern = /data/app_crash/%t.%e.core.%p

Allerdings, obwohl es keine anderen Zeilen gibt, die kernel.core_pattern setzen in /etc/sysctl.conf oder /etc/sysctl.d/* , nach dem Neustart wird das Muster wieder auf den Standardwert gesetzt:

$ sudo sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P

Es stellte sich heraus, dass apport hat alle von mir vorgenommenen Änderungen überschrieben. Ich habe apport deinstalliert mit sudo apt-get remove apport und dann wurden meine Änderungen verwendet.


Linux
  1. Warum benötigt der Root-Benutzer eine Sudo-Berechtigung?

  2. Warum ignoriert Sudo Aliasse?

  3. Warum würde der Kernel Pakete fallen lassen?

  4. Speichern Sie die Datei als Root, nachdem Sie sie als Nicht-Root bearbeitet haben

  5. Warum wird der Kernel demselben Adressraum wie Prozesse zugeordnet?

So installieren Sie den Liquorix-Kernel unter Ubuntu 20.04

Installieren Sie Linux Kernel 5.17 auf Fedora Linux 35

Linux – Warum kann der Kernel Init nicht ausführen?

Warum kann ich Jiffies nicht der Betriebszeit zuordnen?

Warum sollte man sudo verwenden?

Warum unterscheidet sich das „sudo“-Passwort vom „su root“-Passwort?