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 -
-
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ý)
-
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
.