GNU/Linux >> Znalost Linux >  >> Linux

Skuteční správci systému sudo nedělají

Před pár měsíci jsem četl velmi zajímavý článek, který obsahoval pár dobrých informací o funkci Linuxu, o které jsem se chtěl dozvědět více. Neřeknu vám název článku, o čem byl, ani web, na kterém jsem ho četl, ale z toho článku jsem se otřásl.

Důvod, proč jsem zjistil, že tento článek je tak hodný je, že před každým příkazem uváděl sudo příkaz. Problém, který s tím mám, je ten, že článek je údajně pro systémové správce a skuteční správci systému sudo nepoužívají před každým příkazem, který vydají. To je hrubé zneužití sudo příkaz. O tomto typu zneužití jsem psal ve své knize „Linuxová filozofie pro SysAdminy“. Následuje výňatek z kapitoly 19 této knihy.

V tomto článku prozkoumáme, proč a jak sudo nástroj je zneužíván a jak obejít konfiguraci, která nutí používat sudo místo toho, aby pracoval přímo jako root.

sudo nebo ne sudo

Součástí toho, že jste správcem systému a používáte své oblíbené nástroje, je správně používat nástroje, které máme, a mít je k dispozici bez jakýchkoli omezení. V tomto případě jsem zjistil, že sudo příkaz se používá způsobem, pro který nebyl nikdy určen. Mám zvláštní odpor k tomu, jak sudo zařízení se používá v některých distribucích, zejména proto, že se používá k omezení a omezení přístupu lidí vykonávajících práci správy systému k nástrojům, které potřebují k plnění svých povinností.

„[SysAdmins] nepoužívejte sudo.“
– Paul Venezia

Venezia ve svém článku InfoWorld vysvětluje, že sudo se používá jako berlička pro systémové správce. Netráví mnoho času obhajobou této pozice nebo jejím vysvětlováním. Jen to uvádí jako fakt. A souhlasím s ním – pro systémové správce. K vykonávání naší práce nepotřebujeme tréninková kola. Ve skutečnosti překážejí.

Některé distribuce, jako je Ubuntu, používají sudo příkazem způsobem, který má trochu ztížit použití příkazů, které vyžadují zvýšená (root) oprávnění. V těchto distribucích není možné se přihlásit přímo jako uživatel root, takže sudo Příkaz se používá k povolení dočasného přístupu uživatelů bez oprávnění root k oprávněním root. To by mělo způsobit, že uživatel bude trochu opatrnější při vydávání příkazů, které vyžadují zvýšená oprávnění, jako je přidávání a mazání uživatelů, mazání souborů, které jim nepatří, instalace nového softwaru a obecně všechny úkoly, které jsou vyžadovány pro správu. moderního hostitele Linuxu. Vynucení správců systému používat sudo příkaz jako předmluva k ostatním příkazům má učinit práci s Linuxem bezpečnější.

Pomocí sudo způsob, jakým je to u těchto distribucí, je podle mého názoru hrozný a neúčinný pokus poskytnout začínajícím systémovým administrátorům falešný pocit bezpečí. Při poskytování jakékoli úrovně ochrany je zcela neúčinný. Mohu zadávat příkazy, které jsou stejně nesprávné nebo škodlivé pomocí sudo jak mohu, když jej nepoužívám. Distribuce, které používají sudo k anestezii pocitu strachu, že bychom mohli vydat nesprávný příkaz, prokazují systémovým administrátorům velkou medvědí službu. Neexistuje žádný limit nebo omezení uložené těmito distribucemi na příkazy, které lze použít s sudo zařízení. Neexistuje žádný pokus o skutečné omezení škod, které by mohly být způsobeny skutečnou ochranou systému před uživateli a možností, že by mohli udělat něco škodlivého – ani by nemělo být.

Pojďme si to tedy ujasnit – tyto distribuce očekávají, že uživatel provede všechny úkoly správy systému. Ukolébávají uživatele – kteří jsou ve skutečnosti správci systému –, aby si mysleli, že jsou nějakým způsobem chráněni před účinky čehokoli špatného, ​​protože musí udělat tento restriktivní krok navíc a zadat své vlastní heslo, aby mohli spouštět příkazy.

Obejít sudo

Distribuce, které takto fungují, obvykle zamykají heslo pro uživatele root (jedno z těchto distribucí je Ubuntu). Tímto způsobem se nikdo nemůže přihlásit jako root a začít pracovat bez zatížení. Podívejme se, jak to funguje a jak to obejít.

Dovolte mi, abych zde stanovil nastavení, abyste jej mohli reprodukovat, pokud si přejete. Jako příklad jsem nainstaloval Ubuntu 16.04 LTS1 do virtuálního počítače pomocí VirtualBoxu. Během instalace jsem pro tento experiment vytvořil uživatele bez oprávnění root, studenta, s jednoduchým heslem.

Přihlaste se jako uživatel student a otevřete terminálovou relaci. Podívejme se na záznam pro root v /etc/shadow soubor, kde jsou uložena zašifrovaná hesla.

student@machine1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

Oprávnění je odepřeno, takže se nemůžeme podívat do /etc/shadow file . To je společné pro všechny distribuce, takže neprivilegovaní uživatelé nemohou vidět a přistupovat k zašifrovaným heslům. Tento přístup by umožnil použít běžné hackerské nástroje k prolomení těchto hesel, takže není bezpečné to povolit.

Nyní zkusme su – do rootu.

student@machine1:~$ su -
Password:
su: Authentication failure

Tento pokus o použití su příkaz ke zvýšení oprávnění našeho uživatele na root selže, protože účet root nemá žádné heslo a je uzamčen. Použijme sudo podívejte se na /etc/shadow soubor.

student@machine1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the user password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>

Výsledky jsem zkrátil, aby se zobrazil pouze záznam pro uživatele root a student. Také jsem zkrátil šifrované heslo, aby se záznam vešel na jeden řádek. Pole jsou oddělena dvojtečkami (: ) a druhé pole je heslo. Všimněte si, že pole pro heslo pro root je „třesk“, známý zbytku světa jako vykřičník (! ). To znamená, že účet je uzamčen a nelze jej použít.

Nyní vše, co musíme udělat, abychom mohli používat účet root jako správný správci systému, je nastavit heslo pro účet root.

student@machine1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@machine1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@machine1:~#

Nyní se můžeme přihlásit přímo na konzoli jako root nebo su – přímo do rootu namísto použití sudo pro každý příkaz. Samozřejmě bychom mohli použít jen sudo su – pokaždé, když se chceme přihlásit jako root – ale proč se obtěžovat?

Nechápejte mě prosím špatně. Distribuce jako Ubuntu a jejich up- a down-stream příbuzní jsou naprosto v pořádku a v průběhu let jsem jich několik použil. Když používám Ubuntu a související distribuce, jedna z prvních věcí, které udělám, je nastavit heslo uživatele root, abych se mohl přihlásit přímo jako root.

Platná použití pro sudo

sudo zařízení má své využití. Skutečný záměr sudo je umožnit uživateli root delegovat na jednoho nebo dva uživatele bez oprávnění root přístup k jednomu nebo dvěma konkrétním privilegovaným příkazům, které pravidelně potřebují. Důvodem je líný systémový správce; Umožnění přístupu k jednomu nebo dvěma příkazům, které vyžadují zvýšená oprávnění a které používají neustále, mnohokrát za den, šetří SysAdmin mnoho požadavků od uživatelů a eliminuje dobu čekání, kterou by uživatelé jinak zažívali. Ale většina uživatelů bez oprávnění root by nikdy neměla mít úplný přístup root, pouze k několika příkazům, které potřebují.

Někdy potřebuji uživatele bez oprávnění root ke spouštění programů, které vyžadují oprávnění root. V případech, jako je tento, nastavím jednoho nebo dva uživatele bez oprávnění root a autorizuji je ke spuštění tohoto jediného příkazu. sudo zařízení také uchovává protokol ID uživatele každého uživatele, který jej používá. To by mi mohlo umožnit zjistit, kdo udělal chybu. To je vše, co dělá; není to magický ochránce.

sudo zařízení nebylo nikdy zamýšleno k použití jako brána pro příkazy vydávané správcem systému. Nemůže zkontrolovat platnost příkazu. Nekontroluje, zda uživatel nedělá nějakou hloupost. Nezabezpečuje systém před uživateli, kteří mají přístup ke všem příkazům v systému, i když je to přes bránu, která je nutí říkat „prosím“ – to nikdy nebylo zamýšleným účelem.

"Unix nikdy neříká prosím."
– Rob Pike

Tento citát o Unixu platí o Linuxu stejně jako o Unixu. Sysadmins se přihlásíme jako root, když potřebujeme pracovat jako root, a když skončíme, odhlásíme se z našich relací root. Některé dny zůstáváme přihlášeni jako root celý den, ale vždy pracujeme jako root, když potřebujeme. Nikdy nepoužíváme sudo protože nás to nutí psát více, než je nutné, abychom spustili příkazy, které potřebujeme ke své práci. Unix ani Linux se nás neptá, jestli opravdu chceme něco udělat, to znamená, že neříká "Prosím, ověřte, že to chcete udělat."

Ano, nelíbí se mi způsob, jakým některá distra používají sudo příkaz. Příště prozkoumám některé platné případy použití pro sudo a jak jej pro tyto případy nakonfigurovat.

[ Chcete otestovat své schopnosti správce systému? Proveďte hodnocení dovedností ještě dnes. ]


Linux
  1. Alternativní příkaz aktualizace nebyl nalezen?

  2. Příkaz pro aktivaci sítě?

  3. Příklady příkazů sudo v Linuxu

  1. visudo:příkaz nenalezen

  2. sudoedit:příkaz nenalezen

  3. sudo:příkaz nenalezen

  1. sudo:npm:příkaz nenalezen

  2. Příkaz Docker se nemůže připojit k démonu Docker

  3. příkaz nebyl nalezen při použití sudo