GNU/Linux >> Znalost Linux >  >> Linux

Proč je úprava core_pattern omezena?

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 zapsat jako uživatel bez oprávnění root:sudo běží 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í. S 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.


Na Ubuntu 18.04 mohu aktualizovat vzor pomocí:

sudo bash -c 'echo "/data/app_crash/%t.%e.core.%p" > /proc/sys/kernel/core_pattern'

Mohu také aktualizovat /etc/sysctl.conf a přidejte řádek:

kernel.core_pattern = /data/app_crash/%t.%e.core.%p

I když však nejsou žádné další řádky nastavení kernel.core_pattern v /etc/sysctl.conf nebo /etc/sysctl.d/* , po restartu se vzor znovu nastaví na výchozí hodnotu:

$ sudo sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P

Ukázalo se, že apport přepsal všechny změny, které jsem provedl. Odinstaloval jsem apport s sudo apt-get remove apport a poté byly použity mé změny.


Linux
  1. Proč potřebuje uživatel root oprávnění sudo?

  2. Linux – Proč jsou úpravy Core_pattern omezeny?

  3. Linux – Proč nemůže jádro spustit inicializaci?

  1. Proč je jádro mapováno do stejného adresního prostoru jako procesy?

  2. proč nemohu přiřadit jiffies k dostupnosti?

  3. V linuxovém jádře 2.6.26 jsem našel #define atomic_read(v) ((v)->counter + 0), proč +0?

  1. sudoedit:proč to používat přes sudo vi?

  2. Proč je sdílená paměť jádra na Ubuntu 12.04 0?

  3. Proč se heslo 'sudo' liší od hesla 'su root'