GNU/Linux >> Znalost Linux >  >> Linux

Proč nelze `su` použít k přepnutí na uživatele s prázdným heslem?

Vytvořte nový účet s názvem test :

$ sudo useradd test

test momentálně nemá heslo. Takže

$ su test

nefunguje. Pokud to zkusíte, budete požádáni o test heslo. žádné nemá. To není totéž jako jeho prázdné heslo, takže pokud zadáte prázdné heslo stisknutím klávesy Enter, zobrazí se zpráva „su:Authentication failure“.

Totéž platí, pokud přepnete na tty a pokusíte se přihlásit jako test :Prázdné heslo není akceptováno.

Nyní přiřaďte test prázdné heslo:

$ sudo passwd -d test

Nyní se můžete přihlásit jako test na tty zadáním prázdného řetězce jako hesla. Pokud se však pokusíte

$ su test

opět se vám stále zobrazuje zpráva „su:Authentication failure“ relace se nepřepne na uživatele test .

Proč tomu tak je?

Přijatá odpověď:

Z výstupu ldd /bin/su , su binární je kompilován pomocí pam knihovny (libpam* ), takže autentizaci, správu účtu, zahájení relace atd. bude spravovat pam .

Níže je uvedeno, jak su typického systému Ubuntu spravuje pam , měli byste najít podobný přístup, pokud používáte jinou distribuci.

pam pravidla pro su jsou definovány v souboru /etc/pam.d/su . Tento soubor také obsahuje common-auth , common-passwd , common-session soubory ze stejného adresáře jako běžné šablony pro pokrytí úkolů, které jejich název naznačuje (a používá se v jiných pam povolené služby).

V mém systému v dolní části /etc/pam.d/su mám:

@include common-auth
@include common-account
@include common-session

Předchozí řádky se nezabývají kontrolou nulového hesla, je to hlavně práce pam_unix modul.

Nyní /etc/pam.d/common-auth má:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

Z man pam_unix :

nullok

Výchozí akcí tohoto modulu je nepovolit uživateli přístup ke službě, pokud je jeho oficiální heslo prázdné. Argument nullok přepíše toto výchozí nastavení a umožní každému uživateli s
prázdným heslem přístup ke službě.

nullok_secure

Výchozí akcí tohoto modulu je nepovolit uživateli přístup ke službě, pokud je jeho oficiální heslo prázdné. Argument nullok_secure přepíše toto výchozí nastavení a umožní každému uživateli
s prázdným heslem přístup ke službě, pokud je hodnota PAM_TTY nastavena na jednu z hodnot nalezených v /etc/securetty.

jak můžete vidět, pokud nullok_secure Pokud není nastavena proměnná prostředí PAM_TTY je nastaveno uvedeným způsobem, uživatel s nulovým heslem se nebude moci přihlásit pomocí su .

Tedy umožnit každému uživateli s nulovým heslem provést su , musíte mít nullok argument do pam_unix modul:

auth    [success=1 default=ignore]      pam_unix.so nullok

toto není bezpečné jako common-auth soubor používá mnoho dalších služeb, dokonce pouze pro su to by se nemělo dělat. (Kvůli testování jej můžete nastavit jednou a poté se vrátit zpět k originálu. I když pokud chcete test provést, je lepší začlenit všechny logiky do /etc/pam.d/su soubor a poté upravte jakékoli změny, místo abyste si pohrávali s common-* soubor)

Související:Jak zřetězit příkazy ‚date -d @xxxxxx‘ a ‚najít ./‘?
Linux
  1. Správa uživatelů Linuxu pomocí příkazu passwd

  2. Proč se mohu přihlásit pomocí částečných hesel?

  3. Jak zakázat přihlášení SSH pomocí hesla

  1. CentOS / RHEL :Správa stárnutí hesel pro uživatele pomocí chage (s praktickými příklady)

  2. Jak povolit ssh s prázdnými hesly v Linuxu

  3. ssh - proč se mohu přihlásit pomocí částečných hesel?

  1. Proč se držím xtermu

  2. Automatizace hesel SSH v Linuxu pomocí sshpass

  3. jak zakázat přihlášení SSH pomocí hesla pro některé uživatele?