GNU/Linux >> Linux Esercitazione >  >> Linux

Perché la modifica di core_pattern è limitata?

Le voci in procfs sono gestite da codice ad hoc. Il codice che imposterebbe i permessi e la proprietà sui file in /proc/sys (proc_sys_setattr ) rifiuta le modifiche ai permessi e alla proprietà con EPERM. Quindi non è possibile modificare i permessi o la proprietà di questi file, punto e basta. Tali modifiche non vengono implementate, quindi essere root non aiuta.

Quando provi a scrivere come utente non root, ricevi un errore di autorizzazione. Anche con sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , stai tentando di scrivere come utente non root:sudo esegue echo come root, ma il reindirizzamento avviene nella shell da cui sudo viene eseguito e quella shell non ha privilegi elevati. Con sudo bash -c '… >…' , il reindirizzamento viene eseguito nell'istanza bash avviata da sudo e che viene eseguito come root, quindi la scrittura riesce.

Il motivo per cui solo root deve essere autorizzato a impostare kernel.core_pattern sysctl è che consente di specificare un comando e, poiché si tratta di un'impostazione globale, questo comando potrebbe essere eseguito da qualsiasi utente. Questo è infatti il ​​caso di tutte le impostazioni di sysctl a vari livelli:sono tutte impostazioni globali, quindi solo root può modificarle. kernel.core_pattern è solo un caso particolarmente pericoloso.


Su Ubuntu 18.04 posso aggiornare il pattern con:

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

Posso anche aggiornare /etc/sysctl.conf e aggiungi la riga:

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

Tuttavia, anche se non ci sono altre righe che impostano kernel.core_pattern in /etc/sysctl.conf o /etc/sysctl.d/* , dopo il riavvio il pattern viene nuovamente impostato sul valore predefinito:

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

Si è scoperto che apport stava sovrascrivendo tutte le modifiche apportate. Ho disinstallato apport con sudo apt-get remove apport e poi sono state utilizzate le mie modifiche.


Linux
  1. Perché il kernel dovrebbe eliminare i pacchetti?

  2. Linux:perché il kernel non può eseguire Init?

  3. Perché il kernel è mappato allo stesso spazio di indirizzi dei processi?

  4. perché non riesco ad abbinare i jiffies al tempo di attività?

  5. Perché Centos non utilizza ancora l'ultimo kernel

Come installare il kernel Liquorix su Ubuntu 20.04

Installa Linux Kernel 5.17 su Fedora Linux 35

Perché si dovrebbe usare sudo?

Perché la memoria condivisa del kernel è 0 su Ubuntu 12.04?

Perché la password "sudo" è diversa dalla password "su root".

Perché Linux è simile a Unix se il suo kernel è monolitico?