Giới thiệu hệ thống
Bài viết này trình bày cách thiết lập máy chủ chia sẻ tệp sử dụng Samba phiên bản 4.9.1 làm dịch vụ chia sẻ tệp, OpenLDAP phiên bản 2.4.44 làm cơ sở dữ liệu phía sau, cùng với smbldap-tools phiên bản 0.9.11 và hệ điều hành CentOS 7.
Một số lưu ý quan trọng
- Samba không chỉ có chức năng chia sẻ tệp mà còn có thể hoạt động như thành viên miền Windows hoặc thậm chí là bộ điều khiển miền Windows.
- Do sử dụng tính năng chia sẻ tệp của Samba liên quan trực tiếp đến quyền truy cập tệp, các người dùng trong Samba phải tồn tại trong hệ thống Linux. Vì sử dụng OpenLDAP làm cơ sở dữ liệu phía sau, cần cấu hình NSS để hệ thống có thể truy vấn thông tin người dùng từ OpenLDAP.
- Samba có thể sử dụng PAM làm mô-đun xác thực hoặc chương trình xác thực tích hợp. Trong CentOS, phiên bản biên dịch được cấu hình sử dụng chương trình xác thực tích hợp nên có thể bỏ qua cấu hình PAM.
Cài đặt phần mềm cơ bản
Thực hiện cài đặt các gói phần mềm cần thiết:
yum -y install samba openldap-servers openldap-clients smbldap-tools nss-pam-ldapd
Cấu hình dịch vụ OpenLDAP
Xóa cấu hình mặc định và bắt đầu thiết lập mới:
# Sao lưu cấu hình hiện tại
mkdir /root/backup
tar -Jcvf /root/backup/ldap-config-$(date '+(%Y.%m.%d_%H:%M:%S)').tar.xz /etc/openldap/slapd.d/
tar -Jcvf /root/backup/ldap-data-$(date '+(%Y.%m.%d_%H:%M:%S)').tar.xz /var/lib/ldap/
# Xóa cấu hình cũ
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# Sao chép schema hỗ trợ Samba
cp /usr/share/doc/samba-4.9.1/LDAP/samba.ldif /etc/openldap/schema/
Tạo tập tin cấu hình LDAP với nội dung sau:
# file: /tmp/ldap-server.ldif
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/samba.ldif
dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcAccess: to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
dn: olcDatabase=monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: monitor
olcAccess: to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.base="cn=Manager,dc=example,dc=org" read
by * none
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcSuffix: dc=example,dc=org
olcRootDN: cn=Manager,dc=example,dc=org
olcRootPW: {SSHA}generated_password_hash_here
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub,uid
Áp dụng cấu hình và khởi động dịch vụ:
slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l /tmp/ldap-server.ldif
chown -R ldap:ldap /etc/openldap/slapd.d/*
systemctl start slapd
Cấu hình Samba
Cấu hình đơn giản để kiểm tra khả năng kết nối với OpenLDAP:
# file: /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba File Server
log file = /var/log/samba/smb.log
security = user
passdb backend = ldapsam:ldap://127.0.0.1
ldap suffix = dc=example,dc=org
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap admin dn = cn=Manager,dc=example,dc=org
ldap ssl = no
load printers = no
[homes]
comment = User Home Directories
browseable = no
writable = yes
create mask = 0600
directory mask = 0700
Lưu trữ mật khẩu kết nối LDAP:
smbpasswd -w your_ldap_password
Khởi động dịch vụ Samba:
systemctl start nmb
systemctl start smb
Cấu hình smbldap-tools
Sử dụng công cụ để tạo dữ liệu cần thiết cho Samba:
smbldap-config
smbldap-populate
Tạo người dùng thử nghiệm:
smbldap-useradd -a -m testuser
smbldap-passwd testuser
Cấu hình NSS (Name Service Switch)
Sửa đổi tập tin cấu hình NSS để thêm hỗ trợ LDAP:
# file: /etc/nsswitch.conf
passwd: files ldap
shadow: files
group: files ldap
hosts: files dns myhostname
Cấu hình nslcd daemon:
# file: /etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://127.0.0.1/
base dc=example,dc=org
binddn cn=Manager,dc=example,dc=org
bindpw your_ldap_password
ssl no
filter passwd (&(objectClass=posixAccount)(uidNumber>=1000))
filter group (&(objectClass=posixGroup)(gidNumber>=500))
Khởi động dịch vụ nslcd:
chmod 600 /etc/nslcd.conf
systemctl start nslcd
Kiểm tra cấu hình NSS:
getent passwd testuser
Cấu hình quyền hạn Samba
Để ngăn chặn truy cập trái phép thông qua SELinux:
semanage fcontext -a -t samba_share_t '/var/smb(/.*)?'
restorecon -R /var/smb/
Thử nghiệm kết nối Samba:
smbclient -L //127.0.0.1/ -U testuser