GNU/Linux >> Znalost Linux >  >> Linux

Povolení automatického spouštění příkazů jako root v Linuxu pomocí SSH

Domnívám se, že vhodným řešením pro většinu jednoduchých případů [tj. pokud je framework jako Puppet/Chef/CfEngine/Ansible přehnaný], ale vyžaduje se vysoká úroveň ovládání vzdáleného systému, je

(a) Vyžadovat autentizaci založenou na klíči(b) zamknout umístění, která může SSH používat – zejména k uzamčení IP adres, které mohou používat uživatelé root(c) Zajistit, aby počítače s tímto vztahem důvěryhodnosti byly řádně zabezpečeny.

Nevěřím, že "přihlášení jako root je odsuzováno", stejně jako "přihlášení jako root, abyste mohli dělat věci, které nevyžadují práva roota" je odsuzováno. Mít uhodnutelné heslo umožňuje, aby byl účet hrubě vynucen, takže je to problém, s nímž je třeba se potýkat, a tím, že lidem umožníte přihlásit se jako root, mohou dělat hloupé chyby v širším rozsahu a dělat sporné věci, které skrývají škodlivá aktivita – ale v závislosti na architektuře to nemusí být ve skutečnosti smysluplné.

Tento komiks XKCD poukazuje na to, že v závislosti na prostředí nemusí ve skutečnosti záležet na kompromitaci účtu root.

Pravděpodobně nejjednodušším a nejúčinnějším řešením pro obecný případ je přesně omezit, kdo se může přihlásit jako root ovládáním kláves ve spojení s určením příslušného řádku AllowUsers v /etc/ssh/sshd.conf. Vhodný řádek, který umožní normálním uživatelům, ale uzamkne přístup root, může vypadat takto:

  AllowUsers normaluser1 normaluser2 [email protected]

Samozřejmě je důležité, aby přihlášení na základě hesla bylo zakázáno nebo aby účet root neměl heslo (tj. měl v poli hesla souboru s hesly znak "!" nebo "*".)

Jak jste předpokládali, pokud je třeba spustit pouze jeden (nebo malý počet) programů, může být lepší nastavit konkrétního uživatele s autentizací na základě klíče a umožnit odpovídající sudo přístup k požadovaným příkazům.

Existuje samozřejmě spousta věcí, které lze udělat pro další "uzamknutí" přístupu, v závislosti na hodnotě dat - selinux, vzdálené protokolování, omezený shell, omezení podle času, upozornění ihned po přihlášení součástí řešení může být aktivní monitorování protokolů jako fail2ban [kromě síťových omezení, která považuji za nepovinná]. To znamená, že pokud jednoduše ovládáte systém, který lze snadno odfouknout a znovu vytvořit, mnoho z toho je pravděpodobně přehnané.

Pamatujte, že zabezpečení je postaveno ve vrstvách, aby bylo možné získat přístup root, musí účet projít několika vrstvami. Uzamčení přístupu, privátní klíče SSH, firewally, omezení denní doby [ a princip nejmenšího přístupu, tj. poskytování přístupu pouze k tomu, co je potřeba, žádné další, protokolování, zálohování ], to vše by mělo fungovat společně jako součást dobrého zabezpečení.

Další – přístup SUDO

Sudo je mechanismus, který umožňuje běžnému uživateli spouštět určité příkazy se zvýšeným přístupem, a je poměrně flexibilní a má různý rozsah. Zatímco shrnutí sudo zde není vhodné (ale je dobře zdokumentováno, pokud zadáte man sudo ve většině distribucí mohou být vhodné kroky -

  1. Upravit /etc/sudoers – Většina variant Linuxu má k tomu speciální program nazvaný „visudo“, který je třeba spustit jako root, což je zhruba ekvivalentní použití systémového editoru k úpravě /etc/sudoers (což je další způsob, jak to udělat toto – i když pravděpodobně spletitý)

  2. Přidejte/změňte příslušné řádky, aby daný uživatel mohl dělat konkrétní věci. Pokud byste například chtěli, aby mohli například připojovat adresáře a bez nutnosti zadávat heslo, zadali byste řádek jako:

    username    ALL=/sbin/mount NOPASSWD: ALL
    

Pro spuštění tohoto příkazu by příslušný uživatel spustil něco jako

  sudo mount /dev/xxx /path/to/mount

Můžete vypsat více řádků pro více příkazů, spíše používá skupiny než používá - sudoers je poměrně flexibilní subsystém. V mnoha distribucích je také možné přidávat soubory s příkazy do podadresáře jako /etc/sudoers.d


Následuje odpověď z příspěvku Unix Stackexchange
Jak vzdáleně spustit příkaz ssh a příkaz sudo bez hesla.

Tato metoda umožňuje správci serveru povolit vašemu účtu provést jeden příkaz jako sudo bez zadání hesla. Příkaz je pravděpodobně voláním vašeho skriptu a je povolen pouze při spuštění pod vaším účtem. Jelikož je povolený příkaz zcela specifikován včetně argumentů, věřím, že tato metoda je docela bezpečná.

můžete sudo říct, aby u některých příkazů vynechalo heslo.

např. v /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

to mi umožňuje používat

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

jako archemar bez hesla.

Všimněte si, že

sudo -u www-data rm -rf /var/www/log/upload.*

nebude fungovat (bude vyžadovat heslo) jako rm se liší od /bin/rm .

Nezapomeňte upravit /etc/sudoers pomocí visudo příkaz.

Jakmile dosáhnete pokročilé úrovně, možná budete chtít mít svůj vlastnísudo soubory v /etc/sudoers.d .


Linux
  1. Obnovení hesla root v systému Linux

  2. Jak resetovat heslo správce Plesk pomocí SSH na serveru Linux?

  3. Příklady použití příkazu dmsetup v Linuxu

  1. Příklady příkazů passwd v Linuxu

  2. Přesuňte složku v Linuxu pomocí příkazu mv

  3. ZFS odesílá/přijímá přes ssh na linuxu bez povolení přihlášení roota

  1. Použití příkazu ripgrep (rg) v Linuxu

  2. Změňte heslo programově

  3. Připojit se k MySQL pomocí příkazového řádku bez použití hesla root?