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 heslasession
- 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-utilsVytvoří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 fiDá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.soNyní 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.1Zkrátka nic moc, bohužel
echo
nedokáže nic vypsat, tak si musíme vystačit s návratovým kódem...
Autor: ![]() Vydáno: 23.1.2011 19:32 Přečteno: 1599x Hodnocení: neohodnoceno Vaše hodnocení: |
pam_exec Linux ve světě Windows: Konfigurace PAM |
Komentáře
Nebyly přidány žádné komentáře.