Centos7+OPENLDAP+SAMBA配置
本文旨在测试客户端访问samba服务器时,通过ldap进行用户的认证。用户访问samba权限则通过samba本身控制。
Dn : cn=manager,dc=example,dc=com
密码:123456
创建条目的时候能看到samba:domain 既为已支持samba。
![]()
能看到samba条目
![]()
环境
Ldap服务器:centos7 系统 IP : 192.168.0.8 主机名:ldapnode Samba服务器:centos7 系统 IP: 192.168.0.63 主机名:node3 服务器均关闭防火墙以及selinux安装LDAP
配置epel源
[root@ldapnode ~]# cat /etc/yum.repos.d/epel.repo [epel] name=aliyun epel baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/ gpgcheck=0 [root@ldapnode ~]#安装ldap samba
[root@ldapnode ~]# yum install -y openldap-servers openldap-clients migrationtools samba-common samba samba-client 确保安装无误。 [root@ldapnode ~]# rpm -qa|grep ldap compat-openldap-2.3.43-5.el7.x86_64 openldap-clients-2.4.40-13.el7.x86_64 openldap-2.4.40-13.el7.x86_64 openldap-servers-2.4.40-13.el7.x86_64 [root@ldapnode ~]# rpm -qa|grep samba samba-common-libs-4.4.4-12.el7_3.x86_64 samba-common-tools-4.4.4-12.el7_3.x86_64 samba-client-4.4.4-12.el7_3.x86_64 samba-common-4.4.4-12.el7_3.noarch samba-client-libs-4.4.4-12.el7_3.x86_64 samba-libs-4.4.4-12.el7_3.x86_64 samba-4.4.4-12.el7_3.x86_64 [root@ldapnode ~]#配置时间同步
[root@ldapnode ~]# ntpdate pool.ntp.org 20 Jan 11:44:37 ntpdate[16342]: step time server 173.255.215.209 offset -28801.403434 sec配置LDAP
生成LDAP管理员密码
[root@ldapnode ~]# slappasswd New password: Re-enter new password: {SSHA}OONP2dL3kkukflJIDp4gepGR2EdfD0fN [root@ldapnode ~]# 此处我自己设置的为123456,自定义。拷贝数据库文件
[root@ldapnode ~]# ls /var/lib/ldap/ [root@ldapnode ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG [root@ldapnode ~]# chown ldap:ldap /var/lib/ldap/DB_CONFIG [root@ldapnode ~]# ls /var/lib/ldap/ DB_CONFIG [root@ldapnode ~]#修改ldap配置
因centos7操作系统较centos6在ldap的配置上变化很大,而我不熟悉centos7的配置。故先拷贝centos6的配置文件,进行相关samba方面的配置修改。然后通过slaptest命令进行格式转换。 下面为配置文件存放在/root下 [root@node2 ~]# cat slapd.conf # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/duaconf.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/collective.schema include /etc/openldap/schema/samba.schema # Allow LDAPv2 client connections. This is NOT the default. allow bind_v2 # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # Load dynamic backend modules # - modulepath is architecture dependent value (32/64-bit system) # - back_sql.la overlay requires openldap-server-sql package # - dyngroup.la and dynlist.la cannot be used at the same time # modulepath /usr/lib/openldap # modulepath /usr/lib64/openldap # moduleload accesslog.la # moduleload auditlog.la # moduleload back_sql.la # moduleload chain.la # moduleload collect.la # moduleload constraint.la # moduleload dds.la # moduleload deref.la # moduleload dyngroup.la # moduleload dynlist.la # moduleload memberof.la # moduleload pbind.la # moduleload pcache.la # moduleload ppolicy.la # moduleload refint.la # moduleload retcode.la # moduleload rwm.la # moduleload seqmod.la # moduleload smbk5pwd.la # moduleload sssvlv.la # moduleload syncprov.la # moduleload translucent.la # moduleload unique.la # moduleload valsort.la # The next three lines allow use of TLS for encrypting connections using a # dummy test certificate which you can generate by running # /usr/libexec/openldap/generate-server-cert.sh. Your client software may balk # at self-signed certificates, however. TLSCACertificatePath /etc/openldap/certs TLSCertificateFile "\"OpenLDAP Server\"" TLSCertificateKeyFile /etc/openldap/certs/password # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! # enable on-the-fly configuration (cn=config) #database config #access to * # by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage # by * none # enable server status monitoring (cn=monitor) database monitor access to * by dn.exact="cn=Manager,dc=example,dc=com" read by * none access to attrs=userPassword by self write by anonymous auth by * none access to attrs=sambaNTPassword by self write by anonymous auth by * none access to * by self write by * read ####################################################################### # database definitions ####################################################################### database bdb suffix "dc=example,dc=com" checkpoint 1024 15 rootdn "cn=Manager,dc=example,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # rootpw secret rootpw {SSHA}OONP2dL3kkukflJIDp4gepGR2EdfD0fN # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/ldap # Indices to maintain for this database index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub,approx index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub # Replicas of this database #replogfile /var/lib/ldap/openldap-master-replog #replica host=ldap-1.example.com:389 starttls=critical # bindmethod=sasl saslmech=GSSAPI # authcId=host/ldap-master.example.com@EXAMPLE.COM 红色地方为在原有基础上进行的修改调整,其中rootpw为之前生成的ldap管理员密码。Ldap管理员目录为cn=Manager,dc=example,dc=com删除原有ldap默认配置
[root@ldapnode ~]# rm -rf /etc/openldap/slapd.d/*生成新配置
[root@ldapnode ~]# cd /etc/openldap/slapd.d/ [root@ldapnode slapd.d]# ll total 0 [root@ldapnode slapd.d]# slaptest -f /root/slapd.conf -F /etc/openldap/slapd.d/ 58818b6f bdb_db_open: database "dc=example,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2). 58818b6f backend_startup_one (type=bdb, suffix="dc=example,dc=com"): bi_db_open failed! (2) slap_startup failed (test would succeed using the -u switch) [root@ldapnode slapd.d]# ll total 8 drwxr-x--- 3 root root 4096 Jan 20 12:00 cn=config -rw------- 1 root root 1251 Jan 20 12:00 cn=config.ldif 修改属组 [root@ldapnode slapd.d]# chown -R ldap:ldap /etc/openldap/slapd.d/创建ldap数据库文件
[root@ldapnode ~]# cat base.ldif dn: dc=example,dc=com objectClass: organization objectClass: dcObject dc: example o: example dn: cn=Manager,dc=example,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=group,dc=example,dc=com objectClass: organizationalUnit ou: group创建用户和组并生成相关配置文件
创建4个用户分别为user1-4 创建2个组分别为test1,test2。将user1,user2加入到组test1,将user3,user4加入到组test2. [root@ldapnode ~]# groupadd test1 [root@ldapnode ~]# groupadd test2 [root@ldapnode ~]# useradd user1 -g test1 [root@ldapnode ~]# useradd user2 -g test1 [root@ldapnode ~]# useradd user3 -g test2 [root@ldapnode ~]# useradd user4 -g test2 [root@ldapnode ~]# id user1 uid=1000(user1) gid=1000(test1) groups=1000(test1) [root@ldapnode ~]# id user2 uid=1001(user2) gid=1000(test1) groups=1000(test1) [root@ldapnode ~]# id user3 uid=1002(user3) gid=1001(test2) groups=1001(test2) [root@ldapnode ~]# id user4 uid=1003(user4) gid=1001(test2) groups=1001(test2) [root@ldapnode ~]# 生成用户跟组初始化文件 [root@ldapnode ~]# grep ":10[0-9][0-9]" /etc/passwd > /root/passwd [root@ldapnode ~]# grep ":10[0-9][0-9]" /etc/group > /root/group [root@ldapnode ~]# cat passwd user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1000::/home/user2:/bin/bash user3:x:1002:1001::/home/user3:/bin/bash user4:x:1003:1001::/home/user4:/bin/bash [root@ldapnode ~]# cat group test1:x:1000: test2:x:1001:编辑migrationtools配置文件
[root@ldapnode ~]# vi /usr/share/migrationtools/migrate_common.ph 第71行修改domain信息 70 # Default DNS domain 71 $DEFAULT_MAIL_DOMAIN = "example.com"; 72 73 # Default base 74 $DEFAULT_BASE = "dc=example,dc=com";将用户跟组文件导入到ldif文件中
[root@ldapnode ~]# /usr/share/migrationtools/migrate_passwd.pl passwd user.ldif [root@ldapnode ~]# /usr/share/migrationtools/migrate_group.pl group group.ldif将基础数据导入到LDAP中
将以上生成的base.ldif user.ldif group.ldif导入到LDAP中 修改权限并启动ldap [root@ldapnode ldap]# chown -R ldap:ldap /var/lib/ldap/ [root@ldapnode ldap]# systemctl start slapd 确定启动OK [root@ldapnode ~]# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f base.ldif Enter LDAP Password: adding new entry "dc=example,dc=com" adding new entry "cn=Manager,dc=example,dc=com" adding new entry "ou=People,dc=example,dc=com" adding new entry "ou=group,dc=example,dc=com" [root@ldapnode ~]# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f user.ldif Enter LDAP Password: adding new entry "uid=user1,ou=People,dc=example,dc=com" adding new entry "uid=user2,ou=People,dc=example,dc=com" adding new entry "uid=user3,ou=People,dc=example,dc=com" adding new entry "uid=user4,ou=People,dc=example,dc=com" [root@ldapnode ~]# ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f group.ldif Enter LDAP Password: adding new entry "cn=test1,ou=Group,dc=example,dc=com" adding new entry "cn=test2,ou=Group,dc=example,dc=com" [root@ldapnode ~]# 确认 [root@ldapnode ~]# ldapsearch -x -b "dc=example,dc=com" "(objectclass=*)" 省略返回安装phpadmin
[root@ldapnode ~]# yum install -y httpd php php-mbstring php-pear [root@ldapnode ~]# yum --enablerepo=epel -y install phpldapadmin [root@ldapnode ~]# vi /etc/httpd/conf/httpd.conf 151 AllowOverride all 156 Require all granted 157 </Directory> 163 <IfModule dir_module> 164 DirectoryIndex index.html index.cgi index.php 165 </IfModule> [root@ldapnode ~]# vi /etc/phpldapadmin/config.php 397 $servers->setValue('login','attr','dn'); 398 //$servers->setValue('login','attr','uid'); [root@ldapnode ~]# vi /etc/httpd/conf.d/phpldapadmin.conf Alias /phpldapadmin /usr/share/phpldapadmin/htdocs Alias /ldapadmin /usr/share/phpldapadmin/htdocs <Directory /usr/share/phpldapadmin/htdocs> <IfModule mod_authz_core.c> # Apache 2.4 Require local Require ip 192.168.0.0/24 </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> 启动httpd [root@ldapnode ~]# systemctl start httpd Web浏览器登入 http://192.168.0.8/ldapamin
Dn : cn=manager,dc=example,dc=com
密码:123456
创建条目的时候能看到samba:domain 既为已支持samba。
安装配置samba服务器
root@node3 ~]# yum -y install samba-common samba samba-client配置samba
[root@node3 b]# cat /etc/samba/smb.conf [global] workgroup = WORKGROUP server string = Samba-ldap Server Version %v netbios name = samba-ldapsam log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = ldapsam:ldap://192.168.0.8/ ldap suffix = "dc=example,dc=com" ldap admin dn = "cn=Manager,dc=example,dc=com" ldap user suffix = "ou=People,dc=example,dc=com" ldap group suffix = "ou=group,dc=example,dc=com" ldap delete dn = no ldap passwd sync = yes ldap ssl = no [myshare-a] comment = share for users path = /ceshi/a browseable = yes public = no writable = yes [myshare-b] comment = share for users path = /ceshi/b browseable = yes public = no writable = yes启动samba服务
[root@node3 b]# systemctl start smb保存ldap密码到samba中
提示:为了使samba能够访问ldap,把ldap管理员的密码保存到samba的secrets.tdb中(/var/lib/samba/private/secrets.tdb) [root@node3 b]# smbpasswd -w 123456 Setting stored password for "cn=Manager,dc=example,dc=com" in secrets.tdb [root@node3 b]#设置samba服务器从ldap认证
[root@node3 ~]# authconfig-tui
验证用户
[root@node3 ~]# id user1 uid=1000(user1) gid=1000(test1) groups=1000(test1) [root@node3 ~]# id user2 uid=1001(user2) gid=1000(test1) groups=1000(test1) [root@node3 ~]# id user3 uid=1002(user3) gid=1001(test2) groups=1001(test2) [root@node3 ~]# id user4 uid=1003(abc) gid=1003(abc) groups=1003(abc) [root@node3 ~]# cat /etc/passwd |grep user1 [root@node3 ~]# 可以看到本地不存在的用户但是能显示,则通过LDAP认证的用户。web刷新
点击刷新按钮
能看到samba条目
验证
设置域用户的samba密码 [root@node3 ~]# smbpasswd -a user1 New SMB password: Retype new SMB password: Added user user1. [root@node3 ~]# smbpasswd -a user2 New SMB password: Retype new SMB password: Added user user2. [root@node3 ~]# smbpasswd -a user3 New SMB password: Retype new SMB password: Added user user3. [root@node3 ~]# smbpasswd -a user4 New SMB password: Retype new SMB password: Added user user4. [root@node3 ~]# 均为123456 Linux 客户端测试 [root@node2 ~]# smbclient -U user1 //192.168.0.63/myshare-a Enter user1's password: Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4] smb: \> ls . D 0 Fri Jan 20 13:17:18 2017 .. D 0 Thu Jan 19 14:47:33 2017 18655232 blocks of size 1024. 17162180 blocks available smb: \> windows客户端测试
浙公网安备 33010602011771号