As entradas no procfs são gerenciadas por um código ad hoc. O código que definiria permissões e propriedade dos arquivos em /proc/sys
( proc_sys_setattr
) rejeita mudanças de permissões e propriedade com EPERM. Portanto, não é possível alterar as permissões ou a propriedade desses arquivos, ponto final. Tais mudanças não são implementadas, portanto, ser root não ajuda.
Quando você tenta escrever como usuário não raiz, você recebe um erro de permissão. Mesmo com sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
, você está tentando escrever como um usuário não raiz: sudo
runs echo
como root, mas o redirecionamento acontece no shell do qual sudo
é executado, e esse shell não tem nenhum nível elevado privilégios. Com sudo bash -c '… >…'
, o redirecionamento é executado na instância bash que é lançada por sudo
e que é executada como raiz, portanto, a gravação é bem-sucedida.
O motivo pelo qual somente root deve ter permissão para definir o kernel.core_pattern
sysctl é que ele permite que um comando seja especificado e, como essa é uma configuração global, esse comando pode ser executado por qualquer usuário. Este é, na verdade, o caso de todas as configurações de sysctl em vários graus: elas são todas configurações globais, portanto, somente o root pode alterá-las. kernel.core_pattern
é apenas um caso particularmente perigoso.