Tato otázka souvisí s Kde je nainstalován základní soubor s abrt-hook-cpp? .
Zatímco jsem se pokoušel vygenerovat základní soubor pro záměrně shazující program, zpočátku se zdálo, že generování základního souboru bylo zmařeno abrt-ccpp. Zkusil jsem tedy ručně upravit /proc/sys/kernel/core_pattern s vim:
> sudo vim /proc/sys/kernel/core_pattern
Když jsem se pokusil soubor uložit, vim ohlásil tuto chybu:
"/proc/sys/kernel/core_pattern" E667: Fsync failed
Myslel jsem, že jde o problém s oprávněními, a tak jsem se pokusil oprávnění změnit:
> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted
Nakonec jsem na základě tohoto příspěvku zkusil toto:
>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'
Toto fungovalo.
Na základě funkčního řešení jsem vyzkoušel i tyto, které se nezdařily:
> 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
Otázka :
Proč je to ta úprava, chmod ing a přesměrování echo výstup do souboru /proc/sys/kernel/core_pattern vše selhalo a pouze zaznamenané vyvolání sudo bash... byl schopen přepsat/upravit soubor?
Otázka :
Konkrétně wrt pokusy o vyvolání sudo ve výše uvedených neúspěšných pokusech:proč selhaly? Myslel jsem sudo provedl následující příkaz s oprávněním root, o kterém jsem si myslel, že vám v Linuxu umožní dělat cokoli.
Přijatá odpověď:
Záznamy v procfs jsou spravovány ad hoc kódem. Kód, který by nastavil oprávnění a vlastnictví souborů pod /proc/sys (proc_sys_setattr ) odmítá změny oprávnění a vlastnictví s EPERM. Takže není možné změnit oprávnění nebo vlastnictví těchto souborů, tečka. Takové změny nejsou implementovány, takže být root nepomůže.
Při pokusu o zápis jako uživatel bez oprávnění root se zobrazí chyba oprávnění. I s sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , pokoušíte se napsat jako uživatel bez oprávnění root:sudo spustí echo jako root, ale k přesměrování dojde v shellu, ze kterého sudo je spuštěn a tento shell nemá žádná zvýšená oprávnění. Pomocí sudo bash -c '… >…' , přesměrování se provádí v instanci bash, kterou spouští sudo a který běží jako root, takže zápis proběhne úspěšně.
Důvod, proč pouze root musí mít povoleno nastavit kernel.core_pattern sysctl spočívá v tom, že umožňuje zadat příkaz, a protože se jedná o globální nastavení, může tento příkaz provést kterýkoli uživatel. To je ve skutečnosti případ všech nastavení sysctl v různé míře:všechna jsou globální nastavení, takže je může změnit pouze root. kernel.core_pattern je jen zvlášť nebezpečný případ.