GNU/Linux >> Znalost Linux >  >> Ubuntu

Průvodce pro začátečníky k pochopení sudo na Ubuntu

Dostali jste někdy při práci na příkazovém řádku Linuxu chybu „Oprávnění odepřeno“? Je pravděpodobné, že jste se pokoušeli provést operaci, která vyžaduje oprávnění root. Například následující snímek obrazovky ukazuje chybu, která byla vyvolána, když jsem se pokoušel zkopírovat binární soubor do jednoho ze systémových adresářů:

Jaké je tedy řešení tohoto problému? Jednoduché, použijte sudo příkaz.

Uživatel, který příkaz spouští, bude vyzván k zadání přihlašovacího hesla. Po zadání správného hesla bude operace úspěšně provedena.

Zatímco sudo je bezpochyby příkazem, který musí znát každý a každý, kdo pracuje na příkazovém řádku v Linuxu, existuje několik dalších souvisejících (a hloubkových) podrobností, které byste měli znát, abyste příkaz mohli používat zodpovědněji a efektivněji. A to je přesně to, o čem budeme diskutovat zde v tomto článku.

But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.

Co je sudo?

Příkaz sudo, jak už většina z vás možná ví, se používá ke spuštění příkazu se zvýšenými oprávněními (obvykle jako root). Příklad toho jsme již probrali v úvodní části výše. Pokud však chcete, můžete použít sudo ke spuštění příkazu jako jiný uživatel (jiný než root).

Toho je dosaženo pomocí -u možnost příkazového řádku, kterou nástroj poskytuje. Například v níže uvedeném příkladu jsem (himanshu) zkusil přejmenovat soubor v domovském adresáři jiného uživatele (howtoforge), ale dostal jsem chybu „povolení odepřeno“. A pak jsem zkusil stejný příkaz 'mv' pomocí 'sudo -u howtoforge', příkaz byl úspěšný:

Může sudo používat jakýkoli uživatel?

Ne. Aby uživatel mohl používat sudo, měl by být záznam odpovídající tomuto uživateli v /etc/sudoers soubor. Následující odstavec – převzatý z webu Ubuntu – by to měl objasnit:

The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

Pokud používáte Ubuntu, je snadné se ujistit, že uživatel může spustit příkaz sudo:vše, co musíte udělat, je nastavit tento uživatelský účet jako „administrátor“. To lze provést přechodem do Nastavení systému... -> Uživatelské účty.

Odemknutí okna:

Poté vyberte uživatele, jehož typ účtu chcete změnit, a poté změňte typ na „administrátor“

Pokud však nepoužíváte Ubuntu nebo vaše distribuce tuto funkci neposkytuje, můžete ručně upravit /etc/sudoers soubor pro provedení změny. Do tohoto souboru budete muset přidat následující řádek:

[user]    ALL=(ALL:ALL) ALL

Netřeba dodávat, že [uživatel] by mělo být nahrazeno uživatelským jménem účtu, kterému udělujete oprávnění sudo. Důležitá věc, která zde stojí za zmínku, je, že oficiálně navrhovaný způsob úpravy tohoto souboru je pomocí vizua příkaz - vše, co musíte udělat, je spustit následující příkaz:

sudo visudo

Abyste měli představu, proč tomu tak přesně je, zde je výňatek z visudo manuálu:

visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

Pro více informací o visudu přejděte sem.

Co je relace sudo?

Pokud často používáte příkaz sudo, jsem si jist, že jste si všimli, že poté, co jednou úspěšně zadáte heslo, můžete spustit několik příkazů sudo, aniž byste byli vyzváni k zadání hesla. Ale po nějaké době vás příkaz sudo znovu požádá o heslo.

Toto chování nemá nic společného s počtem příkazů s funkcí sudo, které spustíte, ale závisí na čase. Ano, ve výchozím nastavení sudo nebude požadovat heslo po dobu 15 minut poté, co jej uživatel jednou zadá. Po těchto 15 minutách budete znovu vyzváni k zadání hesla.

Pokud však chcete, můžete toto chování změnit. Za tímto účelem otevřete soubor /etc/sudoers pomocí následujícího příkazu:

sudo visudo

A pak přejděte na řádek, který zní:

Defaults env_reset

a přidejte následující proměnnou (zvýrazněnou níže tučně) na konec řádku

Defaults env_reset,timestamp_timeout=[new-value]

Pole [nová-hodnota] by mělo být nahrazeno počtem minut, po které má vaše relace sudo trvat. Například jsem použil hodnotu 40.

V případě, že chcete být vyzváni k zadání hesla při každém použití příkazu sudo, pak v tom případě můžete této proměnné přiřadit hodnotu '0'. A pro ty z vás, kteří chtějí, aby jejich relace sudo nikdy nevypršela, můžete přiřadit hodnotu '-1'.

Upozorňujeme, že použití timestamp_timeout s hodnotou '-1' se důrazně nedoporučuje.

Heslo sudo

Jak jste si mohli všimnout, kdykoli vás sudo vyzve k zadání hesla a začnete je zadávat, nic se nezobrazí – dokonce ani hvězdičky, které jsou obvykle normou. I když to obecně není velký problém, někteří uživatelé mohou chtít, aby se hvězdičky zobrazovaly z jakéhokoli důvodu.

Dobrá věc je, že je to možné a docela snadné. Jediné, co musíte udělat, je změnit následující řádek v souboru /etc/sudoers:

Defaults        env_reset

do

Defaults        env_reset,pwfeedback

A uložte soubor.

Nyní, kdykoli zadáte heslo sudo, zobrazí se hvězdička.

Některé důležité možnosti příkazového řádku sudo

Kromě volby příkazového řádku -u (kterou jsme již probrali na začátku tohoto tutoriálu) existují některé další důležité volby příkazového řádku sudo, které si zaslouží zmínku. V této části probereme některé z nich.

Volba -k

Zvažte případ, kdy jste po zadání hesla právě spustili příkaz s funkcí sudo. Nyní, jak již víte, relace sudo zůstává ve výchozím nastavení aktivní po dobu 15 minut. Předpokládejme, že během této relace musíte někomu poskytnout přístup k vašemu terminálu, ale nechcete, aby mohl používat sudo. Co uděláte?

Naštěstí existuje možnost příkazového řádku -k která uživateli umožňuje zrušit oprávnění sudo. Zde je to, co o této možnosti říká manuálová stránka sudo:

-k, --reset-timestamp

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

Volba -s

Mohou nastat situace, kdy vaše práce vyžaduje spouštění velkého množství příkazů, které vyžadují oprávnění root, a nechcete občas zadávat heslo sudo. Také nechcete upravovat časový limit relace sudo prováděním změn v souboru /etc/sudoers.

V takovém případě možná budete chtít použít -s možnost příkazového řádku příkazu sudo. Zde je návod, jak to vysvětluje manuálová stránka sudo:

-s, --shell

Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

V zásadě tedy tato možnost příkazového řádku dělá:

  • Spustí nový shell – pro který shell se odkazuje proměnná env SHELL. V případě, že je $SHELL prázdný, shell definovaný v /etc/passwd soubor je vyzvednut.
  • Pokud spolu s volbou -s předáváte také název příkazu (například:sudo -s whoami ), pak skutečný příkaz, který se provede, je: sudo /bin/bash -c whoami.
  • Pokud se nepokoušíte provést žádný jiný příkaz (to znamená, že se pouze pokoušíte spustit sudo -s ), pak získáte interaktivní shell s právy root.

Zde stojí za to mít na paměti, že -s možnost příkazového řádku vám poskytuje shell s právy root, ale nezískáváte prostředí root - získává se váš .bashrc. To znamená, že například v novém shellu sudo -s spustí a spustí whoami příkaz bude stále vracet vaše uživatelské jméno, nikoli 'root'.

Volba -i

Volba -i je podobná volbě -s, o které jsme právě hovořili. Existují však určité rozdíly. Jedním z klíčových rozdílů je -i poskytuje také kořenové prostředí, což znamená, že váš (uživatelův) .bashrc je ignorován. Je to jako stát se rootem, aniž byste se explicitně přihlásili jako root. Navíc nemusíte zadávat také heslo uživatele root.

Důležité :Upozorňujeme, že existuje su příkaz, který také umožňuje přepínat uživatele (ve výchozím nastavení vám umožňuje stát se rootem). Tento příkaz vyžaduje zadání hesla „root“. Chcete-li se tomu vyhnout, můžete jej také spustit pomocí sudo ('sudo su'); v takovém případě budete muset zadat své přihlašovací heslo. 'su' a 'sudo su' však mají určité zásadní rozdíly – chcete-li jim porozumět a také se dozvědět více o tom, jak se s nimi 'sudo -i' srovnává, přejděte sem.

Závěr

Doufám, že už máte alespoň základní představu o sudo a o tom, jak vyladíte jeho výchozí chování. Vyzkoušejte vylepšení /etc/sudoers, která jsme zde vysvětlili, a také si projděte diskuzi na fóru (odkaz v posledním odstavci), abyste získali více informací o příkazu sudo.


Ubuntu
  1. Začínáme s Vagrant na Ubuntu 14.10 – Průvodce pro začátečníky

  2. Nainstalovat PostgreSQL na Ubuntu 20.04 – průvodce krok za krokem?

  3. Nainstalovat Apache Subversion na Ubuntu 20.04 LTS – průvodce krok za krokem?

  1. Průvodce linuxovým terminálem pro začátečníky

  2. Jak nainstalovat MongoDB na Ubuntu 18.04 – Průvodce pro začátečníky

  3. Staňte se uživatelem root v Ubuntu 22.04 – průvodce krok za krokem?

  1. Nainstalujte RabbitMQ na Ubuntu 20.04 LTS - Průvodce krok za krokem?

  2. Průvodce pro začátečníky editorem vi (odkaz na příkazový řádek)

  3. Ubuntu - Spusťte příkaz při spuštění pomocí sudo