Kategorie: Server

pam_exec - Vlastní skript jako modul PAM

Tento modul PAM umožňuje použít vlastní skript jako modul PAMu - například pro ověřování hesla proti libovolné databázi.

Proměnné:
  • $PAM_USER - Uživatelské jméno
  • $PAM_RUSER
  • $PAM_RHOST - IP adresa (při vzdáleném přihlášení)
  • $PAM_SERVICE - Použitá služba (sshd/gdm)
  • $PAM_TTY - Konzole (ssh/:0)
  • $PAM_TYPE
  • account - Má daný uživatel přístup k dané službě? (expirace hesla, existence uživatele)
  • auth - Je toto skutečně onen uživatel? (vyžádání a ověření hesla)
  • password - Změna hesla
  • session - Akce před a po přihlášení (vytvoření domovského adresáře)

Příklad: Zablokování uživatele (přes auth)

Toto zajistí, že pokud se bude přihlašovat uživatel s přihlašovacím jménem "nick" z LDAPu, bude se zdát že zadává špatné heslo, přestože ve skutečnosti bude zadávat správné heslo.
nano /pam-auth
#!/bin/bash
if [ "$PAM_USER" == "nick" ]; then
 exit 1 # Přihlášení selže (v rámci této metody)
else
 exit 0 # Přihlášení se zdaří (v rámci této metody)
fi
nano /etc/pam.d/common-auth
auth    sufficient      pam_unix.so nullok_secure
auth    required        pam_exec.so /pam-auth
auth    required        pam_ldap.so use_first_pass

Zablokování a zamčení účtu v LDAP pro Sambu ale i PAM

Modul pam_ldap umožňuje přihlašovat uživatele k LDAPu. Sambové příznaky ale pochopitelně ignoruje. Následujícím postupem zabráníme přihlášení uživatelům se zablokovaným nebo zamčeným účtem.
apt-get install ldap-utils
Vytvoříme skript, který se bude připojovat k LDAPu a kontrolovat, zda daný uživatel není zablokovaný nebo zamčený. Následně vrátí návratovou hodnotu, která pokud bude nulová, bude to PAM považovat za úspěch a přihlášení povolí.
nano /pam-auth
#!/bin/bash
# Uzivatele root neomezovat
if [ "$PAM_USER" == "root" ]; then
 exit 0;
fi
query="cn=$PAM_USER"
attr="sambaAcctFlags"
ldap_host="localhost"
ldap_searchbase="ou=users,dc=test"
ldap_binddn="cn=SERVER$,cn=machines,ou=users,dc=test"
ldap_bindpwd="heslo"
ldap_cmd="ldapsearch -h ${ldap_host} -x -D ${ldap_binddn} -w ${ldap_bindpwd} -b ${ldap_searchbase}"
result=$(${ldap_cmd} -LLL ${query} ${attr} | grep "^${attr}:")
if [ "${result}" != "" ]; then
  result=$(echo ${result} | sed -e 's/^.*: //')
  echo ${result}
  if [[ ${result} = *D* ]]; then
   # Zablokovany ucet (sambaAcctFlags obsahuje D)
   exit 2
  fi
  if [[ ${result} = *L* ]]; then
   # Zamceny ucet (sambaAcctFlags obsahuje L)
   exit 3
  fi
  # V poradku, muze se prihlasit
  exit 0
else
  # Uzivatel neexistuje
  exit 1
fi
Dále samozřejmě nastavíme PAM aby tento skript využíval...
nano /etc/pam.d/common-account
account	requisite	pam_exec.so /pam-auth
account	sufficient	pam_unix.so
account	sufficient	pam_ldap.so
Nyní by mělo být dokonáno. Před editací nastavení výše si ale předem otevřete konzolu roota, nesprávným nastavením můžete zabránit jakémukoli přihlášení. Již přihlášení uživatelé ale budou moci pracovat dál. Pokud budete mít otevřenou konzolu roota, můžete změny napravit. Jinak byste vše museli řešit restartováním serveru a Safe-módem. Změny v konfiguraci PAMu by se měli projevit ihned. Možná si říkáte jak to nakonec bude vypadat, když se pokusí přihlásit zablokovaný uživatel...
$ ssh uzivatel@10.1.0.1
uzivatel@10.1.0.1's password: 
/pam-auth failed: exit code 2
Connection closed by 10.1.0.1
Zkrátka nic moc, bohužel echo nedokáže nic vypsat, tak si musíme vystačit s návratovým kódem...

Komentáře


Nebyly přidány žádné komentáře.