GNU/Linux >> Znalost Linux >  >> Linux

Linux – Proč jsou úpravy Core_pattern omezeny?

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.

Související:Debian – získat nejnovější gcc pro debian?
Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Linux – kdy použít /dev a /sys pro komunikaci mezi uživatelským prostorem a jádrem?

  3. Linux – Jak otestovat, zda je blokové zařízení pouze pro čtení z /sys nebo /proc?

  1. Linux – Rozdíl mezi /sys/block/sda1/stat a /sys/block/xvda1/stat?

  2. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  3. Linux – Rozdíl mezi „all“, „default“ a „eth*“ V /proc/sys/net/ipv[46]/conf/?

  1. Jak získám cestu k procesu v Unixu / Linuxu

  2. linux /proc/loadavg

  3. mount dev, proc, sys v prostředí chroot?