Вместо въведение
Преди около 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.
Следната команда проверя за верността на комбинацията потребител/парола за Активната Директория:
#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
Следната команда проверява дали посочения потребител принадлежи в посочената група в АД:
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 ---
--- squid.conf ---
...
acl password proxy_auth REQUIRED
acl proxygroup external ldap_group proxygroup
...
--- squid.conf ---
Тези два реда указват, че за да използвате проксито, трябва задължително да се представите на софтуера с потребителско име и парола (от АД в случая) и да сте член на групата proxygroup.
П.П. Вариантите за проверка на потребителя и потребителската група са два. Тук е посочен само единия. При не толкова задълбочен преглед на файла с експорта на АД, ще видите и другата възможност.
<< video4linux и как да си направим webcam server | Напълно автономно делегиране на in-addr.arpa >>
|