5.4 常见问题

FAQ 目录:

  1. 怎样查看核心内嵌模块的调试日志?
  2. 怎样以命令行方式启动 Windows [发布|同步]服务器?怎样调试lua脚本?
  3. 怎样以命令行方式启动 Linux [发布|同步]服务器?怎样调试lua脚本?
  4. 在Web控制台的服务器->【Web模块】>【可用模块】里,没有找到适合我的类别?
  5. 可以自行指定发布(或同步)服务的日志路径吗?
  6. 可以自行指定核心内嵌模块的alert文件路径吗?
  7. 传输失败日志里,如果出现"14:115"错误代码,应该怎么处理?
  8. 怎样清理在发布服务器上的异常传输任务
  9. Linux iLocker做文件监控时,好像文件传输有遗漏问题
  10. 加载Linux核心内嵌防篡改模块后,文件不会自动恢复,或者只看到403出错页面
  11. Linux发布服务器怎么切换为 iLocker1做文件变化监控?
  12. Linux RHEL7 怎样在网络防火墙上开放特定端口?
  13. 加载Linux下的Apache模块报错
  14. 怎样限制连接同步端的客户端IP地址?
  15. 怎样限制连接发布端的客户端IP地址?
  16. 怎样指定特定用户运行发布/同步程序?
  17. 怎样让同步端不同目录的文件属性为不同的属主/组?
  18. 是否支持IPv6?
  19. 怎样删除非空目录?
  20. 同步时不执行删除动作?
  21. 怎样重置用户密码?
  22. 发布和同步服务器之间不用SSL加密通讯?
  23. 加密通道如何禁用某些不安全算法?
  24. 命令行查询/管理工具?
  25. 同步服务改为非ssl通讯

5.4.1 怎样查看核心内嵌模块的调试日志?

如果希望看到类似旧版本的核心内嵌初始化调试日志,可以编辑模块对应的 mod_iguard5.conf 配置文件,在其中加入第7-第10行的“log”:{...}, 段落。编辑JSON格式文件,千万不要忽略第5和第10行最后的","逗号

添加以上“log”:{...}, 段落后,还需要重启Web服务,就能在igdagent日志目录下,看到名为 webmod-yyyymmdd.log的调试日志。

注意:在定位和解决完问题后,请务必把"level":"debug", 这段去掉!或者改为 "level":"error",否则会导致大量的调试日志输出!改完后,需要重启相关的Web服务。

5.4.2 怎样以命令行方式启动 Windows [发布|同步]服务器?怎样调试lua脚本?

如果是发布服务器,首先到【管理工具】->【服务】里,停止【stagingd5】服务。再执行cmd,返回命令方式下,执行以下命令:

cd C:\Tercel\iGuard5\StagingServer
stagingd.exe -x 2>null

如果是同步服务器,首先到【管理工具】->【服务】里,停止【igdagent】服务。再执行cmd,返回命令方式下,执行以下命令:

cd C:\Tercel\iGuard5\igdagent
igdagent.exe -x 2>null

如果需要退出命令行状态,只要输入“Ctrl-c”即可。

如果加载了某个插件,在控制台里,会出现该插件初始化成功的提示。如:

C:\Tercel\iGuard5\StagingServer>stagingd.exe -x >&2 2>null
Post_sync lua filter inited!

{"status":0}Post_sync lua filter inited!

这种模式便于调试插件里的lua脚本。

5.4.3 怎样以命令行方式启动 Linux [发布|同步]服务器?怎样调试lua脚本?

如果是发布服务器,编辑 /usr/local/iguard5/stagingd/admtool 启动脚本,在如下第127行的启动命令里:

在“-d”前面加入-x,变为以下内容:

保存并退出。再执行./admtool start 2>/dev/null ,将以命令行方式执行,能看到更多的控制台信息。

[root@64 stagingd]# ./admtool start 2>/dev/null
Postsync lua filter inited!

如果是同步服务器,也是类似地修改 /usr/local/iguard5/igdagent/admtool 脚本的第127行,如上所示,加入 -x 参数(注意位置,在这一行的 -d 参数前)。保存并退出。再执行./admtool start 2>/dev/null ,将以命令行方式执行,能看到更多的控制台信息。

[root@64 igdagent]# ./admtool start 2>/dev/null
Presync lua filter inited!

如果需要退出命令行状态,只要输入“Ctrl-c”即可。

5.4.4 在Web控制台的服务器->【Web模块】>【可用模块】里,没有找到适合我的类别?

编辑同步服务器安装目录下的 conf/managed.conf配置文件,如 /usr/local/iguard5/igdagent/conf/managed.conf 或 C:\Tercel\iGuard5\igdagent\conf\managed.conf,按JSON格式,在其中加入自己需要的Web模块对应 mod_iguard5.conf 文件路径。

例如需要加入一个64位Apache 2.4模块,编辑 conf/managed.conf ,在原基础上,加入下面示例中的第4行(另外千万不要忽略第三行结尾处的","逗号!):

5.4.5 可以自行指定发布(或同步)服务的日志路径吗?

可以,但需要编辑配置文件。如以Linux下的发布服务器举例,在conf/stagingd.conf配置文件里,加入以下第9-12行,即可指定日志放到/tmp/logs目录下。这个写法了,千万不要忘了第7行结尾的","逗号!(没有加"log":段落之前,原配置文件里并没有这个逗号)

其他平台和同步服务器也是同样的处理。

5.4.6 可以自行指定核心内嵌模块的alert文件路径吗?

在同步服务器安装目录下的conf目录下,新增一个alert.conf 配置文件,如 /usr/local/iguard5/igdagent/conf/alert.conf 或 C:\Tercel\iGuard5\igdagent\conf\alert.conf,alert.conf 里内容如下:

在第二行的dir里,指定任意目录为报警文件存放目录。保存后,需要同时重启igdagent和安装了核心内嵌模块的Web服务。

请注意:如果不需要对报警文件的路径做调整,要彻底删除这个文件( /usr/local/iguard5/igdagent/conf/alert.conf)。

5.4.7 传输失败日志里,如果出现"14:115"或"14:116"错误代码,应该怎么处理?

如果发现传输有异常,需要先排查常见的几种可能:网络连接是否正常,同步端是否有写权限,剩余空间是否足够等。如果这些都没有问题,可以查看“实时日志”->"失败任务",如果发现在失败任务里,发现如下图大量出错代码为“14:115”的提示,应该是水印库文件被毁坏导致。

5.4.1

图示 5-4-1 水印库错误

可以执行水印修复命令。如果同步端在Windows系统,执行以下命令:

cd C:\Tercel\iGuard5\igdagent
igdagent.exe -e repairdb signdb

如果同步端在Linux系统,执行以下命令:

cd /usr/local/iguard5/igdagent/
./admtool -e repairdb signdb

执行后,会出现以下提示,一定要选择输入“Y”:

Do repair db(s) in DIR:
​ signdb
Confirm(Y/N) Y

看到以下提示,代表水印库被正确修复:

备注:这个功能从2017年12月1日开始支持。

同步代理服务支持无水印模式。 如果iGuard只使用ilocker防护模式,或者只把iGuard用于同步,不需要产生水印,可以在同步服务器的配置 igdagent.conf 增加如下开关:

5.4.8 怎样清理在发布服务器上的异常传输任务

正常情况下,如果还有传输任务未完成,在发布服务被重启后,这些之前没有完成的任务并不会丢失,而是自动继续传输。这个处理在大部分时候是我们偏好的选择,因为能保证任务的连续性。但是如果这些未完成任务本身就是由于某种异常导致的,是无法处理的,这种情况下,我们会希望重启发布服务后这些未完成任务就不要再继续传输了。

这时候需要做以下操作:

编辑StagingServer目录下的conf/stagingd.conf配置文件,把以下这句配置:

改为

同时,停止发布服务。然后删除 StagingServer目录下的 『data\task.sqlite3』 文件。再重启发布服务即可。

5.4.9 Linux iLocker做文件监控时,好像文件传输有遗漏问题

以Linux下iLocker做发布监控机制时,其他一切正常,但发现有部分文件貌似有传输遗漏问题,如vi编辑后的文件没有正常上传,如某些中间件CMS产生的文件,或者sftp上传的文件,产生丢失的现象,可以做的调整是,修改如下这个stagingd安装目录下的conf/fen.conf 文件:

把其中第13行整行彻底去掉(不要注释,JSON里没有注释这回事),只保留上述的第14行,并把前面的参数名,改为『param-value』,最后效果如下:

这两种写法的差异是第二种写法增加了对两种动作『OPEN_APPEND』和『 OPEN_WRITE』的监控。有些编辑器或程序,它们是以写的方式打开文件的。这种消息在上面一种写法的iLocker监控配置下,是『不管』的!为什么我们知道有这两种动作,但默认的处理是『不管』呢。因为这两种动作,一般并不是文件写关闭时触发的,是只要以写方式打开就会触发,如果都管,会导致文件变化消息很多,要合并的任务也很多。我们认为在文件正常写的时候(也就是配置里的『WRITE』动作)才上传文件较为合理。但是!有些应用,如vi/vim和某些CMS,可能确实就是用的『OPEN_WRITE』方式来写的,这样我们就会漏传。所以需要把这两个动作加回去。

如果需要更细致地判断是否这个原因导致的漏传,可以在fen.conf 配置文件里加入第11-第14行的『dumpfile』相关配置项如下:

重启一次iGuard发布程序。

再次执行会导致文件漏传的写操作,然后关掉iGuard发布程序(这步必须做!否则可能不会产生dump文件),再查看指定的dump文件,如本例中的:/tmp/ilocker.dump.log,就可以看到捕获的所有动作(并不是捕获的所有动作,iGuard发布程序都做处理的)。

这个调试步骤,作用是看一下我们可能漏处理了哪些具体的动作。以下是该dump文件大致的样子:

WRITE,0,30440,/usr/bin/lua,/tmp/web-src/obsolete/missed.png,,logonly
CREATE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
OPEN_WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly
WRITE,0,30440,/usr/bin/lua,/tmp/web-src/decide/EXE.jpg,,logonly

注意:如果把iLocker监控方式用在NFS服务器端,多个NFS客户端都会过来做文件更新,有微小可能会有消息遗漏的现象,不推荐使用。

5.4.10 加载Linux核心内嵌防篡改模块后,文件不会自动恢复,或者只看到403出错页面

建议按照以下步骤,有序检查可能的问题:

1、如果去掉我们的iGuard模块,就能看到修改后的效果,也不会403了,那就是iGuard权限的问题,进入步骤2排查;如果去掉我们的模块,依然403,那就是Apache配置问题,先去掉iGuard模块,调整Apache,保证没有模块的时候,访问是正常的。

2,第二步一定要关注Web控制台上是否有相应的报警日志:如果有报警日志,那可能是目录映射错误问题,或者配置后忘了重启发布服务;如果控制台上就压根没有报警日志,那就多半是alert.log文件的权限问题,进入步骤3。

3,彻底停掉igdagent服务:./admtool stop ——这步一定要执行,不要忽略。然后浏览器里刷新访问被修改的网页,403状态下,看看 /usr/local/iguard5/igdagent/alert/alert.log 报警文件里有没有这个文件的具体的报警日志!如果这个alert.log文件就不存在,或者文件存在但字节为0,都是属于不对的!

如果这个文件压根没有,则创建一个并设置权限:

cd /usr/local/iguard5/igdagent/alert/
touch alert.log
chmod 777 alert.*

再执行步骤3的网页刷新,再看alert.log是否有内容。如果有内容,执行步骤4;如果没有内容,执行步骤5。

4,重启同步服务,看控制台是否收到报警,是否能自动恢复该403文件:./admtool start

5,如果alert.log在步骤3的调整下还是没有内容,执行以下处理(依然保持同步服务停止状态,并关掉selinux):

/usr/local/iguard5/igdagent/admtool stop
setenforce 0
vi /usr/local/iguard5/igdagent/conf/alert.conf

编辑一个全新的 /usr/local/iguard5/igdagent/conf/alert.conf,在里面的dir里指定报警日志的输出目录,内容如下:

重启Apache后,再刷新访问403页面,再到 /tmp 目录下,查看是否有 /tmp/alert.log 文件产生。

如果这时候就有 /tmp/alert.log 文件产生并有内容了,那就是Apache的进程无法写入 /usr/local/iguard5/igdagent/alert 目录,但可以写入 /tmp 目录,以后都需要改用 /tmp 目录。这时候就可以重启igdagent服务,理应就一切正常了。 如果这时候还是没有/tmp/alert.log 产生,那就要用iGuardv5 FAQ [5.4.1 怎样查看核心内嵌模块的调试日志?] 里的调试大法了。

5.4.11 Linux发布服务器怎么切换为iLocker1方式做文件变化监控?

iLocker是天存公司独有的一款Linux文件监控系统。到目前为止,它有两个版本1.0和2.0,两者在配置上不兼容。

iGuard Linux 发布服务器做文件自动更新上传时,可以选择 Fuse、iLocker、NFS等方式作为文件变换监控的方式。但这些方式只能同时选择一种。如果选择iLocker方式,则需要对1.0 或 2.0 版做一定的适配。

总的原则是先查看iGuard Linux发布服务器自身的版本:如果这个发布程序早于20171201版,则这个发布服务器默认支持iLocker1.0;如果这个发布程序晚于(包括)20171201版,则它默认支持iLocker2.0版本。

如果晚于 20171201版的发布程序需要使用 iLocker1.0版,也是可以实现的。具体步骤如下:

1、解压iLocker1.0压缩包,选择合适的ilocker.ko文件。不需要任何配置,直接执行bin/ilocker start,启动iLocker。以下是示例的步骤,请根据实际情况选择适用的ilocker.ko文件。

tar xzvf ilocker1.0_20180116.tar.gz
cd ilocker/lib
ln -sf ilocker\@2.6.32-573.el6.x86_64\@x86_64\@rhel6.7\@.ko ilocker.ko #这步请根据uname -an的实际情况选择合适模块
cd ..
bin/ilocker start

2、修改发布服务器下的conf/fen.conf里的"schemefile"配置项(以下第9行),从原来的"/usr/local/iguard5/stagingd/conf/scheme.conf",改为 "/usr/local/iguard5/stagingd/conf/scheme1.conf",最后内容如下:

3、再执行 vi /usr/local/iguard5/stagingd/conf/scheme1.conf,创建和编辑 scheme1.conf 里的内容。该文件内容如下:

{ "options": [
"clear",
"option_write",
"pass"
],
"rule_pattern": "*,*,*,*,%1,log"
}

保存退出。

4、选择iLocker做监控时需要的库文件。

# cd /usr/local/iguard5/stagingd
# mv libfen.so libfen.so.original
# ln -sf liblsmxfen.so libfen.so

完成上述步骤后,才能启动发布程序! 执行 /usr/local/iguard5/stagingd/admtool start ,正常配置源端目录和目标端目录即可。

5、在发布服务器的控制台里,配置好『站点』、『关联服务器』等必要信息并保存后,可以执行以下命令,验证发布服务器和iLocker的配合是否正常(前提是一定要在控制台里配置好正确的站点信息):

# echo print > /dev/ilocker1
# dmesg

如果执行上述两条命令后,在dmesg里,能看到以下内容,则发布程序可以正常监控源目录(以下示例中,监控的源目录为/var/www/html 目录 )的文件变化了。

6、配置自启动。编辑自启动文件:vi /etc/rc.local,写入以下内容:

/usr/local/iguard5/ilocker/bin/ilocker start
/usr/local/iguard5/stagingd/admtool start

请注意涉及的路径要根据实际情况修改,另外顺序不要颠倒。

5.4.12 Linux下怎样在网络防火墙上开放特定端口

如果是Redhat7/CentOS7系列操作系统,需要在root管理员权限下,使用firewall-cmd 命令添加开放端口。具体步骤如下:

#查看当前的防火墙设置:
firewall-cmd --list-all

返回结果如下:

public (default, active)
interfaces: eno16780032
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

可以看出,当前的域(zone)为public,我们需要在该域开放37777端口。这时需要执行(去除--zone=public的部分也可以):

firewall-cmd --permanent --zone=public --add-port=37777/tcp
firewall-cmd --reload
firewall-cmd --list-all

输入最后一句查看状态的命令后,能看到37777端口已经放开了:

public (default, active)
interfaces: eno16780032
sources:
services: dhcpv6-client ssh
ports: 37777/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

关于Redhat7/CentOS7的防火墙调整,更多信息请参看官方文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls

5.4.13 加载Linux下的Apache模块报错

如果按照【2.4.2 Linux/Unix Apache 核心内嵌】章节的说明,加载Apache模块后,重启Apache服务时报错。具体解决步骤要视乎报错提示的详细信息。

可能一:如果报错信息提示如下

# bin/apachectl restart httpd: Syntax error on line 411 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/iguard5/igdagent/modules/ap22/mod_ap22_iguard5.so into server: libigx5.so: cannot open shared object file: No such file or directory

可以知道根本原因是内嵌模块依赖于【 libigx5.so】通用库。这个【 libigx5.so】位于iGuard同步目录下,但iGuard同步目录不是系统的默认库搜索路径,所以Apache找不到这个依赖库文件。需要给这个 libigx5.so 库文件做一个软链接,把它放到系统库目录(如/lib64/ 下)。执行以下命令:

# ln -s /usr/local/iguard5/igdagent/modules/libigx5/libigx5.so /lib64/libigx5.so

确认在默认状态下,用 ldd 查看Apache iGuardv5 模块不会导致依赖库欠缺即可。

ldd /usr/local/iguard5/igdagent/modules/ap22/mod_ap22_iguard5.so

linux-vdso64.so.1 => (0x00000fff7a620000) ​ libpthread.so.0 => /lib64/libpthread.so.0 (0x00000fff7a5a0000) ​ libigx5.so => /lib64/libigx5.so (0x00000fff7a540000) ​ libc.so.6 => /lib64/libc.so.6 (0x00000fff7a350000) ​ /lib64/ld64.so.1 (0x0000000042990000) ​ libdl.so.2 => /lib64/libdl.so.2 (0x00000fff7a320000) ​ libm.so.6 => /lib64/libm.so.6 (0x00000fff7a220000) ​ librt.so.1 => /lib64/librt.so.1 (0x00000fff7a1f0000)

可能二:检查 LoadModule 和 LoadiGuardConfigFile 两句指令里,涉及的两个文件路径是否正确,可以用 ls 命令验证一下。

可能三:检查 Apache用户(daemon或者nobody)对 /usr/local/iguard5/igdagent/alert 目录下的 alert.* 文件是否读写权限不够。

5.4.14 怎样限制连接同步端的客户端IP地址?

编辑同步服务器安装目录下的 conf/trustzone.conf 文件,在其中的ip_filter 段里,限定允许的客户端ip地址。

IP字符串的过滤条目,采用文件过滤规则的格式,有以下3种写法:

5.4.15 怎样限制连接发布端的客户端IP地址?

编辑发布服务器安装目录下的 conf\stagingd.conf 文件,在listen段内,加入 "allow_ips" 属性如下:

"allow_ips" 是一个字符串数组,每个条目为允许访问控制台的ip地址,可以包含'*'通配符。 如果未配置任何条目,则没有限制访问,否则以配置的客户端IP为准。

注意:这个功能从20181223版本才开始支持。

5.4.16 怎样指定特定用户运行同步程序?

要以特定用户运行同步程序有两种方式:一种是直接指定以该用户执行同步程序,另一种是以root启动同步服务,但在配置文件里, 指定以特定用户运行工作进程。两种方式只需要选择其一。

方法一:直接指定某用户执行同步程序

假定使用者打算以iguard用户执行程序,需要先执行以下操作,这些操作执行一次即可。

以后只需要以该用户权限启动同步程序即可,步骤如下:

同时需要设置自启动时也以该用户进程启动。编辑 /etc/rc.local 文件,写入:

方法二:以root启动发布(或同步)服务,但在配置文件里, 指定以特定用户运行工作进程。

修改同步服务器相应配置文件,如igdagent.conf,加入以下配置项:

如上配置可以切换成 iguard 用户+ iguard 组的身份来运行igdagent的工作进程。

igdagent是双进程(守护进程和工作进程)运行机制,主进程以启动命令的用户身份来执行,工作进程默认同主进程;如果使用以上配置,工作进程会试图切换到指定身份运行。启动命令的用户需要有足够的权限来切换到指定用户,拥有大权限的用户才能成功切换到小权限,反之会失败。

注意事项:igdagent安装目录及目录下内容,确保文件/目录权限已经全部切换到指定用户上!(重要!)

以上机制也可应用到发布服务上。

5.4.17 怎样让同步端不同目录的文件属性设为不同的属主/组?

以下功能从2019/03/21版本开始支持。早于此前的版本,需要使用Lua外挂的形式,详见『5.3.2.1 修改接受端文件的权限(Linux平台)』。

如编辑 conf/igdagent.conf 配置文件,在其中增加如下配置,则可以把所有文件("filename_pattern": "*")的owner/group设置为iguard/iguard,文件的权限为“644”,目录的权限为“755”。

如果有两个目录,需要归属不同的owner和group,分别为master1和master2,则可以写为如下数组形式:

修改保存后,重启同步进程即可。

5.4.18 是否支持IPv6?

我们的程序从2018年9月开始支持IPv6,请注意使用的版本。

除了安装程序的系统自身需要支持 IPv6之外,还需要调整发布或者同步服务器的配置文件conf/stagingd.conf和conf/igdagent.conf。把这一句 "listen":{ "address":"" ,改为 "listen":{ "address":"::",,这个写法类似于监听 IPv4的0.0.0.0 地址,最后结果大致如下:

修改完成后,需要重启发布或同步服务。

重启后,请先用netstat 确认 [::] 的IPv6本地地址和端口,确实处于监听状态。

如Windows平台,执行 netstat -an |findstr 39999(发布服务)或 netstat -an |findstr 37777(同步服务),能看到以下结果,就是已经在监听IPv6地址了:

C:>netstat -an |findstr 39999
TCP 0.0.0.0:39999 0.0.0.0:0 LISTENING
TCP [::]:39999 [::]:0 LISTENING

如Linux平台,则分别执行 netstat -an |findstr 39999(发布服务)或 netstat -an |findstr 37777(同步服务),能看到如下状态。

# netstat -an |grep 39999
tcp 0 0 :::39999 :::* LISTEN

以下为对比,是监听IPv4地址时的场景:

# netstat -an |grep 39999
tcp 0 0 0.0.0.0:39999 0.0.0.0:* LISTEN

另外,Linux下的发布/同步,如果在本地看已经绑定了IPv6的监听地址,但在本地以外的机器却访问不到相应的端口,那很可能是因为防火墙的原因。Linux下IPv4和 IPv6的防火墙时独立的。可以试试看关掉IPv6网络防火墙看看效果如何:service ip6tables stop

如果不能完全关闭防火墙,可以编辑 IPv6 iptables表 /etc/sysconfig/ip6tables,加入类似这样的一行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 39999 -j ACCEPT

再重启服务即可,service ip6tables restart

####== 额外知识点 ==

关于IPv6的地址,有以下三种形式:

截图上不是三个不同的IPv6地址,这三个实际上是一台机器上三种不同IPv6地址写法! 根据实际情况,写其中任意一种即可,都支持!

通过浏览器访问Web管理控制台时,如果用IPv6的方式访问,在浏览器里这么写地址:

https://[fde5:9dba:8800:53ab:2912:712f:5989:66c7]:39999/

如果浏览器和发布在同一台机器上,访问本地IPv6地址,以下地址即可:

https://[::1]:39999/

5.4.19 怎样删除非空目录?

和非空目录删除有关系的配置项包括两个:1、发布端的 force_rmold_on_rendir; 2、同步端的 brute_sync_rmdir。解释分别如下:

发布端的 force_rmold_on_rendir

从2018年2月开始支持。编辑发布服务器配置文件(conf/stagingd.conf),如果这项设置改为 "force_rmold_on_rendir": true,会在A目录改名为B目录并自动同步时,强制把目标端的原A目录及其子目录都删掉。配置项如下:

这个配置项为true时,目录改名会发起强制删除(递归)旧目录名的动作。这样做的代价是:对于拥有大量文件的目录,一个改名动作会导致大数据量的搬迁。

同步端的 brute_sync_rmdir

从2018年7月开始支持。编辑同步服务器配置文件(conf/igdagent.conf),如果这项设置改为 "brute_sync_rmdir": true,对于目录删除动作,强制进行递归删除,缺省情况下不启用该功能。配置项如下:

Lua方案

在不支持上述配置项的环境里,可以选择Lua方案。方法是先把同步服务器安装目录下的 "/plugin/lua/_postsync_forcedel.lua“文件名,改名为postsync.lua,然后重启同步服务。

需要切记的是:如果采用这种方式的同时,网站使用了iLocker防护模式,还需要配合放开 /bin/rm 进程的执行权限。

5.4.20 同步时不执行删除动作?

如果同步时希望忽略所有的删除动作,实现增量的同步,也就是源端的删除动作不需要同步到发布端,可以有以下两种做法,只需要选择其中一种即可。 1,如果是2018年10月以后的版本,可以使用这种方法。编辑同步端的 C:\Tercel\iGuard5\igdagent\conf\trustzone.conf/usr/local/iguard5/igdagent/conf/trustzone.conf ,如下加入 "fs_exports"一段。把其中"/path/to/public/dir"修改为自己的实际路径,把"delete" 字段的值,改为 false,最后重启igdagent同步服务。请注意,在"fs_exports"里设置的目录必须是个网站目录名,不能带通配符号。

如果需要对细粒度到文件级别的设置,则需要再加一个字段"fs_perms"。该字段需要在"fs_exports" 设置的基础上使用,它定义了更细粒度的访问权限控制。如果"fs_exports" 中完全没有条目,表示全开放,此时 "fs_perms" 即使有配置也不会生效。在"fs_perms" 段中的"pattern" 则可以写通配符或具体某个文件路径,具体见以下示例。

2、如果是2018年10月以前的版本,可以使用方法二。修改同步服务器安装目录下的 /plugin/lua/_presync_nodelete.lua 文件名为 presync.lua。然后重新启动igdagent服务。 这样会忽略所有的文件删除动作,也就是所有发布端的删除任务,接收端都不会执行。这个方法无论哪个阶段的程序都支持。

5.4.21 怎样重置用户密码?

在某些场景里,可能需要重置用户密码。可以给以下文件 C:\Tercel\iGuard5\StagingServer\auth\usr.db 这个文件或者 /usr/local/iguard5/stagingd/auth/usr/db 改名后,重启发布服务即可。此时用户密码恢复默认值。

5.4.22 发布和同步服务器之间不用SSL加密通讯?

正常情况下,发布服务器和同步服务器之间使用的是SSL加密安全通信,绝大多数情况下不需要做改动。只有在非常特殊的场合,比如有些非常受限的网络环境里,如果怀疑由于安全通讯导致连通性问题,可以把发布和同步服务器的通讯模式改为普通明文方式,做对比测试,以协助问题定位。 步骤如下:修改同步端 igdagent/conf/igdagent.conf 配置文件,在其中的 "listen" 把,把其中的"use_ssl":1改为 "use_ssl":0 。保存修改后,还需要重启igdagent服务。

同时,还需要到iGuardv5控制台,登录后,选择【开始】-【同步管理】-【服务器管理】-【服务器列表】中的具体服务器,然后再点击【编辑】,在服务器的详情里,撤选“启用安全通信”,如下图:

完成后,点击【确定】保存修改。退出该界面后,还选择重启发布服务,才能使该项生效。

注意:这个修改只是设定发布和同步服务器之间不使用SSL通讯,访问Web控制台本身依然需要使用https访问!如果确实连Web控制台也要使用明文协议访问,则需要修改 StagingServer/conf/stagingd.conf ,把"listen" 段设置为 "use_ssl":0 ,并重启发布服务即可实现。这个修改和前面的“发布-同步”连接的安全通讯是完全独立的无关的。

5.4.23 加密通道如何禁用某些不安全算法?

某些系统漏洞扫描程序,会对我们安装/发布程序所在系统进行检查。它们可能会报告一些和SSL加密算法相关的问题,如汇报以下安全预警,则需要对程序做以下调整。

1、程序需要升级到 2022/01/20 时间点以后的版本!

2、禁用不满足安全要求的弱算法:发布端请修改 stagingd.conf 配置文件;如果是同步端,则修改 igdagent.conf 配置文件,添加以下"SSLCipherSuites":段内容。

3、重新启动发布服务或者同步服务。

备注:如果对扫描防护有更严格的需求,可以参见 5.4.14 怎样限制连接同步端的客户端IP地址?5.4.15 怎样限制连接发布端的客户端IP地址? 中的详细步骤,加入对客户端IP来源的限制,可以更有效地阻拦扫描的访问。

5.4.24 发布命令行查询/管理工具?

我们也提供了stacli命令行工具,可用作独立的命令行维护管理。这个工具的使用方式请参见:【发布服务命令行工具stacli说明】。

5.4.25 同步服务手工改为非ssl通讯

在同步服务器端,需要修改conf/igdagent.conf 配置文件,设置这段里 "use_ssl":0 ,然后重启同步服务。

如果使用的发布服务器版本比2020/06/02版本更新,并不需要做如下操作。只需要在界面上,调整同步服务器设置里的“启用安全通信”,去除该配置项即可。

但在比2020/06/02之前的版本,就需要一点手工调整了。由于在发布服务器端,具体配置保存在SQLite里,需要手工修改配置。如果发布服务器在Windows端,可以下载SQLiteDatabaseBrowser程序(https://sqlitebrowser.org/),协助编辑修改SQLite里的Host->usessl 字段即可。

如果发布程序在Linux平台,可以执行以下操作修改:

$ cd /usr/local/iguard5/stagingd/conf
$ sqlite3 config.db
sqlite> SELECT id,name,address,usessl FROM host; -- 从host表获得全部服务器列表
sqlite> UPDATE host SET usessl=0 WHERE id=1; --根据实际情况,修改id值,把指定id的服务器连接改为非ssl连接
sqlite> SELECT id,name,address,usessl FROM host WHERE id=1; -- 再执行一遍查询,确认前的修改生效
sqlite> .quit

完成后,还需要重启发布程序生效。