基于SAMBA4的域控制器安装设置

版权声明: https://blog.csdn.net/laotou1963/article/details/80829454

基于SAMBA4的域控制器安装设置

在企业网络中采用域控制器,能给网络安全带来很大的方便,但采用商业域控软件的成本给中小微企业带来较大的压力,特别是小微和初创公司。商业软件往往集成了很多功能,而大多数功能对中小微企业来说并不是不可缺少的;同时因集成太多的功能,也给域控服务器的运维提出了更高的要求。

这里介绍使用SAMBA4的域控制器的安装和设置,这个系统具备下列特性:
1、提供LDAPS授权服务
2、提供资源共享和授权管理
3、支持使用GPO对域内电脑进行配置和软件安装
4、系统安装在SoftRAID上,具备高可靠低维护特性。


系统安装配置

1. 操作系统安装
我们采用了Ubuntu 18.04 LTS 服务器版
建议硬件配置:
CPU:Xeon/i3/i5
RAM:4GB (最小2GB)
硬盘:32GB SSD x3
(注:下面的安装配置演示在虚拟机上完成)

按正常方式安装Ubuntu,一直到硬盘配置,转为手动配置。
这里写图片描述
选【Manual】,然后按【回车】。
这里写图片描述
在三个盘上各自建立分区给为建立SoftRAID做准备。
这里写图片描述
选择【Configure Software RAID】,按提示建立一个有2个活动盘,一个备份盘的RAID1磁盘阵列。
这里写图片描述
RAID1阵列已建好,下面给阵列配置文件系统。一般情况下,我们会遵循KISS原则,将安装和设置做的尽可能简单,我们这里采用了最简单、最“愚蠢”的配置。
这里写图片描述
配置完成后的情况:
这里写图片描述
后面就是正常的自动安装,一直到安装结束。
注意:Linux的mdadm服务在构建磁盘阵列时,是不会动MBR的内容的!在系统安装时,安装程序会将GRUB安装到二个活动盘上,但不会安装在备份盘上。现在让我i们验证一下。

dd if=/dev/sda bs=512 count=1 | xxd | grep -i grub

这里写图片描述
在/dev/sdb上也有一样的结果,在MBR区内能见到GRUB。而/dev/sdc(备份盘)在MBR区内就没有GRUB。
这里写图片描述
我们需要在/dev/sdc上安装

grub-install /dev/sdc

再检查,我们就会在MBR区内发现GRUB了。
这里写图片描述
切记:更换安装启动系统的RAID阵列在更换新的磁盘后,必须手工安装GRUB,否则系统有可能因没有GRUB而不能启动。

2. SAMBA4安装和配置

apt install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind

这里写图片描述
在安装中,需要回答一些问题,注意大小写,我们选用的AD域名为LSWIN.LAN。
这里写图片描述
这里写图片描述
这里写图片描述
安装完成,下面是配置SAMBA4为PDC。

3. SAMBA4配置为PDC
在开始配置前,先停用和禁用一些安装时自动启动的服务和删除产生的smb.conf配置文件

    systemctl stop samba-ad-dc smbd nmbd winbind
    systemctl disable samba-ad-dc smbd nmbd winbind
    mv /etc/samba/smb.conf /etc/samba/smb.conf.initial

配置Samba为Domain Controller:
AD域的域名为LSWIN.LAN,DNS转发服务器的地址为192.168.220.1

    samba-tool domain provision --use-rfc2307 --interactive

这里写图片描述
用SAMBA4初始化成DC时产生的Kerberos配置文件替换现有的Kerberos配置文件

    mv /etc/krb5.conf /etc/krb5.conf.initial
    ln -s /var/lib/samba/private/krb5.conf /etc/

重新启动/启用SAMBA4为DC的服务。

    systemctl start samba-ad-dc
    systemctl enable samba-ad-dc

如遇到Failed to start samba-ad-dc.service: Unit samba-ad-dc.service is masked.问题,先执行:

    systemctl unmask samba-ad-dc

SAMBA4作为DC已经配置完成,我们可以用下列命令检查一下配置是否成功:

    samba-tool domain level show

配置成功的话,我们可以见到:
这里写图片描述

4. 其他配置
在ubuntu下,/etc/resolv.conf在每次启动时都会重新生成,我们使用rc.local将该文件覆盖成我们需要的内容。

    vi /etc/rc.local    

将下列内容加入:

    #!/bin/sh
    /bin/echo "nameserver 192.168.220.251" > /etc/resolv.conf
    /bin/echo "nameserver 192.168.220.1" >> /etc/resolv.conf
    /bin/echo "search lswin.lan" >> /etc/resolv.conf

192.168.220.251是DC的IP地址,192.168.220.1是主DNS服务器。

更改/etc/rc.local属性为可执行

    chmod +x /etc/rc.local

停用systemd-resolved服务

    systemctl disable systemd-resolved

修改/etc/hosts文件,删除所有pdc有关的内容,增加下列行:

    192.168.220.251 pdc

重启系统,然后测试DC。

5. 系统测试

  • DNS测试:

    ping -c3 pdc.lswin.lan
    ping -c3 lswin.lan
    ping -c3 pdc
    

    这里写图片描述

  • DC内容检查:

    host -t A lswin.lan
    host -t A pdc.lswin.lan
    host -t SRV _kerberos._udp.lswin.lan
    host -t SRV _ldap._tcp.lswin.lan
    

这里写图片描述

注意:@LSWIN.LAN必须大写,和最初设置AD域名完全一致,分大小写。
这里写图片描述

在测试中,如你看到能看到类似的内容,说明DC已经安装成功了,可以投入使用了。


应用配置

1. 本地(pdc)登陆授权

为了方便管理,我们同样采用AD DC做Ubuntu系统登陆验证,利用winbind接口,完成Ubuntu本地登陆的身份验证。

  • 首先我们需要修改samba的配置文件:

    vi /etc/smb.conf
    

在smb.conf的【global】中添加以下内容:

    # Samba Local Authentication Using Active Directory Accounts
    winbind enum users = yes
    winbind enum groups = yes
    template shell = /bin/bash
    winbind offline logon = false
    winbind use default domain = true
    winbind nss info = rfc2370

完成修改后,用testparm做语法检查。语法没错的话,重启systemctl restart samba-ad-dc

  • 更新PAM授权

重启服务后,还需更新PAM的授权pam-auth-update,当用户登陆时,如没有该用户的home目录,自动创建。
这里写图片描述
注意选择【create home directory on login】

  • 修改 /etc/nsswitch.conf 文件,当查询用户和用户组时,AD的用户和组可以同时出现。

    vi /etc/nsswitch.conf
    

    在【passwd:】和【group:】选项中,添加winbind,让winbind作为获取用户和用户组的手段之一。

  • 修改 /etc/pam.d/common-password,让用户可以在Linux端修改口令。

    vi /etc/common-password
    

注意修改行:

#password [success=1 default=ignore] pam_winbind.so use_authtok try_first_pass
#Removing use_authtok for AD DC
password  [success=1 default=ignore] pam_winbind.so try_first_pass

去掉了use_authtok

现在我们可以用genent passwdgetent group看看AD的用户和用户组是否出现。
这里写图片描述
AD的用户和用户组已经出现了。

我们可以登陆AD用户看看,其他的设置是否工作。administrator是AD的内置管理员。

    su administrator

这里写图片描述

现在我们可以用AD给登陆Ubuntu系统做授权了。

2. Ubuntu工作站使用WinBind做用户授权

  • 配置DNS:
    修改/新建/etc/rc.local
#!/bin/sh
/bin/echo "nameserver 192.168.220.251" > /etc/resolv.conf
/bin/echo "nameserver 192.168.220.1" >> /etc/resolv.conf
/bin/echo "search lswin.lan" >> /etc/resolv.conf

192.168.220.251是DC的IP地址,192.168.220.1是主DNS服务器IP地址。

  • 安装软件:
apt install winbind libpam-winbind libnss-winbind samba krb5-config

这里写图片描述
在安装中,需要回答一些问题,注意大小写,AD域名为LSWIN.LAN。
这里写图片描述
这里写图片描述
这里写图片描述
安装完成。

如在安装中没有出现kerberos设置界面,或没有全出现,在安装完成后,执行

dpkg-reconfigure krb5-config

重新配置krb5.

  • 配置:

停用smbd和nmbd:

systemctl stop smbd
systemctl disable smbd
systemctl stop nmbd
systemctl disable nmbd

我们不需要samba服务,只需要samba的工具和库,所以停用samba服务。

配置WinBind:
使用pam-auth-update,设置新用户登陆时,自动创建home目录。
这里写图片描述
注意选择【create home directory on login】

修改/etc/samba/smb.conf文件,将下列内容加入(已有的则修改):

   workgroup = LSWIN
   password server = lswin.lan
   realm = LSWIN.LAN
   security = ads
   idmap config * : range = 16777216-33554431
   template homedir = /home/%U
   template shell = /bin/bash
   winbind use default domain = true
   winbind offline logon = false

修改/etc/nsswitch.conf文件:

passwd:         compat winbind systemd
group:          compat winbind systemd
shadow:         compat winbind
gshadow:        files

修改/etc/pam.d/common-password文件:

#password       [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        [success=1 default=ignore]      pam_winbind.so try_first_pass

注意:去掉了use_authtok ,这样当AD用户在Ubuntu下修改口令就能反应在AD DC中了。

将Ubuntu工作站加入AD:

net ads join -U Administrator

Ubuntu工作站使用AD DC做身份验证的配置工作全部完成。重启后,AD用户就能登陆Ubuntu工作站。

3. SAMBA资源共享配置
在这我们将介绍如何在服务器端自动为AD用户设置共享存储配额和权限控制。
这里将用到下列工具:journald quotas、文件系统ACL和命令行管理工具quota, quotatool。jounald quotas和文件系统已被置入Ubuntu内核,所以我们只需要安装qoutatool和quota。

apt install quotatool quota

实例中,我们对/storage(/dev/sdd1)做管理,在挂载/dev/sdb1时需要额外的选项。

UUID=a1150076-993a-4e75-956a-7d21f537b06c /storage ext4 noatime,nodiratime,user_xattr,acl,usrjquota=aquota.user,jqfmt=vfsv0 1       2

user_xattr因用于AD域用户,所以我们需要启动额外的用户属性。
acl告知系统对该文件系统启用权限控制
srjquota=aquota.user,jqfmt=vfsv0告知系统在该文件系统上启用单个用户的Journald配额管理。

用下列命令 在/storage下产生新的用户配额文件aquota.user。 这个文件用于保存用户配额、属性等配置,同时也用于追踪用户的存储使用情况。

quotacheck -cum /storage

quota系统设置已经完成,在重启系统前,在/storage上启用quota和启用quota服务。

quotaon /storage
systemctl enable quota

可以用repquota -a查看使用情况。

root@lsdc1:/storage/LSWIN# repquota -a
*** Report for user quotas on device /dev/sdd1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    7592       0       0              7     0     0       
LSWIN\administrator --      24       0       0              3     0     0       
LSWIN\superuser --       8  102400  204800              1     0     0       
LSWIN\s.bush --   30544  102400  204800              2     0     0       
LSWIN\john --   21540  102400  204800              3     0     0       
LSWIN\joe.murphy --   21532  102400  204800              2     0     0       
#3000000  --    7576       0       0              2     0     0       
#3000041  --       4       0       0              1     0     0       

在实际使用中,我们使用cron定时任务,主动检查AD DC,如发现新建用户,将自动为新用户在共享目录下建立目录、设定配额和操作权限。下面是该任务的bash脚本文件。

#!/bin/bash

# setup domain user's home directory ACL
# Usage: set-homedir-acl $1 $2
#        $1 is the parent directory of user home directory
#        $2 is user name
#        for example
#        $1 is "/Storage/LSWIN", $2 is "joe.kerry"
#        User joe.kerry's home directory will be "/Storage/LSWIN/joe.kerry"
#
function set-homedir-acl() {
    curACL=`/usr/bin/getfacl -p $1"/"$2`
    owner=`echo $curACL | sed 's/.*owner: \(.*\) #.*/\1/'`
    while read line
    do
        attr=${line//OWNER_ID/$owner}
        `/usr/bin/setfacl -m $attr $1"/"$2`
# this is the default ACLs for domain user home directory
    done <<EOF
user::rwx
group::---
group:users:---
group:OWNER_ID:rwx
mask::rwx
other::---
default:user::rwx
default:user:OWNER_ID:---
default:group::---
default:group:users:---
default:group:OWNER_ID:rwx
default:mask::rwx
default:other::---
EOF
}

# setup user's quotas on specified file system
# Usage: set-user-quota $1 $2
#        $1 is the user name
#        $2 is the soft limit
#        $3 is the hard limit
#
function set-user-quotas() {
    cmd="/usr/sbin/quotatool -u $1 -b -q $2 -l $3 /storage"
    eval "$cmd"
}


USERS=$(/usr/bin/samba-tool user list)
# 100M bytes is the soft limit
SOFTLIM=100Mb
# 202M bytes is the hard limit
HARDLIM=200Mb

# Ignore those NOUSERS
NOUSERS="Administrator Guest krbtgt"
IFS=' ' read -r -a nouser <<< $NOUSERS

IFS=' ' read -r -a array <<< $USERS

userList=()

for element in ${array[@]}
do
    rc=false
    if [[ "$element" =~ ^_  ]]; then
        continue
    fi
    for ele in ${nouser[@]}
    do
        if [[ "$element" == "$ele" ]]; then
            rc=true
            continue
        fi
    done
    if [[ "$rc" == "true" ]]; then
        continue
    fi
    userList+=($element)
done

# Create home folder for all regular users
HOMEDIR=/storage/LSWIN
for user in ${userList[@]}
do
    userdir=$HOMEDIR"/"$user
    ownership=$user":\"Domain Users\""
    cmd="chown -R "$ownership" "$userdir
    if [ ! -d $userdir ]; then
        mkdir -p $userdir
        eval "$cmd"
        set-homedir-acl $HOMEDIR $user
        set-user-quotas $user $SOFTLIM $HARDLIM
    fi
done

4. SAMBA用户组资源共享配置
首先我们需要的AD上建立以用户组,如engineering,再将用户加入此用户组。
在SAMBA上配置该用户组的共享目录。

[Engineering]
        comment = For Engineering Group
        path=/storage/LSWIN/engineering

        read only = No
        browseable = No
        locking = no
        guest ok = no

        valid users = @"LSWIN\engineering"

任何属于engineering组的用户就可以用\\lsdc1\Engineering来使用该共享文件夹了。

说明:这里用户组的共享文件夹和用户文件夹都在/storage下,用户的quota会合并计算,如用户在其文件夹下放了30M的文件,在用户组目录下放了20M文件,那么已使用的配额就会是50M。

5. 其他说明
管理SAMBA域控制器,可以使用二种方式,一种是完全使用命令行工具samba-tool在Ubuntu服务器端完成。另一种方式是使用samba-tool在服务器端完成基本配置,后期的用户、用户组、GPO等等管理通过微软的RSAT完成。我们建议采用第二种方式,RSAT的GUI会给DC的使用带来很多方便。

6. 使用GPO对域内电脑进行配置和软件安装
- 驱动器映射
驱动器映射的配置非常直接,步序如下:
打开 “组策略管理”,右击【林:lswin.lan】->【域】->【lswin.lan】->【Default Domain Policy】
这里写图片描述
在下拉菜单中,选择【编辑(E)…】,跳出【组策略管理编辑器】。
在【组策略管理编辑器】中,选择【用户配置】->【首选项】->【Windows设置】->【驱动器映射】。
这里写图片描述
在【驱动器映射】中点击鼠标右键,选择【新建(N)】->【映射驱动器】。
这里写图片描述
按情况填写内容:
这里写图片描述
完成后点击【确定】即可。
用户登陆后,就能见到映射盘了。
这里写图片描述

  • 安装软件
    从域控制器安装软件,可以给网络管理带来很大的便利,在此介绍一下如何从域控安装软件。
    首先配置【用户账户控制】
    这里写图片描述
    在【计算机配置】->【策略】->【Windows设置】->【安全设置】->【本地策略】->【安全选项】下,配置下列几项内容:
    【用户帐户控制: 在管理审批模式下管理员的提升提示行为】:选择【不提示,直接提升】
    【用户帐户控制: 检测应用程序安装和提示提升】:选择【禁止】
    【用户帐户控制: 仅提升安装在安全位置的 UIAccess 应用程序】:选择【禁止】
    【用户帐户控制: 启用管理审批模式】:选择【禁止】

然后在【计算机配置】->【策略】->【软件安装】下,配置需要安装的软件。
这里写图片描述
这里的 “数据包” 指的是安装程序。注意:安装程序必须是msi格式。
这里写图片描述
我们将安装7-zip,所以选择7z1805-x64.msi文件。
这里写图片描述
选择【已分配】即可。
这里写图片描述
注意:安装文件必须在所有AD中电脑都可以读取的文件夹下,安装文件本身也是所有用户都可读取。
AD域中的电脑在下次重启后,7-zip就会自动安装在电脑上。

  • 安装证书
    在该系统中,我们对HTTPS也使用了Web代理,所以我们必须将内部根证书颁发机构证书安装到域内每一台电脑上,否则会因为 “不可信任证书”的原因,给用户带来很多麻烦。从域控制器安装该证书的步骤如下:
    打开 “组策略管理”,右击【林:lswin.lan】->【域】->【lswin.lan】->【Default Domain Policy】
    这里写图片描述
    在下拉菜单中,选择【编辑(E)…】,跳出【组策略管理编辑器】。
    这里写图片描述
    在组策略管理编辑器】中,选择【计算机配置】->【策略】->【Windows设置】->【安全设置】->【公钥策略】->【受信任的根证书颁发机构】,然后右击右面的空白处,在出现的下拉菜单中,再选择【导入(I)…】,跳出【证书导入向导】,按向导的提示,导入内部根证书颁发机构证书。
    这里写图片描述
    最后点击【Finish】完成内部根证书颁发机构证书安装GPO设置。

  • 配置火狐浏览器
    火狐浏览器默认状态是不使用储存在本地的受信任证书颁发机构证书,我们必须修改火狐的配置,才能让火狐使用本地受信任证书颁发机构证书。在此我们介绍如何从有控制器修改火狐的配置。
    首先我们生成一个启用本地受信任证书颁发机构证书的火狐配置文件enableFirefoxRootStore.js,内容为:

    /* Allows Firefox reading Windows certificates */ 
    pref("security.enterprise_roots.enabled", true);

    将其放到一个所有电脑和用户都能读取的地方,在此放在\lsdc1\sysvol\GPO下。

    打开 “组策略管理”,右击【林:lswin.lan】->【域】->【lswin.lan】->【Default Domain Policy】
    这里写图片描述
    在下拉菜单中,选择【编辑(E)…】,跳出【组策略管理编辑器】。
    这里写图片描述
    在组策略管理编辑器】中,选择【计算机配置】->【首选项】->【Windows设置】->【文件】,然后右击右面的空白处,在出现的下拉菜单中,再选择【新建(N)】->【文件】,按向导的提示,建立GPO。
    这里写图片描述
    这源文件是\\lsdc1\sysvol\GPO\enableFirefoxRootStore.js
    目标文件是C:\Program Files\Mozilla Firefox\defaults\pref\enableFirefoxRootStore.js。这是全局配置,所以该配置文件被放在C:\Program Files\Mozilla Firefox\defaults\pref下。

这里写图片描述

这里设置GPO是全局GPO。这几种设置方式,基本可满足一般企业的网络管理需求。

LDAP协议采用的是明文通讯。为安全起见SAMBA默认采用了LDAPS,端口为标准的636。使用LDAPS服务的相关事项,在此不做介绍,后期结合 “项目和版本管理设置” 和 “CRM系统设置” 中再做详解。

猜你喜欢

转载自blog.csdn.net/laotou1963/article/details/80829454