Chtěl bych vytvořit uživatele, který může dělat pouze jednu věc:přes ssh zadat skript (a argumenty skriptu z příkazového řádku), který se nachází v jedné konkrétní složce
(pro účely této otázky to nazvěme /local/remote_only_scripts/foo
) a nechat tento skript spustit a vrátit jeho výstup.
Aby bylo jasno, některé příklady věcí, které nechci, aby uživatel mohl dělat:
- Místně se přihlaste k účtu.
Přihlašovací aplikace je/bin/login
. Nejedná se o skript v/local/remote_only_scripts/foo
složka, takže by jej uživatel neměl volat. - Vzdáleně se přihlaste k účtu. Opět přihlášení (je to, co nazývá ssh?) není skript v příslušné složce.
- Seznam obsahu adresáře. ls je v
/bin/ls
. Nejedná se o skript v příslušném adresáři. - Upravte soubor v tomto adresáři. emacs, vi, gedit většina ostatních editorů nejsou skripty v tomto adresáři.
- Zobrazit obsah souboru v tomto adresáři.
- Spustit soubor v tomto adresáři, ke kterému nemá oprávnění.
Upozorňujeme, že toto jsou příklady existuje mnoho dalších akcí, které nechci, aby uživatel mohl dělat. Při zvažování akce se zeptejte „je to prováděno skriptem v /local/remote_only_scripts/foo
?" pokud je odpověď ne, uživatel by to neměl být schopen. Pokud je odpověď ano, pak by to měl být uživatel schopen.
PS:Dovolte mi objasnit, co myslím „přidáním uživatele“. Nemyslím tím přidání uživatele do nějakého ssh subsystému. Spíše mám na mysli přidání uživatele do počítačového systému. Takže například mám systém se systémem debian stable, nazvěte jej jeho adresou www.hg.bar.com. Chci přidat uživatele (prostřednictvím kuser, users-admin nebo useradd nebo nějakým podobným způsobem), nazvat ho hg_guest. hg_guest se nemůže přihlásit lokálně ani provádět žádnou z věcí ve výše uvedeném seznamu. Jediné, co může hg_guest udělat, je spouštět skripty „na dálku“. Řekl jsem, že by to měl být schopen udělat přes ssh, ale když o tom teď přemýšlím, možná mu povolení používat ssh umožní přihlásit se lokálně, takže může být potřeba nějaký jiný mechanismus.
Přijatá odpověď:
Existuje příkaz možnost v souboru author_keys. Zdá se, že tato možnost dělá přesně to, co chcete.
Související:Linux – Obnova dat z náhodného formátu na oddílu ext4?Všimněte si, že to není chroot nebo omezený shell. Umožňuje provádět pouze tyto příkazy přes ssh. S vaším příkladem by to bylo:
ssh somehost /local/remote_only_scripts/foo
Pro tento soubor autorizovaných klíčů:
command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key...
Existuje mnoho způsobů, pokud nechcete, aby se váš uživatel mohl přihlásit místně. Můžete buď:
- prostě nastavte jeho shell na /bin/false (možná budete potřebovat /bin/true protože ssh potřebuje platné přihlášení)
- zamkněte své heslo, viz
passwd -l
UPRAVIT :přidáno více možností omezení a objasněno, jak odeberete místní přístup.