这是因为Windows 10 连接IKEv2后,默认启用了 splittunneling 选项。我们只要把 splittunneling 关闭即可。
操作如下:

1、使用管理员身份运行PowerShell;

2、输入命令:

get-vpnconnection

Name                  : test_IKEv2
ServerAddress         : vpn.xxx.net
AllUserConnection     : False
Guid                  : {A0E89525-9E64-43DE-8ECC-5E2DFC067C0D}
TunnelType            : Ikev2
AuthenticationMethod  : {MachineCertificate}
EncryptionLevel       : Required
L2tpIPsecAuth         :
UseWinlogonCredential : False
EapConfigXmlStream    :
ConnectionStatus      : Connected
RememberCredential    : True
SplitTunneling        : True
DnsSuffix             :
IdleDisconnectSeconds : 0

然后找到对应那个vpn连接名,比如我这里是"test_IKEv2";

3、然后输入命令:

set-vpnconnection "test_IKEv2" -splittunneling $false

记得把双引号里面的内容自行替换掉,不要照抄。

4、最后再输入:

get-vpnconnection

Name                  : test_IKEv2
ServerAddress         : vpn.xxx.net
AllUserConnection     : False
Guid                  : {A0E89525-9E64-43DE-8ECC-5E2DFC067C0D}
TunnelType            : Ikev2
AuthenticationMethod  : {MachineCertificate}
EncryptionLevel       : Required
L2tpIPsecAuth         :
UseWinlogonCredential : False
EapConfigXmlStream    :
ConnectionStatus      : Connected
RememberCredential    : True
SplitTunneling        : False
DnsSuffix             :
IdleDisconnectSeconds : 0

检查看split tunneling那一项是不是False,不是的话再试一次。像这样就成功了。

上一文讲到 IKEv2的配置,当时使用的是Windows 7作为客户端。然而使用Windows 10作客户端时,拨号时会产生“策略匹配错误”,在事件管理器里面查询,会得到一个13868的错误号。

这是因为Windows客户端提出了一个弱Diffie-Hellman(DH)组(1024位MODP)。除非用户明确配置,否则strongSwan不再使用该组。

解决方法:

在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters 底下新增:

名称:"NegotiateDH2048_AES256"
类型:"REG_DWORD"
值:"1"

保存退出即可。

一、软件安装

ipsec 与 l2tp,一般常见的操作系统都直接支持,不需要额外安装软件。所以在选择上优先考虑。

在Debian 10下面安装非常容易,执行以下命令:

apt-get install strongswan xl2tpd strongswan-pki

二、软件配置

StrongSwan 的配置主要为 ipsec.conf、strongswan.conf;
xl2tpd 的配置主要为 xl2tpd.conf、options.xl2tpd;

以下为四个配置文件样例:

1、ipsec.conf

config setup
    uniqueids=no
    charondebug="cfg 2, dmn 2, ike 2, net 0"

conn %default
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%defaultroute
    leftfirewall=yes
    right=%any
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    auto=add

#######################################
# L2TP Connections
#######################################

conn L2TP-IKEv1-PSK
    type=transport
    keyexchange=ikev1
    authby=secret
    leftprotoport=udp/l2tp
    left=%any
    right=%any
    rekey=no
    forceencaps=yes

#######################################
# PSK Connections
#######################################

# Cisco IPSec
conn IKEv1-PSK-XAuth
    keyexchange=ikev1
    leftid=@lostend.com
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    leftsubnet=0.0.0.0/0
    rightsubnet=10.0.0.0/24
    rightsourceip=10.0.0.0/24

#######################################
# Certificate Connections
#######################################

conn windows7
    keyexchange=ikev2
    rekey=no
    leftauth=pubkey
    leftid=@lostend.com
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=rsa
    rightsourceip=10.0.0.0/24
    rightsendcert=never
    eap_identity=%any

include /var/lib/strongswan/ipsec.conf.inc

2、strongswan.conf

charon {
    load_modular = yes
    send_vendor_id = yes
    plugins {
        include strongswan.d/charon/*.conf
        attr {
            dns = 1.2.4.8, 119.29.29.29
        }
    }
}

include strongswan.d/*.conf

3、xl2tpd.conf

[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets
debug avp = yes
debug network = yes
debug state = yes
debug tunnel = yes
[lns default]
ip range = 10.1.0.2-10.1.0.254
local ip = 10.1.0.1
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
;ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

如上配置中,因为开启了chap的验证,拒绝了pap验证。所以验证文件是 /etc/ppp/chap-secrets ,在使用l2tp连接时,需要用到这个文件进行用户校验。上面的 /etc/xl2tpd/l2tp-secrets 文件是没什么用的。

以下是 /etc/ppp/chap-secrets 用户验证文件的示例:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

"test" "*" "testpassword" "*"

"test"是用户名,"testpassword"是密码。多个的话,每个一行分开填写。

4、options.xl2tpd

ipcp-accept-local
ipcp-accept-remote
ms-dns 1.2.4.8
ms-dns 119.29.29.29
noccp
auth
idle 1800
mtu 1460
mru 1460
lcp-echo-failure 10
lcp-echo-interval 60
connect-delay 5000

其中mtu,mru 需要根据实际情况填写,不确定的话,填写1280是比较保险的值。

创建好四个配置文件后将其复制到指定位置即可:

# Strongswan Configuration
sudo cp ipsec.conf /etc/ipsec.conf
sudo cp strongswan.conf /etc/strongswan.conf

# XL2TPD Configuration
sudo cp xl2tpd.conf /etc/xl2tpd/xl2tpd.conf
sudo cp options.xl2tpd /etc/ppp/options.xl2tpd

三、证书创建

对于 Windows、Android 等设备可能不支持某些登录方式,比如 IKEv2 PSK,这时需要创建证书,以支持使用 IKEv2 证书登录:

1、生成一个私钥,并基于这个私钥自己签一个 CA 证书:

# create CA certificate
ipsec pki --gen --outform pem > ca.key.pem
ipsec pki --self --in ca.key.pem --dn "C=CN, O=StrongSwan, CN=StrongSwan CA" --ca --outform pem > ca.cert.pem

2、创建服务器证书,并用我们刚才自签的 CA 证书给自己发一个服务器证书:

# create server certificate
ipsec pki --gen --outform pem > server.key.pem 
ipsec pki --pub --in server.key.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=StrongSwan, CN=lostend.com" --san="lostend.com" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem 

其中 --san 可以指定多个,但一般一个是域名,一个是外网 IP,如果经过了路由,那么只需要写本机的对外暴露网卡的 IP 即可。

--dn, --san,--flag 是一些客户端方面的特殊要求:

iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),--flag serverAuth;
非 iOS 的 Mac OS X 要求了「IP 安全网络密钥互换居间(IP Security IKE Intermediate)」这种增强型密钥用法(EKU),--flag ikdeIntermediate;
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。

3、创建客户端证书,然后用刚才自签的 CA 证书来签客户端证书:

ipsec pki --gen --outform pem > client.key.pem 
ipsec pki --pub --in client.key.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=StrongSwan, CN=Test" --outform pem > test.cert.pem 

看懂了服务器的,客户端的也就不难理解了。除了没有那一堆特殊要求别的都一样。

客户端证书可以每个客户端签一个,也可以让它们共用一个。是否多签看用途,一般用于区分设备。

4、生成 pkcs12 证书(可选)

安卓等设备是不支持直接导入客户端证书的,需要转换成 p12 格式,转换过程中需要输入两次密码,该密码为证书使用密码,导入时需要输入:

openssl pkcs12 -export -inkey client.key.pem -in test.cert.pem -name "Test" -certfile ca.cert.pem -caname "StrongSwan CA" -out test.cert.p12 

5、安装证书

创建完成后将证书复制到指定目录即可

sudo cp -r ca.cert.pem /etc/ipsec.d/cacerts/
sudo cp -r server.cert.pem /etc/ipsec.d/certs/
sudo cp -r server.key.pem /etc/ipsec.d/private/
sudo cp -r test.cert.pem /etc/ipsec.d/certs/
sudo cp -r client.key.pem /etc/ipsec.d/private/

CA 证书、客户端证书和 .p12 证书复制出来给客户端用。有几种 Android 配置还需要服务器证书(server.cert.pem)。

四、用户验证文件

ipsec.secrets 文件示例:

ipsec.secrets文件是需要复制到/etc/ipsec.secrets 位置的,很多网上的教程都是错的。这点需要划重点注意。

: PSK "testpassword"                                                                                                                                                                                                  
: RSA server.key.pem                                                                                                                                                                                              
test : EAP "testpassword"                                                                                                                                                                                            
test : XAUTH "testpassword"

在上面的例子中,创建了认证用户test和test的密码。在添加用户的时候,请注意在冒号(:)左右两边都需要一个空格。
上面定义的是四种认证方法。它们之间是遵循「各找各妈」的原则的,可以任意混搭。
每种认证方式找各自的认证内容,具体可以参考官方说明:

https://wiki.strongswan.org/projects/strongswan/wiki/Ipsecsecrets

五、linux转发配置

使用iptables 来进行转发:

sudo iptables -A INPUT -p udp --dport 1701 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -m policy --dir out --pol none -j MASQUERADE
sudo iptables -A FORWARD -s 10.1.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT

sudo vi /etc/sysctl.conf 
net.ipv4.ip_forward=1 
sudo sysctl -p

其中 10.1.0.0/24 和 10.0.0.0/24 就是ipsec.conf 和xl2tpd.conf 里面配置的子网网段。自己根据情况进行修改。
eth0 的网卡名也要根据自己的机器情况作修改。

至此,所以配置就完成了。重启ipsec和xl2tpd 生效

sudo /etc/init.d/ipsec restart
sudo /etc/init.d/xl2tpd restart

六、Windows 7 ikev2 认证配置

使用自带客户端(Agile):

导入证书:

  1. 开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
  2. 「文件」-「添加/删除管理单元」,添加「证书」单元
  3. 证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
  4. 在左边的「控制台根节点」下选择「证书」-「个人」,然后选右边的「更多操作」-「所有任务」-「导入」打开证书导入窗口。
  5. 选择刚才生成的 test.cert.p12 文件。下一步输入私钥密码。下一步「证书存储」选「个人」。
  6. 导入成功后,把导入的 CA 证书剪切到「受信任的根证书颁发机构」的证书文件夹里面。
  7. 打开剩下的那个私人证书,看一下有没有显示「您有一个与该证书对应的私钥」,以及「证书路径」下面是不是显示「该证书没有问题」。
  8. 然后关闭 mmc,提示「将控制台设置存入控制台1吗」,选「否」即可。

至此,证书导入完成。

注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。

建立连接:

  1. 「控制面板」-「网络和共享中心」-「设置新的连接或网络」-「连接到工作区」-「使用我的 Internet 连接」
  2. Internet 地址写服务器地址,使用 IP 或都是 URL。
  3. 描述随便写。
  4. 点击右下角网络图标,在新建的 VPN 连接上右键属性然后切换到「安全」选项卡。
  5. VPN 类型选 IKEv2
  6. 数据加密是「需要加密」
  7. 身份认证这里使用私人证书认证的话就选择「使用计算机证书」。

配置完成。

一、ftp 服务器的选择

上文我们配置好了LDAP服务,既然配置了这个服务,想要用的自然是它的统一认证功能。那么,安装FTP服务器自然优先选择支持LDAP认证的软件了。

vsftpd 本身并不支持 LDAP 认证,而是通过 PAM 认证提供和 LDAP 的整合。PAM?如果搞砸了,Linux 登录都会出现困难。所以首先将 vsftpd 排除。

Pure-FTPd 本身支持 LDAP 认证,在 Debian 中,甚至有 pure-ftpd-ldap 包是专门支持 LDAP 认证的 Pure-FTPd 编译。PureFTPd 其现有的 LDAP 支持比较弱。

要求 LDAP 的用户帐号必须包含 posixAccount 作为 objectClass

也就是说必须在 LDAP 中指定用户的用户ID和组ID(数字形式)

必须在 LDAP 中设定用户主目录

为了安全计,往往需要将所有登录帐号映射为一个低权限的系统帐号。Pure-FTPd 的LDAP认证在以前的版本是不能实现的,但是在新版本中,pureftpd.schema里面的FTPuid and FTPgid 属性已经支持这个功能。
有了这个功能,那么对于我来说已经够用了。

ProFTPD 对 LDAP 的支持相当的完善,几乎堪称完美。但是自己对ProFTPD不太熟悉,而且ProFTPD相对来说漏洞较多发,所以弃用。

二、Pure-ftpd的安装配置

在Debian 中安装非常容易,执行以下命令安装。

apt-get install pure-ftpd-ldap

修改配置文件:

创建文件/etc/pure-ftpd/conf/ChrootEveryone ,其中只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

这将使PureFTPd在其主目录中的每个虚拟用户都chroot,因此他将无法浏览其主目录之外的目录和文件。

还要创建文件/etc/pure-ftpd/conf/CreateHomeDir ,它再次只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

这将使PureFTPd在用户登录并且主目录不存在时创建用户的主目录。

创建文件/etc/pure-ftpd/conf/DontResolve ,它再次只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/DontResolve

这将使PureFTPd不会查找可以显着加速连接并减少带宽使用的主机名。

修改文件/etc/pure-ftpd/conf/DontResolve ,它再次只包含字符串"HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3" :

echo "HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3" > /etc/pure-ftpd/conf/TLSCipherSuite

这将使PureFTPd可以兼容一些较老的客户端(在开启TLS加密的时候)

创建文件/etc/pure-ftpd/conf/TLS ,它再次只包含字符串2 :

echo "2" > /etc/pure-ftpd/conf/TLS

这将使PureFTPd强制启用TLS加密连接,这样密码就不会明文在网络上传输。

/etc/pure-ftpd/conf/PassivePortRange 可以修改Passive模式开的端口范围,可以根据需要修改。

然后,生成TLS加密连接需要的文件。

sudo openssl req -x509 -nodes -days 7200 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

接下来,我们配置pure-ftpd的ldap.conf文件:

/etc/pure-ftpd/db/ldap.conf

主要修改下面三项,修改成上文的配置:

LDAPBaseDN cn=People,dc=lostend,dc=com
LDAPBindDN cn=admin,dc=lostend,dc=com
LDAPBindPW admin'sPassword

其它选项可以看说明酌情修改。

修改完成以后重启 pure-ftpd

/etc/init.d/pure-ftpd-ldap restart

接下来,配置pureftpd.schema
首先拷贝/usr/share/doc/pure-ftpd-common/pureftpd.schema 文件至/etc/ldap/schema/pureftpd.schema
然后建立文件/etc/ldap/schema/pureftpd.ldif ,内容如下:

dn: cn=pureftpd,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: pureftpd
olcAttributeTypes: {0}( 1.3.6.1.4.1.6981.11.3.1 NAME 'FTPQuotaFiles' DESC 'Q
 uota (in number of files) for an FTP user' EQUALITY integerMatch SYNTAX 1.3
 .6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {1}( 1.3.6.1.4.1.6981.11.3.2 NAME 'FTPQuotaMBytes' DESC '
 Quota (in megabytes) for an FTP user' EQUALITY integerMatch SYNTAX 1.3.6.1.
 4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {2}( 1.3.6.1.4.1.6981.11.3.3 NAME 'FTPUploadRatio' DESC '
 Ratio (compared with FTPRatioDown) for uploaded files' EQUALITY integerMatc
 h SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {3}( 1.3.6.1.4.1.6981.11.3.4 NAME 'FTPDownloadRatio' DESC
  'Ratio (compared with FTPRatioUp) for downloaded files' EQUALITY integerMa
 tch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {4}( 1.3.6.1.4.1.6981.11.3.5 NAME 'FTPUploadBandwidth' DE
 SC 'Bandwidth (in KB/s) to limit upload speeds to' EQUALITY integerMatch SY
 NTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {5}( 1.3.6.1.4.1.6981.11.3.6 NAME 'FTPDownloadBandwidth'
 DESC 'Bandwidth (in KB/s) to limit download speeds to' EQUALITY integerMatc
 h SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {6}( 1.3.6.1.4.1.6981.11.3.7 NAME 'FTPStatus' DESC 'Accou
 nt status: enabled or disabled' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.
 4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {7}( 1.3.6.1.4.1.6981.11.3.8 NAME 'FTPuid' DESC 'System u
 id (overrides uidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4
 .1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {8}( 1.3.6.1.4.1.6981.11.3.9 NAME 'FTPgid' DESC 'System u
 id (overrides gidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4
 .1.1466.115.121.1.27 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' DESC 'Pur
 eFTPd user with optional quota, throttling and ratio' SUP top AUXILIARY MAY
  ( FTPStatus $ FTPQuotaFiles $ FTPQuotaMBytes $ FTPUploadRatio $ FTPDownloa
 dRatio $ FTPUploadBandwidth $ FTPDownloadBandwidth $ FTPuid $ FTPgid ) )

以上文件内容只是展示用。具体生成方法如下:

首先建立一个文件 pureftpd.txt :

include         /etc/ldap/schema/pureftpd.schema

现在我们将转换schema:

mkdir ldif
slaptest -f pureftpd.txt -F ldif

现在我们更改到包含转换模式的目录:

cd ldif/cn\=config/cn\=schema

该目录应包含以下文件:

cn={0}pureftpd.ldif

更改:

dn: cn={0}pureftpd
objectClass: olcSchemaConfig
cn: {0}pureftpd

至:

dn: cn=pureftpd,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: pureftpd

并删除:

structuralObjectClass: olcSchemaConfig
entryUUID: 18f5d9c2-5b7f-1039-91ac-0f367d4f1c38
creatorsName: cn=config
createTimestamp: 20190825122458Z
entryCSN: 20190825122458.522936Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20190825122458Z

现在我们将ldif文件复制到/etc/ldap/schema目录中(这是必要的,但是当需要ldif时,很方便找到)。

cp cn\=\{0\}pureftpd.ldif /etc/ldap/schema/pureftpd.ldif

现在我们将模式添加到OpenLDAP。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/pureftpd.ldif 

这样,我们就完成了pureftpd.schema 往LDAP里添加。

三、LAM 里面配置PureFTPdUser

在下图中,我们可以看到刚才添加的 PureFTPdUser objectClass。

20190825203315.png

然后,可以在用户信息那添加PureFTPdUser objectClass 和属性。

20190825203737.png

可以通过 FTPuid和FTPgid属性,将FTP账户登陆时映射成一个低权限的系统账号。一般会建立一个专属的 ftpuser和 ftpgroup,然后映射成对应的uid和gid。具体想映射成哪个,自己根据需要决定就可以了。

当然还有一些容量配额、上下载带宽配置的属性等。可根据需要开启。

具体可以参考官方文档:

https://download.pureftpd.org/pub/pure-ftpd/doc/README.LDAP

如果事先已经建立了比较多的账号,可能一个个的修改很累人,可以执行批量修改操作:

20190825204542.png

一、OpenLDAP安装

安装OpenLDAP如下:

apt-get update   
apt-get install slapd ldap-utils

安装过程中,会要求输入Administrator的密码,这个就是OpenLDAP的 admin 账号密码,记下备用,后面会用到。

二、配置OpenLDAP

这是最麻烦的部分,网上大部分教程都过时了。OpenLDAP在V2.4版本以后,默认已经不通过/etc/ldap/slapd.conf 文件来配置。/etc/ldap/slapd.d 是2.4.x版本新采用的配置文件目录,配置OpenLDAP最正确的姿势是通过ldapmodify命令执行一系列自己写好的ldif文件,而不要修改任何OpenLDAP装好的配置文件。

因为我们后面会使用LAM进行WEB管理,所以,在这时只要修改RootDN和Suffix就可以了。其它的配置交给后面的LAM就可以了。

要想修改RootDN,那么你就自己写这么一个ldif文件,假设给它起名叫RootDN.ldif,然后执行它就可以了:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=lostend,dc=com
-
replace: olcSuffix
olcSuffix: dc=lostend,dc=com

怎么执行呢?

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f RootDN.ldif

这么长的命令是什么意思?-Q表示安静执行,-Y和后面的EXTERNAL表示,好吧,我也不知道什么意思,总之需要这样配合,然后-H表示地址,-f表示文件名。几乎所有的ldapmodify命令都这么执行就好了。

再来讲解一下上面的ldif文件的内容。dn表示你要修改什么东西,在这里我们用的是{1}mdb,你的系统不一定是{1}mdb,不管是几,总之你去查一下目录里的内容就好了:

ls /etc/openldap/slapd.d/cn=config/

得到的结果大概如下,不一样也不要害怕:

'cn=module{0}.ldif'  'cn=schema'  'cn=schema.ldif'  'olcBackend={0}mdb.ldif'  'olcDatabase={0}config.ldif'  'olcDatabase={-1}frontend.ldif'  'olcDatabase={1}mdb.ldif'

这里面有一大堆奇奇怪怪的数字,不要担心,其中有一个带什么db.ldif的就是你最终需要修改的数据库文件,我这里是mdb.ldif,你的可能是bdb.ldif,还有人是hdb.ldif,不管什么db,总之你要改的是一个叫db的文件就对了,你可以cat打开看一看,但是不要用vi去修改它。

changetype就是modify,表示我们要修改这个文件。第3行是replace,表示我们要替换里面的某个值,你可以把这个操作理解为mysql数据库的update操作,如果你把第3行改成add,那就是mysql的insert操作了。不过这里我们操作的只是配置文件本身,还牵涉不到添加用户或者更改用户,如果你以为事情就这么简单,那就是你太天真了。

RootDN在这里就表示你整个OpenLDAP系统的管理员用户名是什么,不要奇怪,后面这一砣都是用户名cn=admin,dc=lostend,dc=com,总之cn就是那个用户名字,后面带dc的都是域名。

这里的域名dc=lostend,dc=com ,可以填成你自己的。但是要记住。我们在配置LAM的时候会用到。好了,这里OpenLDAP自己的配置算完成了。

三、安装LDAP Account Manager (LAM)

进入下面网址,下载对应的安装包。这里用的是Debian,下载Debian package。
https://www.ldap-account-manager.org/lamcms/releases

下载完成以后,安装:

sudo dpkg -i ldap-account-manager_6.x-x_all.deb

安装的时候,可能会提示缺少依赖,把相关依赖装上就好了。

四、配置LDAP Account Manager (LAM)

因为LAM是基于WEB管理的,所以配置一个http服务端,LAM提供了apache和nginx的配置。我这里使用的是nginx。
以下是nginx的相关配置。

server {
    listen 80;
    listen [::]:80;

    server_name lostend.com;
    root /opt/lostend.com;
    index index.html index.htm index.php;

    include /etc/ldap-account-manager/nginx.conf;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
}


/etc/ldap-account-manager/nginx.conf

这个文件是LAM提供的配置文件,在Debian 10里面,这个配置文件默认有所错误,需要打开此文件,把里面的

fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

改成

fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;

重启nginx后就可以生效了。

然后打开 http://lostend.com/lam/ 就可以进行配置了。

具体LAM配置可以参照 https://blog.csdn.net/qq_21383435/article/details/83506675
只需要注意使用 dc=lostend,dc=com 替换相应的内容就可以了。在设置管理员的时候,填写 cn=admin,dc=lostend,dc=com 。

LAM 使用建议

1,登陆以后,建议进入一下初始化操作:
点击右上角的”Tools”-“Profile editor”。选中”Users”右边的编辑图标,将”RDN identifier”修改为uid。因为Users通常以uid作为识别码,而Groups通常以cn作为识别码。在这里也可以修改默认的用户目录等参数。

2,添加用户时,由于使用了 Unix (posixAccount)的类型(objectClass),所以”Common name”也必须填写,否则会报错。”Common name”和”User name”一样即可;

3,为用户修改密码时,”Set password”的小窗口关掉以后,还需要点一下页面上的”Save”,密码才会生效。