GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la modification de core_pattern est-elle restreinte ?

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.


Linux
  1. Linux - Pourquoi le noyau ne peut-il pas exécuter Init ?

  2. pourquoi ne puis-je pas faire correspondre les jiffies à la disponibilité ?

  3. Dans le noyau Linux 2.6.26, j'ai trouvé #define atomic_read(v) ((v)->counter + 0), pourquoi +0 ?

  4. Pourquoi Centos n'utilise toujours pas le dernier noyau

  5. sudoedit :pourquoi l'utiliser sur sudo vi ?

Comment installer le noyau Liquorix sur Ubuntu 20.04

Installer le noyau Linux 5.17 sur Fedora Linux 35

Pourquoi la commande sudo:bundle est-elle introuvable ?

Pourquoi la mémoire partagée du noyau est à 0 sur Ubuntu 12.04 ?

Pourquoi le mot de passe 'sudo' est-il différent du mot de passe 'su root'

Pourquoi la commande sudo prend-elle longtemps à s'exécuter ?