详解samba+OPENldap搭建文件共享服务器问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

详解samba+OPENldap搭建⽂件共享服务器问题
这⾥我使⽤的是 samba(⽂件共享服务) v4.9.1 + OPENldap(后端数据库软件) v2.4.44 + smbldap-tools(后端数据库管理软件) v0.9.11 + CentOS7。

如果有不同,可能会有部分问题。

注:
samba 的功能不只有⽂件共享,还可以作为⼀台Windows域成员,甚⾄Windows域控制器。

千万不要认为samba只是⼀个⽂件共享服务。

由于我们使⽤了samba的⽂件共享功能,与⽂件权限有直接的联系,所以samba中的使⽤的⽤户必须是Linux中能查询到。

因为使⽤了 OPENldap 作为samba 的后端数据库,所以我们这⾥还需要配置Linux能查询到 OPENldap 中的⽤户信息,也就是需要配置 NSS。

关于NSS部分的配置需要在smbldap-tools 初始化ldap数据库后完成NSS部分的配置,需要注意
samba 有使⽤PAM作为认证模块,和使⽤其⾃带的认证程序,在CentOS中编译时配置的是使⽤其⾃带的认证程序,所以PAM的配置可以省略。

如果想要配置OPENldap中的⽤户可以登⼊系统,可以查阅这篇⽂章:《配置Linux使⽤LDAP⽤户认证》,其中的配置与本⽂中的配置并不相同,需要注意
初始化配置
yum 源和⽹络配置省略。

yum -y install samba openldap-servers openldap-clients smbldap-tools nss-pam-ldapd
配置OPENldap服务
这⾥只进⾏简单的服务配置,数据库配置这⾥会使⽤ smbldap-tools 进⾏配置,如果不知道OPENldap 可以去看看这篇⽂章:《OPENLDAP 服务搭建和后期管理》
这⾥将 OPENldap 所有配置清空,重新配置。

# ⾸先备份⽂件,以免⽆法复原
mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/openldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap/
# 然后再删除配置⽂件
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# 复制⼀个samba的schema⽂件
cp /usr/share/doc/samba-4.9.1/LDAP/samba.ldif /etc/openldap/schema/
这⾥的配置⽂件我是从/usr/share/openldap-servers/slapd.ldif中复制过来,并修改成如下这个样⼦的。

主要修改了baseDN(suffix), OPENLDAPTLS,olcRootPW(密码由 slappasswd ⽣成,本⽂中的密码为: 123456) 和 include
# file: /tmp/slapd.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=black,dc=com" read
by * none
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcSuffix: dc=black,dc=com
olcRootDN: cn=Manager,dc=black,dc=com
olcRootPW: {SSHA}l1vBI/HOMKLEiQZgcm3Co+hFQI68rH1Q
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub,uid
根据配置⽣成服务器的配置⽂件
slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l /tmp/slapd.ldif
# 这⾥还需要注意⽂件属主还是root的,需要改回为openldap
chown -R ldap:ldap /etc/openldap/slapd.d/*
# 然后再开启服务即可
systemctl start slapd
_#################### 100.00% eta none elapsed none fast!
Closing DB...
注:这⾥只配置了OPENldap中的服务配置部分,没有配置OPENldap 的数据库,这⾥再次强调以下。

配置 samba
这⾥只是为了测试使⽤samba 与 OPENldap 的使⽤,就不进⾏过于复杂的⽂件共享配置了,只共享⼀个⽤户的家⽬录仅供测试。

# file: /etc/samba/smb.conf
[global]
workgroup = MYGROUP # 指定共享组名称。

server string = Samba Server Version %v
log file = /var/log/samba/log # ⽇志
security = user # 指定安全级别为User
passdb backend = ldapsam:ldap://127.0.0.1 # 指定passdb 的后端数据库使⽤ldapsam
ldap suffix = dc=black,dc=com # 指定ldap的 suffix
ldap user suffix = ou=People # 指定⽤户的 suffix 段位 ou=People 这⾥会与上⼀个suffix结合。

ldap group suffix = ou=Group # 上同,指定的是⽤户组。

ldap admin dn = cn=Manager,dc=black,dc=com # 指定查询ldap服务使⽤的管理员⽤户
ldap ssl = no # 指定不使⽤SSL加密。

load printers = no # 指定不加载共享打印机。

[homes]
comment = Home Directories
browseable = no
writable = yes
create mask = 0600
directory mask = 700
smbpasswd -w 123456 # 存储⽤于连接 LDAP 服务的⽤户密码,⾮常重要,否则⽆法启动smb服务。

启动samba服务
systemctl start nmb
systemctl start smb
smbldap-tools 配置
这⾥使⽤ smbldap-tools 来快速完成 samba 服务所需要的数据信息,同时通过 smblda-tools 来进⾏⽤户段管理。

但是smbldap-tools 有⼀个缺点就是不会管你本地⽤户是否有相同的UID 或则 GID,可能有冲突,需要注意。

smbldap 会从 /etc/samba/smb.conf 读取部分信息,所以需要先配置好samba再配置 smbldap-tools 服务。

smbldap-config # 配置 smbldap-tools 的配置,这⾥使⽤smbldap-conifg 简易配置。

这⾥省略下⾯的配置过程,不知道的默认即可。

smbldap-populate # 初始化配置 OPENldap 数据库。

这⾥再创建⼀个⽤户⽤于后⾯的测试使⽤。

smbldap-useradd -a -m User1 # 添加⽤户User2
# -a:指定添加的⽤户类型为Windows,这样samba 才能识别到该⽤户。

# -m:指定创建该⽤户的家⽬录。

smbldap-passwd User1 # 修改该⽤户的⽤户密码
这⾥省略该⽤户的密码修改过程。

这样 OPENldap 的数据库初始化就完成了,这样就能去查询OPENldap 中的内容了。

如下图,这个就是smbldap-populate所创建的内容了。

下图为 apache Directory Studio,有兴趣可以去研究⼀下《apache Directory Studio 简易使⽤》
在图中我们可以看到 UID = root 和 nobody 的⽤户,我并不想让这些特殊⽤户登⼊到服务器,所以在下⾯的配置,我会通过 fliter 将这2个⽤户过滤掉。

NSS 配置
这⾥的NSS配置主要就是需要配置,NSS 将 LDAP 的请求转发给 nslcd ,由 nslcd 来查询 OPENldap 中的⽤户信息。

⾸先配置 NSS ,只需添加 passwd 段和 group 段的ldap认证即可。

# file: /etc/nsswitch.conf
passwd: files ldap
shadow: files
group: files ldap
hosts: files dns myhostname
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: nisplus sss
publickey: nisplus
automount: files nisplus sss
aliases: files nisplus
然后配置 nslcd,注意 nslcd 是以daemon 形式运⾏的,主要配置后重启。

# file:/etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://127.0.0.1/ # ldap URL地址
base dc=black,dc=com # base dn 路径
binddn cn=Manager,dc=black,dc=com # 指定连接的⽤户
bindpw 123456 # 指定密码
ssl no # 指定不要使⽤SSL 加密连接。

filter passwd (&(objectClass=posixAccount)(uidNumber>=1000)) # 编写 passwd 的过滤规则。

filter group (&(objectClass=posixGroup)(gidNumber>=500)) # 上同,编写的是 group
Copy
chmod 600 /etc/nslcd.conf # 配置⽂件权限,⾮常重要,否则⽆法启动服务。

systemctl start nslcd # 启动 nslcd 服务。

我们这⾥测试以下 NSS 的配置是否可⽤
getent passwd User1
User1:*:1001:513:System User:/var/smb/User1:/bin/bash
如上可见,我们配置的 NSS 和 OPENldap 服务已经⽣效了,下⾯我们再来继续配置samba,使其可⽤。

samba 权限配置
如果看的⽐较仔细的⼈,就会发现我将⽤户的home ⽬录位置存放在了/var/smb位置,主要是为了不与系统中的⽤户搞混。

并且这样可以通过SELinux来隔离samba 禁⽌访问/home路径下的资源,详细请看下⾯操作。

# 上⾯通过 smbldap-useradd 命令,已经创建了⽤户的home ⽬录,
# 下⾯可以直接进⾏SELinux 的相关配置了。

semanage fcontext -a -t samba_share_t '/var/smb(/.*)?' # 修改/var/smb 路径的默认type,这⾥我⽤ samba 共享使⽤的type,SELinux 默认允许访问这个type类型
# 如果要使samba 可以访问 /home 则应当开启 samba_enable_home_dirs 这个 bool 值。

# 但是我这⾥因为使⽤的是 samba_share_t 这个 type 类型,所以⽆需开启任何 bool 值,这样就能使samba只能访问到 /var/smb 和 samba 其他所需⽂件。

restorecon -R /var/smb/ # 然后我们在重置 /var/smb ⽬录下的SELinux type 类型即可。

Copy
# 这⾥我们就能进⾏samba的测试了
smbclient -L //127.0.0.1/ -U User1
这⾥我们也就可看到了,User1 ⽤户已经可以登⼊并查询到共享⽬录了。

那么我们这⾥直接登⼊进去,上传⼀些⽂件做⼀些测试:
OK,那么这样⼀个samba 的⽂件共享就完成了。

总结
以上所述是⼩编给⼤家介绍的详解samba + OPENldap 搭建⽂件共享服务器问题,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!。

相关文档
最新文档