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.