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>
:
) 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:~#
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. ]