Les entrées dans procfs sont gérées par un code ad hoc. Le code qui définirait les autorisations et la propriété des fichiers sous /proc/sys
(proc_sys_setattr
) rejette les changements d'autorisations et de propriété avec EPERM. Il n'est donc pas possible de modifier les autorisations ou la propriété de ces fichiers, point final. De tels changements ne sont pas implémentés, donc être root n'aide pas.
Lorsque vous essayez d'écrire en tant qu'utilisateur non root, vous obtenez une erreur d'autorisation. Même avec sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
, vous essayez d'écrire en tant qu'utilisateur non root :sudo
exécute echo
en tant que root, mais la redirection se produit dans le shell à partir duquel sudo
est exécuté, et ce shell n'a pas de privilèges élevés. Avec sudo bash -c '… >…'
, la redirection est effectuée dans l'instance bash qui est lancée par sudo
et qui s'exécute en tant que root, donc l'écriture réussit.
La raison pour laquelle seul root doit être autorisé à définir le kernel.core_pattern
sysctl est qu'il permet de spécifier une commande et, puisqu'il s'agit d'un paramètre global, cette commande peut être exécutée par n'importe quel utilisateur. C'est en fait le cas pour tous les paramètres sysctl à des degrés divers :ce sont tous des paramètres globaux, donc seul root peut les modifier. kernel.core_pattern
est juste un cas particulièrement dangereux.
Sur Ubuntu 18.04, je peux mettre à jour le modèle avec :
sudo bash -c 'echo "/data/app_crash/%t.%e.core.%p" > /proc/sys/kernel/core_pattern'
Je peux aussi mettre à jour /etc/sysctl.conf
et ajoutez la ligne :
kernel.core_pattern = /data/app_crash/%t.%e.core.%p
Cependant, même s'il n'y a pas d'autres lignes définissant kernel.core_pattern
en /etc/sysctl.conf
ou /etc/sysctl.d/*
, après le redémarrage, le modèle est à nouveau défini sur la valeur par défaut :
$ sudo sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P
Il s'est avéré que apport
écrasait toutes les modifications que j'avais apportées. J'ai désinstallé apport
avec sudo apt-get remove apport
puis mes modifications ont été utilisées.