在企业网络中采用域控制器,能给网络安全带来很大的方便,但采用商业域控软件的成本给中小微企业带来较大的压力,特别是小微和初创公司。商业软件往往集成了很多功能,而大多数功能对中小微企业来说并不是不可缺少的;同时因集成太多的功能,也给域控服务器的运维提出了更高的要求。
这里介绍使用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
Kerberos检查:
kinit [email protected]
klist
注意:@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-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 passwd
或getent group
看看AD的用户和用户组是否出现。
AD的用户和用户组已经出现了。
我们可以登陆AD用户看看,其他的设置是否工作。administrator是AD的内置管理员。
su administrator
现在我们可以用AD给登陆Ubuntu系统做授权了。
2. Ubuntu工作站使用WinBind做用户授权
/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 <# 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)】->【映射驱动器】。
按情况填写内容:
完成后点击【确定】即可。
用户登陆后,就能见到映射盘了。
然后在【计算机配置】->【策略】->【软件安装】下,配置需要安装的软件。
这里的 “数据包” 指的是安装程序。注意:安装程序必须是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系统设置” 中再做详解。