от Аерион(4-10-2004)

рейтинг (30)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Вместо въведение

    Преди около 7 месеца, на предната ми месторабота започнах, като всеки разумен човек да се стремя към централизация на управлението във фирмата. Това което беше едно от най – досадните задължения бе да се задават права на потребителите за достъп до интернет. Мрежата беше Microsoft базирана - Активна Директория. Естественото решение на задачата беше да се избере Microsoft ISA Server, но за мое най - голямо щастие, никой от хората от които зависеше закупуването на такова решение не му се доверяваха - IT Managera - понеже го познаваше до някъде, генералния директор - понеже хич не му хареса телефонния номер който всъщност беше цената, която трябваше да се заплати. Тогава имах възможността да се поровя малко с LDAP (openldap) и със squid. Така попаднах на описаното по - долу решение.
Необходим софтуер:

    • openldap
    • SQUID - компилиран с поддръжка на ldap (това означава, че имате следните програми: squid_ldap_auth и squid_ldap_group)
Запознаване със структурата на Активната Директория:
    За да придобиете представа, как изглежда структурата на Активната Директория (АД) можете да я разгледате от вашата система с командата:
    example# ldapsearch -L -D "yourdomainyourdomainusername" "(&(objectCategory=person)(objectClass=user)(sAMAccountName= someusername))" -W
    Вие ще бъдете попитан за паролата на потребителя на домейна ( yourdomainusername). Отговора на тази команда е доста голям, затова по -добре е да го пренасочите към файл. За предпочитане е да разгледате файла и да се опитате да вникнете в съдържанието му. В следващата версия на този документ, ще има кратко представяне на файла.
Запознаване с програмите squid_ldap_auth и squid_ldap_group:
    За да имате представа как точно работят тези две команди, най – добре е да ги тествате от конзола, преди да ги “дадете” на SQUID да работи с тях. Да предположим, че имате конфигуриран Microsoft Active Direcotry Server с име на домейна: example.com, потребител testuser, който принадлежи в групата proxygroup, парола на потребителя testuserpass и интернет адрес 1.2.3.4. За да може да работи SQUID с АД, той трябва да може да се идентифицира в нея. За целта можете да използвате вече съществуващ потребител или да създадете нов. В нашия случай, ще използваме потребител proxyauth с парола proxyauthpassword.
    • squid_ldap_auth:
    Следната команда проверя за верността на комбинацията потребител/парола за Активната Директория:
    #example /usr/lib/squid/squid_ldap_auth -b cn=users,dc=example,dc=com -u cn -h 1.2.3.4 -D cn=proxyauth,cn=users,dc=example,dc=com -w “proxyauthpassword” -f sAMAccountName=%s
    Ако познавате openldap и ако сте разгледали внимателно файла със съдържанието на активната директория, в общи линии ще сте наясно какво точно иска този файл. И все пак – накратко:
      -b cn=users,dc=example,dc=com - с този ред указвате, точно в коя част на дървото на АД ще търсим информация;
      -u cn - показвате обектния клас с който ще търсим нужната информация;
      -h 1.2.3.4 – това е адреса на АД;
      -D cn=proxyauth,cn=users,dc=example,dc=com – указва потребителя, който иска информацията. Това трябва да е валиден за АД потребител;
      -w "proxyauthpassword" – парола за идентификация в АД на потребителя, който търси информацията;
      -f sAMAccountName=%s – това е информацията която търсим (проверяваме) – съответствие на потребител и парола.

    Когато стартирате програмата, няма да получите никакъв отговор, запитване или промпт. Програмата очаква да въведете основната информация (потребител/парола) в следния формат: username password Ако комбинацията е вярна, ще получите отговор “OK”, ако ли не - “ERR”.
      Ето един пример:
    example# /usr/lib/squid/squid_ldap_auth -b cn=users,dc=example,dc=com -u cn -h 1.2.3.4 -D cn=proxyauth,cn=users,dc=brs,dc=bg -w "proxyauthpassword" -f sAMAccountName=%s testuser testuserpass OK testuser someotherpass ERR
    • squid_ldap_group:
    Следната команда проверява дали посочения потребител принадлежи в посочената група в АД:
    example# /usr/lib/squid/squid_ldap_group -b "dc=example,dc=com" -h 1.2.3.4 -D "cn=proxyauth,cn=users,dc=example,dc=com" -w proxyauthpassword -f "(&(cn=%a)(member=%v))" -F "(sAMAccountName=%s)"
    Тук неясните аргументи вече трябва да са са по – малко:
      member=%v – дали потребителя принадлежи на посочената група.
    И при тази команда, след изпълнението й, няма да получите никаква реакция – командата очаква да въведете потребителско име и група в следната последователност: username group Отново възможните отговри са “OK”, и “ERR”.
      Ето един пример:
    example# /usr/lib/squid/squid_ldap_group -b "dc=example,dc=com" -h 1.2.3.4 -D "cn=proxyauth,cn=users,dc=example,dc=com" -w “proxyauthpassword” -f "(&(cn=%a)(member=%v))" -F "(sAMAccountName=%s)" testuser proxygroup OK testuser othergroup-testuser-dont-belong ERR
Файла squid.conf и имплементиране на програмите squid_ldap_auth и squid_ldap_group в него.
    След като се запознахме с начина на работа на тези програми, остава само да ги включим в конфигурационния файл на squid, да опишем правата за достъп (acl) и сме готови да пуснем нашия сървър. Тъй, като най – добрата документация за SQUID си остава конфигурационния му файл, ще опиша само местата на които трябва да бъдат въведени програмите и как в общи линии изглеждат правата за достъп.
    • За програмата squid_ldap_auth
    --- squid.conf ---
    ...
    auth_param basic program /usr/lib/squid/squid_ldap_auth -b cn=users,dc=example,dc=com -u cn -h 1.2.3.4 -D cn=proxyauth,cn=users,dc=brs,dc=bg -w "proxyauthpassword" -f sAMAccountName=%s ...
    --- squid.conf ----
    • За програмата squid_ldap_group
    --- squid.conf --- ...
    external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -b "dc=brs,dc=bg" -h brs-dc1.brs.bg -D "cn=proxyauth,cn=users,dc=brs,dc=bg" -w Aa123456 -f "(&(cn=%a)(member=%v))" -F "(sAMAccountName=%s)"
    ...
    --- squid.conf ---
    • правата на достъп (acl):

    --- squid.conf ---
    ...
    acl password proxy_auth REQUIRED
    acl proxygroup external ldap_group proxygroup
    ...
    --- squid.conf ---
    Тези два реда указват, че за да използвате проксито, трябва задължително да се представите на софтуера с потребителско име и парола (от АД в случая) и да сте член на групата proxygroup. П.П. Вариантите за проверка на потребителя и потребителската група са два. Тук е посочен само единия. При не толкова задълбочен преглед на файла с експорта на АД, ще видите и другата възможност.


<< video4linux и как да си направим webcam server | Напълно автономно делегиране на in-addr.arpa >>