GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:perché la modifica di Core_pattern è limitata?

Questa domanda è associata a Dov'è installato il file core con abrt-hook-cpp? .

Mentre stavo cercando di generare un file core per un programma che si bloccava intenzionalmente, all'inizio la generazione del file core sembrava essere ostacolata da abrt-ccpp. Quindi ho provato a modificare manualmente /proc/sys/kernel/core_pattern con vim:

> sudo vim /proc/sys/kernel/core_pattern

Quando ho provato a salvare il file, vim ha segnalato questo errore:

"/proc/sys/kernel/core_pattern" E667: Fsync failed

Ho pensato che fosse un problema di autorizzazione, quindi ho provato a modificare le autorizzazioni:

> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted

Infine, sulla base di questo post, ho provato questo:

>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'

Questo ha funzionato.

Sulla base della soluzione funzionante, ho provato anche questi, che non hanno funzionato:

> echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
>
> sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied

Domanda :

Perché è quella modifica, chmod ing e reindirizzamento echo output nel file /proc/sys/kernel/core_pattern tutto fallito, e solo la nota invocazione di sudo bash... è stato in grado di sovrascrivere/modificare il file?

Domanda :

In particolare, scrivere i tentativi di invocare sudo nei tentativi falliti di cui sopra:perché hanno fallito? Ho pensato sudo eseguito il comando successivo con privilegio di root, che pensavo ti permettesse di fare qualsiasi cosa in Linux.

Risposta accettata:

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

Quando si tenta di scrivere come utente non root, viene visualizzato un errore di autorizzazione. Anche con sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , stai provando a 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 ha esito positivo.

Il motivo per cui solo root deve essere autorizzato a impostare il kernel.core_pattern sysctl consente di specificare un comando e, poiché si tratta di un'impostazione globale, questo comando può 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ò cambiarle. kernel.core_pattern è solo un caso particolarmente pericoloso.

Correlati:Debian – Ottieni l'ultimo gcc per debian?
Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Linux:quando utilizzare /dev e /sys per la comunicazione nel kernel dello spazio utente?

  3. /proc/[pid]/pagemaps e /proc/[pid]/maps | Linux

  4. Dove sono documentati i contenuti di /proc del kernel Linux?

  5. Dove sono documentati i parametri del kernel Linux presenti in /proc/sys?

/proc/cpuinfo e /proc/meminfo in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Modifica della posizione del core dump

montare dev, proc, sys in un ambiente chroot?

/sys/ documentazione?

Perché la modifica di core_pattern è limitata?