zoukankan      html  css  js  c++  java
  • samba + OPENldap 搭建文件共享服务器

    本文首发:https://www.somata.net/2019/samba_openldap_build_nfs.html
    这里我使用的是 samba(文件共享服务) v4.9.1 + OPENldap(后端数据库软件) v2.4.44 + smbldap-tools(后端数据库管理软件) v0.9.11 + CentOS7。 如果有不同,可能会有部分问题。

    注:

    1. samba 的功能不只有文件共享,还可以作为一台Windows域成员,甚至Windows域控制器。千万不要认为samba只是一个文件共享服务。
    2. 由于我们使用了samba的文件共享功能,与文件权限有直接的联系,所以samba中的使用的用户必须是Linux中能查询到。因为使用了 OPENldap 作为samba 的后端数据库,所以我们这里还需要配置Linux能查询到 OPENldap 中的用户信息,也就是需要配置 NSS。关于NSS部分的配置需要在smbldap-tools 初始化ldap数据库后完成NSS部分的配置,需要注意!!!
    3. samba 有使用PAM作为认证模块,和使用其自带的认证程序,在CentOS中编译时配置的是使用其自带的认证程序,所以PAM的配置可以省略。
    4. 如果想要配置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
    
    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 类型即可。
    
    # 这里我们就能进行samba的测试了
    smbclient -L //127.0.0.1/ -U User1
    

    这里我们也就可看到了,User1 用户已经可以登入并查询到共享目录了。

    那么我们这里直接登入进去,上传一些文件做一些测试:


    OK,那么这样一个samba 的文件共享就完成了。


    本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【2H0DBHHY】获取授权信息。

  • 相关阅读:
    css dropdown menu
    Understanding Delegated JavaScript Events
    AngularJS-Learning ui-router angular-transitions
    javascript sorting/ v8 sorting
    Sublime Text 3 新手上路:必要的安裝、設定與基本使用教學
    express with bower in websotrm
    angularjs transitions
    create a nodejs npm package
    nodejs module/require
    stylus , another css processor
  • 原文地址:https://www.cnblogs.com/somata/p/sambaAndOPENldapBuildFileShareServer.html
Copyright © 2011-2022 走看看