За да може да са активни Windows потребители и групи в Samba са нужни допълнителни настройки на файловата система.
За целта е нужно файловата система да бъде монтирана с допълнителни опции acl и user_xattr. Можем да проверим за default опции при монтиране ето така:
# tune2fs -l /dev/mapper/vg_server-lv_root |grep -i "mount opt"
Default mount options: user_xattr acl
Ако не са настроени по default, можем да го направим с командата:
# tune2fs -o acl /dev/mapper/vg_server-lv_root
# tune2fs -o user_xattr /dev/mapper/vg_server-lv_root
За да проверим в момента тази опция дали е активна, използваме следната команда:
# getfacl /Инсталираме следните пакети: samba, krb5 (Kerberos), OpenLDAP. При Oracle Linux пакетите са както следва:
getfacl: Removing leading '/' from absolute path names
# file: .
# owner: root
# group: root
user::r-x
group::r-x
other::r-x
# rpm -qa|grep krb
pam_krb5-2.3.11-9.el6.x86_64
krb5-libs-1.10.3-15.el6_5.1.x86_64
krb5-libs-1.10.3-15.el6_5.1.i686
krb5-workstation-1.10.3-15.el6_5.1.x86_64
# rpm -qa|grep -i openldap
openldap-2.4.23-34.el6_5.1.i686
openldap-2.4.23-34.el6_5.1.x86_64
# rpm -qa|grep -i sambaВ другите дистрибуции имената на пакетите са аналогични.
samba-client-3.6.9-169.el6_5.x86_64
samba-common-3.6.9-169.el6_5.x86_64
samba-winbind-clients-3.6.9-169.el6_5.x86_64
samba-3.6.9-169.el6_5.x86_64
samba-winbind-3.6.9-169.el6_5.x86_64
Трябва да се уверим, че Samba е компилирана с поддръжка на LDAP, Kerberos, Winbind и Active Directory:
# smbd -b | grep LDAPНастройваме и тестваме Kerberos. Нека домейна да се казва HORIZON9.LOCAL и домейн сървъра се намира на адрес ad-dc-01.horizon9.local
HAVE_LDAP_H
HAVE_LDAP
HAVE_LDAP_DOMAIN2HOSTLIST
# smbd -b | grep KRB
HAVE_KRB5_H
HAVE_ADDRTYPE_IN_KRB5_ADDRESS
HAVE_KRB5 # smbd -b | grep ADS
WITH_ADS
WITH_ADS
# smbd -b | grep WINBIND
WITH_WINBIND
WITH_WINBIN
Ето как трябва да излгежда /etc/krb5.conf:
[libdefaults]
default_realm = HORIZON9.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
HORIZON9.LOCAL = {
kdc = AD-DC-01.HORIZON9.LOCAL
admin_server = AD-DC-01.HORIZON9.LOCAL
default_domain = HORIZON9.LOCAL
}
[domain_realm]
.horizon9.local = HORIZON9.LOCAL
horizon9.local = HORIZON9.LOCAL
Тестваме дали работи:
# kinit Administrator@HORIZON9.LOCALАко не покаже никакво съобщение, значи работи както трябва.
Password for Administrator@HORIZON9.LOCAL:
#
Настройките на Samba са както следва за примерен домейн HORIZON9 (/etc/samba/smb.conf):
[global]Файлът /etc/samba/user.map трябва да съдържа следното:
log file = /var/log/samba/log.%m
max log size = 50
security = ads
netbios name = LINUX-SAMBA-AD
realm = HORIZON9.LOCAL
workgroup = HORIZON9
idmap uid = 500-20000000
idmap gid = 500-20000000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template homedir = /home/%U
template shell = /bin/bash
client use spnego = yes
domain master = no
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
username map = /etc/samba/user.map
[share1]
path = /home/samba
comment = Share1
public = yes
browsable = yes
guest ok = yes
writable = yes
!root = HORIZON9\Administrator HORIZON9\Administratorили който и да е потребител с администраторски права в домейна.
# net ads join -U AdministratorГрешката при DNS update се поправя, като се добави на ръка запис в Windows DNS-а.
Enter Administrator's password:
Using short domain name -- HORIZON9
Joined 'LINUX-SAMBA-AD' to dns domain 'horizon9.local'
No DNS domain configured for linux-samba-ad. Unable to perform DNS Update.
DNS update failed!
#
За да имат достъп програмите до новите потребители и групи от домейна, трябва да редактираме /etc/nsswitch.conf
Редовете:
passwd: filesги заменяме с:
shadow: files
group: files
passwd: compat winbindРестартираме winbind и samba:
shadow: files
group: compat winbind
# service winbind restartДобавяме групата 'Domain Admins' към ACL на файловата система, където ще се намират споделените директории (примерно /home/samba):
# service smb restart
# setfacl -Rm g:'Domain Admins':rwx /home/sambaАко някоя от тези команди ви дава грешка, че не може да намери такава група, най-вероятно е да не се виждат потребителите/групите от домейна. Може да проверите дали потребителите и групите се виждат с помощта на следната команда:
# chown -R nobody:"domain admins" /home/samba
# wbinfo -gДобавяме winbind в методите за автентикация в /etc/pam.d/. В Oracle Linux това се прави с командата authconfig-tui (за конзола) или authconfig-gtk (графичен интерфейс). Ето промените, които прави authconfig-tui:
# wbinfo -u
# grep -nri winb /etc/pam.d/
/etc/pam.d/system-auth-ac:7:auth sufficient pam_winbind.so use_first_passАко всичко е наред, можете вече да си раздавате права за samba shares от windows машина. След като сте раздали права от Windows машината, може да проверите дали всичко е наред със споделената директория (/home/samba):
/etc/pam.d/system-auth-ac:12:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/system-auth-ac:17:password sufficient pam_winbind.so use_authtok
/etc/pam.d/smartcard-auth-ac:10:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/password-auth-ac:7:auth sufficient pam_winbind.so use_first_pass
/etc/pam.d/password-auth-ac:12:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/password-auth-ac:17:password sufficient pam_winbind.so use_authtok
/etc/pam.d/smartcard-auth:10:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/fingerprint-auth-ac:10:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/fingerprint-auth:10:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/system-auth:7:auth sufficient pam_winbind.so use_first_pass
/etc/pam.d/system-auth:12:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/system-auth:17:password sufficient pam_winbind.so use_authtok
/etc/pam.d/password-auth:7:auth sufficient pam_winbind.so use_first_pass
/etc/pam.d/password-auth:12:account [default=bad success=ok user_unknown=ignore] pam_winbind.so
/etc/pam.d/password-auth:17:password sufficient pam_winbind.so use_authtok
# getfacl /home/sambaТук се виждат и добавените права за достъп от АD потребители и групи.
getfacl: Removing leading '/' from absolute path names
# file: home/samba
# owner: administrator
# group: domain\040admins
user::rwx
user:root:rwx
user:nobody:rwx
group::rwx
group:domain\040users:r-x
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:domain\040users:r-x
default:group:domain\040admins:rwx
default:mask::rwx
default:other::r-x
Забележка:
Навсякъде, където има нужда да се пише домейн или име на хост, пишете го с ГЛАВНИ БУКВИ. Samba е капризна и понякога нещата не се получават, защото нещо е написано с малки букви.
Ако искате да разрешите потребител guest за да могат компютри извън домейна да имат достъп до samba share, е нужно да добавите следното в /etc/samba/user.map :
!root = HORIZON9\guest HORIZON9\guestОт компютъра, който не е в домейна, при опит за достъпване на samba share ще ви поиска потребител и парола. Пишете за потребител: HORIZON9\guest без да въвеждате парола, и вече имате достъп до този share.