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.