Trvalo mi hodiny, než jsem vyřešil tento problém SSH s jedním z mých třídních účtů na serverech mé školy.
Bez zadání hesla jsem se nemohl přihlásit ssh do jednoho konkrétního účtu třídy, zatímco ověřování bez hesla fungovalo s mými účty ostatních tříd. Adresář .ssh/ a veškerý jeho obsah měl stejná správná oprávnění jako ostatní účty třídy.
Ukázalo se, že problémem byla oprávnění nastavená v mém vlastním domovském adresáři. Ověřování bez hesla nefungovalo, když byla oprávnění v mém adresáři HOME nastavena na 770 (bez ohledu na oprávnění nastavená pro .ssh/), ale fungovala s oprávněními nastavenými na 755 nebo 700.
Ví někdo, proč to SSH dělá? Je to proto, že oprávnění domovského adresáře jsou příliš tolerantní? Proč SSH odmítá autentizaci pomocí veřejných/soukromých klíčů, když je domovský adresář nastaven na tolerantnější než 700?
Přijatá odpověď:
Toto je výchozí chování pro SSH. Chrání uživatelské klíče vynucením rwx------
na $HOME/.ssh
a zajistit, aby pouze vlastník měl oprávnění k zápisu do $HOME
. Pokud má uživatel jiný než příslušný vlastník oprávnění k zápisu na $HOME
adresář, mohli by škodlivě změnit oprávnění na $HOME/.ssh
, který může unést uživatelské klíče, known_hosts
, nebo něco podobného. Stručně řečeno, následující oprávnění na $HOME
bude stačit pro fungování SSH.
rwx------
rwxr-x---
rwxr-xr-x
SSH nebude fungovat správně a v případě jakékoli variace g+w
odešle varování do zařízení protokolu nebo o+w
existuje na $HOME
adresář. Administrátor však může toto chování potlačit definováním StrictModes no
v sshd_config
(nebo podobný) konfigurační soubor, i když by mělo být jasné, že to nedoporučujeme .