Linux i Windows - integracja AD z usługami linuxa
Wpis ma na celu pokazanie jak można zintegrowac Active Directory z serwerem plików SAMBA oraz dostępu przez SSH do serwera linuxowego.
Zaleta tego jest iz mamy centralny katalog uzyszkodnikow. W moim przypadku mam 3 serwery samby, kilka maszyn z dostepem przez ssh, wiec zarzadzanie uzytszkodnikami, ich haslami mam na jednej maszynie windowsowej. Oczywiscie komputery w firmie mam podpiete do serwera AD wiec jest tylko jednokrotne podanie hasla przy logowaniu.
Sposob autoryzacji oparty o AD wykorzystuje tez przy autoryzacji w apache2 -> bylo to opisywane juz na blogu.
Nie będę opisywał instalacji AD a jedynie to co jest w linuxie.
tak wyglada ad (mniej wiecej :)):
Założenia:
nazwa domeny. FIRMA.Z nazwa servera: DC.FIRMA.Z nazwa netbios: FIRMA ip dc: 192.168.2.204 system DC: windows 2008r2 std userzy: administrator, grzenio
nazwa servera linux: SAMBA.FIRMA.Z ip linuxa: 192.168.2.251 system linux: Debian 6
na poczatek aktualizacja system i instalacja potrzebnych i nie potrzebnych pakietow
apt-get update apt-get upgrade apt-get install krb5-config krb5-user krb5-doc winbind samba rdate smbldap-tools ldb-tools mc vim-nox
dorabiamy sobie wpisy w /etc/hosts
vim /etc/hosts
zawartosc:
192.168.2.251 samba.FIRMA.Z samba
teraz musimy ustawic kerberosa
vim /etc/krb5.conf
zmiany ktore musimy dokonac lub dopisac, reszty nie ruszamy. edytujemy 3 sekcje: libdefaults, realms i domain_realm
[libdefaults] default_realm = FIRMA.Z krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true dns_lookup_realm = false dns_lookup_kdc = false clock_skew = 300 ticket_lifetime = 24h
...
[realms] FIRMA.Z = { kdc = DC.FIRMA.Z admin_server = DC.FIRMA.Z default_domain = FIRMA.Z }
...
[domain_realm] .kerberos.server = FIRMA.Z .FIRMA.Z = FIRMA.Z
Testujemy:
kinit administrator@FIRMA.Z
zostaniemy poproszeni o haslo. podanie zlego hasla wywali error, podanie hasla prawidlowego nic nie pokaze.
modyfikujemy odpowiednio ponizej pliki
# /etc/nsswitch.conf passwd: compat winbind group: compat winbind shadow: compat winbind
...
#samba/smb.conf [global] workgroup = FIRMA realm = FIRMA.Z #domena load printers = no preferred master = no local master = no server string = fileserver password server = 192.168.2.204 #ip dc encrypt passwords = yes security = ADS netbios name = SAMBA client signing = Yes dns proxy = No wins server = 192.168.2.204 #ip dc idmap uid = 600-20000 idmap gid = 600-20000 winbind separator = + winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes template shell = /bin/bash [homes] comment = Home Direcotries valid users = %S read only = No browseable = No
dodajemy Linuxa do domeny
net ads join -U Administrator
zostaniemy poproszeni o haslo administratora
zakładamy foldery domowe, sama nie umie sama tego zrobic, bedzie to potrafil robic sshd
cd /home mkdir FIRMA/ mkdir FIRMA/administrator/ mkdir FIRMA/grzenio/
nadajemy odpowiednie prawa
chown administrator administrator chown grzenio grzenio
restartujemy co trzeba:
/etc/init.d/samba restart /etc/init.d/winbind restart
no i to wszystko jezeli chodzi o sambe. czas na ssh
wynik taki:
grzenio@samba:~$ pwd /home/FIRMA/grzenio grzenio@samba:~$ ls -al total 20 drwxrwxrwx 4 grzenio root 4096 Jun 30 17:00 . drwxr-xr-x 4 root root 4096 Jun 30 13:11 .. -rw------- 1 grzenio domain users 101 Jun 30 17:00 .bash_history drwxr-xr-x 2 grzenio domain users 4096 Jun 30 13:41 New folder drwxr-xr-x 2 grzenio domain users 4096 Jun 30 13:49 test grzenio@samba:~$
tutaj tak naprawde tyko podam jakie wpisy dodac trzeba do jakich plikow po tym tylko restart sshd wystarczy:)
# /etc/pam.d/common-account account sufficient pam_winbind.so account required pam_unix.so # /etc/pam.d/common-auth auth sufficient pam_winbind.so auth required pam_unix.so nullok_secure use_first_pass # /etc/pam.d/common-password password required pam_unix.so nullok obscure min=4 max=50 md5 # /etc/pam.d/common-session session required pam_mkhomedir.so umask=0022 skel=/etc/skel apt-get install sudo # /etc/sudoers %UnixAdmins ALL=(ALL) ALL