GNU/Linux >> Znalost Linux >  >> Linux

Obnovte oprávnění ke spustitelnému souboru příkazu Chmod v systému Linux

Narazil jsem na zajímavé diskusní vlákno na Twitteru. Jde o otázku na pohovor. Otázka zní – Co uděláte, když dojde k náhodnému odebrání spustitelného oprávnění příkazu Chmod? Jak možná víte, chmod (zkratka pro Ch ange mod e) příkaz se používá k nastavení nebo změně přístupových oprávnění k souboru nebo adresáři v systémech podobných Unixu. Pokud je tedy oprávnění ke spustitelnému programu chmod odebráno, nemůžete oprávnění přiřadit žádnému programu, včetně samotného příkazu chmod. Sedíte v pohovorovém panelu a tazatel právě položil tuto otázku. Jak tedy v Linuxu obnovíte oprávnění ke spustitelnému příkazu chmod?

"Zkopíruji binární soubor chmod z jiných systémů?", můžete odpovědět. No, máte jen jeden systém. Nemůžete tedy zkopírovat binární soubor chmod z jiných systémů. Můžete znovu odpovědět:"Nastavím bit spuštění z perlu.". Tazatel říká:"Na vašem počítači nejsou žádní tlumočníci.". Neexistuje ani připojení k internetu/telefonu, takže ani nemůžete nikoho kontaktovat o pomoc. Jak v takové zoufalé situaci obnovíte spustitelné oprávnění příkazu Chmod? Pokud již znáte odpověď, velký palec nahoru pro vaši inteligenci. Pokud nejste kritický myslitel (jako já!), čtěte prosím dále.

Upozornění:

Nepokoušejte se prosím odebrat oprávnění ke spuštění příkazu chmod v produkčním systému. Vyzkoušejte to na virtuálním počítači nebo testovacím počítači. Je to jen pro vzdělávací účely.

Co uděláte, když jste omylem odebrali oprávnění ke spuštění příkazu Chmod?

Řekněme, že jste omylem spustili následující příkaz:

# chmod -x $(which chmod)

Zde je -x flag odebere spustitelné oprávnění daného programu. V našem případě je to chmod.

Jste velmi zvědaví a opravdu nevíte, co tento příkaz udělá. Nyní jste ztratili oprávnění ke spustitelnému příkazu chmod. Neexistuje způsob, jak znovu obnovit oprávnění ke spustitelnému souboru chmod. Pokud se pokusíte nastavit oprávnění, použijte následující příkaz:

# chmod +x $(which chmod)

Zobrazí se následující chybová zpráva:

bash: /usr/bin/chmod: Permission denied

I když se odhlásíte a zkoušíte od jiných uživatelů sudo, nemůžete přidělit oprávnění pomocí příkazu chmod:

$ sudo chmod +x $(which chmod)
sudo: chmod: command not found

Jak obnovíte oprávnění chmod zpět na původní? No, je to jednodušší, než si myslíte.

Obnovit oprávnění ke spustitelnému souboru příkazu Chmod v systému Linux

Existuje několik způsobů, jak obnovit oprávnění ke spuštění do chmod. Zde jsem uvedl 7 metod.

Metoda 1 – Zkopírujte obsah binárního souboru chmod do jiných pracovních binárních souborů

Pamatujte, že jsme odstranili oprávnění ke spustitelnosti pouze příkazu chmod, ale nikoli oprávnění jiných příkazů. Že jo? Ano! Ostatní příkazy mají stále oprávnění ke spuštění. Tento problém tedy můžeme vyřešit zkopírováním obsahu příkazu chmod do jakéhokoli jiného spustitelného příkazu, například "mkdir", a obnovením oprávnění ke spustitelnému souboru chmod zpět na jeho originál.

Před kopírováním udělejme zálohu příkazu mkdir pomocí příkazu:

# cp /usr/bin/mkdir /usr/bin/mkdir.bak

Dále zkopírujte obsah /usr/bin/chmod do /usr/chmod/mkdir pomocí příkazu "cat":

# cat /usr/bin/chmod > /usr/bin/mkdir

Nyní se příkaz mkdir stal příkazem chmod (protože jsme zkopírovali obsah chmod do binárního souboru mkdir).

A poté obnovte oprávnění ke spuštění skutečného binárního souboru chmod pomocí příkazu:

# mkdir +x /usr/bin/chmod

Případně můžete zkopírovat obsah mkdir zpět do binárního souboru chmod:

# mv /usr/bin/mkdir /usr/bin/chmod

Nakonec obnovte původní příkaz mkdir ze zálohy:

# mv /usr/bin/mkdir.bak /usr/bin/mkdir

Hotovo! Úspěšně jsme obnovili oprávnění ke spuštění příkazu chmod.

Zkontrolujte, zda jsou oprávnění ke spustitelnému souboru obnovena pomocí příkazu "ls":

# ls -l /usr/bin/chmod

Nebo,

# ls -l $(which chmod)
-r-xr-xr-x 1 root root 63864 May 27 07:16 /usr/bin/chmod

Všimněte si písmen "x" ve výše uvedeném výstupu. Označuje oprávnění ke spuštění.

Můžete to také ověřit přiřazením oprávnění ke spuštění jakémukoli jinému programu pomocí chmod, jako je uvedeno níže:

# chmod +x ostechnix.sh
# ls -l
total 0
-rwxr-xr-x 1 root root 0 May 27 07:43 ostechnix.sh

Toto je nejjednodušší metoda, protože se nemusíte nic učit nazpaměť. Jednoduše jsme zkopírovali obsah chmod do jiných příkazů pomocí příkazu cat a poté obnovili oprávnění ke spuštění.

Testoval jsem to v Ubuntu 20.04 server edition. V jiných distribucích Linuxu může být binární soubor chmod dostupný pod /bin/ adresář. Binární umístění chmod můžete najít pomocí následujícího příkazu:

$ which chmod

Toto je však nejen cesta. Rychle jsem prohledal Google a našel několik dalších metod. Možná si budete muset zapamatovat následující příkazy.

Metoda 2 – Použití příkazu cp

Toto je další způsob, jak obnovit oprávnění ke spustitelnému souboru do chmod.

V této metodě používáme příkaz "cp" ke zkopírování atributů:

# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod

Metoda 3 – pomocí GNU linker/loader (ld)

V této metodě můžete přímo spustit zavaděč "ld" a předat mu příkaz, který chcete spustit, jak je uvedeno níže:

# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod

Pokud používáte 32bitové systémy, příkaz by byl:

$ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod

Cesta k zavaděči může velmi záviset na distribuci Linuxu, kterou používáte. Výše uvedené příkazy jsou pro Ubuntu a jeho deriváty. V jiných distribucích může být cesta odlišná:

# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod

Metoda 4 – Použití setfacl

Spustitelná oprávnění chmod můžeme obnovit pomocí příkazu "setfacl".

Nejprve upravte ACL binárního souboru chmod pro uživatele s oprávněním ke čtení a spouštění:

# setfacl -m u::rx /usr/bin/chmod

Poté obnovte oprávnění chmod zpět na původní:

# chmod +x $(which chmod)

Nakonec odstraňte všechny položky ACL z chmod. Toto je volitelné.

# setfacl -b /usr/bin/chmod

Pokud příkaz setfacl není dostupný, nainstalujte balíček "acl". Například spusťte následující příkaz pro instalaci acl na Debian, Ubuntu a jeho deriváty:

# apt install acl

Metoda 5 – Použití rsync

Rsync není jen pro kopírování nebo zálohování souborů a adresářů mezi systémy. Lze jej také použít k přiřazení oprávnění pro soubory.

Nejprve zkopírujeme binární soubor chmod do umístění /tmp a zároveň přiřadíme spustitelná oprávnění všem, tj. uživatelům, skupinám a dalším:

# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x

Dále zkontrolujte, zda je oprávnění ke spustitelnému souboru přiřazeno chmod:

$ ls -l /tmp/chmod

Ukázkový výstup:

-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod

Pokud jsou oprávnění v pořádku, jednoduše přepište původní soubor souborem /tmp/chmod:

# mv /tmp/chmod /usr/bin

Metoda 6 – Použití Busybox

Některé nedávné distribuce Linuxu mají "Busybox" ve výchozím nastavení nainstalováno. Z manuálové stránky Busybox

BusyBox kombinuje malé verze mnoha běžných unixových nástrojů do jediného malého spustitelného souboru. Poskytuje minimalistické náhrady za většinu utilit, které obvykle najdete v GNU coreutils, util-linux atd. Utility v BusyBox mají obecně méně možností než jejich plnohodnotní GNU příbuzní; nicméně zahrnuté možnosti poskytují očekávanou funkčnost a chovají se velmi podobně jako jejich protějšky GNU.

Chcete-li obnovit oprávnění ke spuštění Chmod s busybox, spusťte:

# busybox chmod +x /usr/bin/chmod

Metoda 7 – Použití Perlu

V případě, že je na vašem systému dostupný Perl, můžete opravit oprávnění ke spuštění Chmodu příkazem:

# perl -e 'chmod 0755, "/usr/bin/chmod"'

Jak vidíte, jde o triviální problém, který mohou chytří uživatelé Linuxu snadno vyřešit. Pokud jste začínající nebo středně pokročilý uživatel Linuxu, pravděpodobně na to nikdy nepřijdete. Tyto otázky mohou být položeny ke kontrole duchapřítomnosti dotazovaného a jeho myšlení. Díky zmíněnému vláknu na Twitteru jsem se dnes dozvěděl něco užitečného. Doufám, že to bude užitečné i pro vás.

Související čtení:

  • Jak najít soubory na základě jejich oprávnění v systému Linux
  • Jak kopírovat soubory a měnit vlastnictví a oprávnění současně

Linux
  1. Linuxový příkaz mv

  2. Linux du command

  3. Příkaz chmod pro Linux

  1. Linuxový ip příkaz

  2. Linux cd příkaz

  3. 7 Příklady příkazů Chmod pro začátečníky

  1. Úvod do linuxového příkazu chmod

  2. Základní příklady příkazů „chmod“ v Linuxu

  3. Linux:Nastavte oprávnění pouze pro adresáře