分类 服务软件 下的文章

最近发现WSUS虚拟机的硬盘满了,由于是多年前用Windows Server 2012做的,正好重新做一个Windows Server 2019的WSUS,免得每次清理数据都很慢,还时不时把WSUS服务给清理挂掉。
新安好Windows Server 2019,一路下一步装好WSUS服务,经过漫长的等待,在更新了16235个补丁之后,终于可以使用了。
不过好景不长,每天频繁出现WSUS控制台连接不上,错误提示是连接错误,只能点击重置服务器节点,开始以为负载高,重启就好了,后台发现不定期就不好用,重启也重启不过来,也没啥特点,就是一堆错误日志。在应用程序日志可以看到以下日志信息:

错误日志1:来源Windows Server Update Services 事件ID 7053

WSUS 管理控制台遇到意外错误。这可能是暂时错误;请尝试重新启动该管理控制台。如果此错误仍然存在,

请尝试通过删除 %appdata%\Microsoft\MMC\ 下的 wsus 文件来删除该控制台的永久性首选项。


System.NullReferenceException -- 未将对象引用设置到对象的实例。

Source
Microsoft.UpdateServices.UI.SnapIn

Stack Trace:
   在 Microsoft.UpdateServices.UI.SnapIn.Pages.ServerSummaryPage.backgroundWorker_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e)

错误日志2:来源Windows Server Update Services 事件ID 12072

无法访问 WSUS 内容目录。
System.Net.WebException: 远程服务器返回错误: (503) 服务器不可用。
   在 System.Net.HttpWebRequest.GetResponse()
   在 Microsoft.UpdateServices.Internal.HealthMonitoring.HmtWebServices.CheckContentDirWebAccess(EventLoggingType type, HealthEventLogger logger)

无法访问 WSUS 内容目录。
System.Net.WebException: 远程服务器返回错误: (503) 服务器不可用。
   在 System.Net.HttpWebRequest.GetResponse()
   在 Microsoft.UpdateServices.Internal.HealthMonitoring.HmtWebServices.CheckContentDirWebAccess(EventLoggingType type, HealthEventLogger logger)

错误日志3:来源Windows Server Update Services 事件ID 12052

DSS 身份验证 Web 服务无法正常工作。

错误日志4:来源Windows Server Update Services 事件ID 12042

简单身份验证 Web 服务无法正常工作。

错误日志4:来源Windows Server Update Services 事件ID 12022

客户端 Web 服务无法正常工作。

错误日志5:来源Windows Server Update Services 事件ID 12032

服务器同步 Web 服务无法正常工作。

错误日志6:来源Windows Server Update Services 事件ID 12012

API 远程 Web 服务无法正常工作。

错误日志7:来源Windows Server Update Services 事件ID 12002

报告 Web 服务无法正常工作。

错误日志8:来源Windows Server Update Services 事件ID 13042

自我更新无法正常工作。

错误日志9:来源Windows Server Update Services 事件ID 10032

服务器无法下载某些更新。

搜索了一下找到了解决思路,大意是,出现这个故障时,IIS中的WSsusPool应用程序池变成已停止,启动它就恢复正常了,究其原因,据说是IIS的应用程序池默认给分配的内存是1.8G内存,根据需要改大就可以了

找到IIS管理器,打开应用程序池,找到WsusPool,右侧点击高级设置,在专用内存限制项中把1843200改为4096000,也就是从1.8G改成4G,当然你内存够大也可以改成0也就是不限制。

改完以后,点击WSUS控制台各个菜单和按钮都变得十分流畅了,之前一度很卡。

GLPI是非常优秀开源IT管理系统,包括资产统计、helpdesk等等功能,配合OCSNG还可以实现自动采集客户端软硬件信息。
虽然这套软件也有Windows版的,但Linux下的更加稳定,推荐在Linux上安装,本人之前写过一篇安装文章,那个时候为了收集中日文的计算机信息,还需要第三方的程序和修改glpi代码才能实现,现在这两个软件官方原生已经支持UTF8,不需要我们折腾了,不过安装过程依然不那么简单,呵呵
好了,先安装基本的Linux系统,本例使用的是CentOS6.0,GLPI版本0.84.5,OCSNG版本是2.1.1。

这里说一下默认光盘安装的CentOS6,有几个需要注意的地方,第一建议关闭防火墙和selinux,第二,配制好网卡,默认情况下,网卡开机是不启用的,需要修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0
把
ONBOOT=no
改为
ONBOOT=yes

然后开始安装基础软件httpd,php,mysql,还需要下载一些软件

 glpi-0.84.6.tar.gz
 json-1.2.1.tar
 OCSNG_UNIX_SERVER-2.1.1.tar.gz
 OCSNG-Windows-Agent-2.1.1.zip
 OCSNG-Windows-Packager-2.1RC1.zip

安装OCSNG服务端

tar zxvf OCSNG_UNIX_SERVER-2.1.1.tar.gz
 cd OCSNG_UNIX_SERVER-2.1.1
 ./setup.sh

接下来一路回车,你会依次看到如下的选择提示

Do you wish to continue ([y]/n)?
 Which host is running database server [localhost] ?
 On which port is running database server [3306] ?
 Where is Apache daemon binary [/usr/sbin/httpd] ?
 Where is Apache main configuration file [/etc/httpd/conf/httpd.conf] ?
 Which user account is running Apache web server [apache] ?
 Which user group is running Apache web server [apache] ?
 Where is Apache Include configuration directory [/etc/httpd/conf.d/] ?
 Where is PERL Intrepreter binary [/usr/bin/perl] ?
 Do you wish to setup Communication server on this computer ([y]/n)?
 Where to put Communication server log directory [/var/log/ocsinventory-server] ?
 Communication server need a directory for plugins configuration files.
 Where to put Communication server plugins configuration files [/etc/ocsinventory-server/plugins] ?
 Communication server need a directory for plugins Perl modules files.
 Where to put Communication server plugins Perl modules files [/etc/ocsinventory-server/perl] ?

然后我这里会出现如下错误提示,根据提示安装对应的软件

+----------------------------------------------------------+
 | Checking for required Perl Modules... |
 +----------------------------------------------------------+

 Checking for DBI PERL module...
 Found that PERL module DBI is available.
 Checking for Apache::DBI PERL module...
 *** ERROR: PERL module Apache::DBI is not installed !
 Checking for DBD::mysql PERL module...
 Found that PERL module DBD::mysql is available.
 Checking for Compress::Zlib PERL module...
 Found that PERL module Compress::Zlib is available.
 Checking for XML::Simple PERL module...
 *** ERROR: PERL module XML::Simple is not installed !
 Checking for Net::IP PERL module...
 *** ERROR: PERL module Net::IP is not installed !
 *** ERROR: There is one or more required PERL modules missing on your computer !
 Please, install missing PERL modules first.

 OCS setup.sh can install perl module from packages for you
 The script will use the native package from your operating system like apt or rpm
 Do you wish to continue (y/[n])?

下载perl-Apache-DBI-1.09-1.el6.noarch.rpm,并安装
我这里提示

rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm
 warning: perl-Apache-DBI-1.09-1.el6.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
 error: Failed dependencies:
perl(Digest::SHA1) is needed by perl-Apache-DBI-1.09-1.el6.noarch

还需要安装依赖perl-Digest-SHA1

yum install perl-Digest-SHA1
rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm

继续安装依赖包

yum install perl-XML-Simple perl-Net-IP

重新运行OCSNG安装程序
之后有提示还缺一些SOAP相关的包,直接忽略就行了,不需要这个功能

配置数据库安全
mysql_secure_installation
设置root密码,关闭root远程访问,移出不必要的数据库
/etc/my.cnf中找到[client]和[mysqld],然后在它们下面均加上default-character-set=utf8就可以了。别忘了重启下mysql服务
创建ocsng和glpi的数据库和用户

 mysql -u root -p
 create database glpi;
 create database ocsweb;
 grant all privileges on glpi.* to glpi@localhost identified by 'password';
 grant all privileges on ocsweb.* to ocs@localhost identified by 'password';
 set global max_allowed_packet = 2*1024*1024*10
 exit

配置ocsng的web界面(以下地址请将192.168.1.11替换为你自己的服务器IP)
进入http://192.168.1.11/ocsreports
输入上面设置的password密码,提交即可
再删掉安装文件 /usr/share/ocsinventory-reports/ocsreports/install.php
用admin/admin登陆进ocsng的web界面后更改下默认密码即可

下面安装glpi,由于glpi需要json,新版本的php如果要编译json必须修改代码

tar xvf json-1.2.1.tar
 cd json-1.2.1
 vi JSON_parser.c
添加#define ZVAL_DELREF Z_DELREF_P 
 phpize
 ./configure
 make 
 make install 
 echo "; Enable json extension module" > /etc/php.d/json.ini 
 echo "extension=json.so" >> /etc/php.d/json.ini 
 /etc/init.d/httpd restart
 tar zxvf glpi-0.84.6.tar.gz
 mv glpi /var/www/html/
 chown apache.apache /var/www/html/glpi/ -R

输入http://192.168.5.11/glpi 直接跳转到安装界面
选择语言,提交,一路下一步即可
删除/var/www/html/glpi/install/install.php
修改密码后完成glpi的安装

配置glpi的插件ocsng
之前的老版本,glpi中直接集成了ocsng的连接组件,新版本中变为了插件方式,到glpi网站下载插件glpi-ocsinventoryng-1.0.2.tar.gz

tar zxvf glpi-ocsinventoryng-1.0.2.tar.gz
mv ocsinventoryng /var/www/html/glpi/plugins/

去插件中启用就可以了

配置域整合

 名称
yourdc.local
 Server
 192.168.1.200
 Basedn
 DC=yourdc,DC=LOCAL
 rootdn (非匿名)
ldapconnect@yourdc.local
 Login Field
 samaccountname
连接过滤器
(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
然后配置导入信息即可

这里发现一个bug,以前在0.7x版本上是没问题的,现在升级到0.8x以后ldap连接测试可以通过,但是无法导入用户,打开调试模式得到如下错误

PHP Warning: ldap_search(): Search: Operations error in /var/www/html/glpi/inc/authldap.class.php at line 1400

经过研究代码和数据库发现,rootdn_passwd这个密码并没有真正写入数据库,而直接在数据库中修改此项也没生效,只好改ldap连接代码了,本人非php专家,所以改成可以满足自己应用就好了,修复bug没那个精力。。。

vi /var/www/html/glpi/inc/authldap.class.php

找到

static function connectToServer($host, $port, $login="", $password="", $use_tls=false,
$deref_options) {

这个函数,在下面添加即可

$password="yourdnpasswd";

最后重新进入导入用户界面就可以看到亲切的域帐号了。。。

squid用了好多年,但是总的来说也不算精通,都是需要什么去查什么,然后照着做。。。

今天偶然发现还有wpad这东西,全名为Web Proxy Auto Discovery。顾名思义,就是让IE浏览器自动检测设置,而无需设置代理服务器及端口或者设置代理脚本。

当然前提是在域环境下,否则你需要更改的东西可就多了,也不能保证好用。本例是在域环境下测试并部署成功的。

英语好的可以去看参考文章http://www.wlug.org.nz/WPAD

默认情况下,域用户登录计算机后,IE会按以下地址自动检测代理设置

http://wpad.xxx.domain.local/wpad.dat
http://wpad.domain.local/wpad.dat
http://wpad.local/wpad.dat
http://wpad/wpad.dat

xxx.domain.local是你域的地址,所以最简单的办法就是在域里设置wpad.xxx.domain.local这个域名,指向你的代理脚本所在的地址(注意这个地址是代理脚本所在的地址,可以不是代理服务器的地址)

然后再代理脚本所在的服务器网站根目录创建一个名为wpad.dat的文件,文件内容其实就是你原有的代理脚本设置

在设置的时候有个小插曲,那就是wpad这个域名被windows当作黑名单处理了,我们需要去掉或关闭这个特性。

由于我使用的是squid作为代理服务器,才有这个问题,如果你使用的是ISA2006或者TMG2010那就没这个问题,因为都是微软自家的东西,不会做限制的。

关闭这个特性需要安装soppurt tools,命令行下运行如下命令即可

dnscmd [servername] /config /enableglobalqueryblocklist 0

把[servername]替换为你服务器的名称,这里我是偷了个懒,直接关闭了,其实可以修改这个blacklist的,有需要的可以自己google

更改完这些以后,可以找一台域用户登录的计算机测试了,我这里的环境使用xp/2003/win7都没问题。

后续测试发现,不用域环境也是可以的,但是需要开启dhcp,让dhcp推送一个域后缀,然后把推送到这个域后缀增加个wpad的子域名就可以了。

另外,再说一下之前做的各种尝试,包括dhcp选项,dns修改,都罗列如下

dhcp修改/etc/dhcpd.conf

option option-252 "http://wpad.xxx.domain.local/proxy.pac";
option wpad-url code 252 = text;
option wpad-url "http://wpad.xxx.domain.local/proxy.pac\n";

第一行可能不好用,由于dhcp版本问题,出错注释掉

dns配置需要增加如下设置

wpad IN A 192.168.0.100
IN TXT "service: wpad:!http://wpad.xxx.domain.local:80/proxy.pac"
wpad.tcp IN SRV 0 0 80 wpad.xxx.domain.local.

由于工作需要,要给开发人员提供Cygwin的离线安装包(ps1:现在Cygwin官方没有提供现成的离线安装包;ps2:我这的开发人员不能上网。。。)

开始本想直接下个现成的离线安装包,结果发现电驴上基本没速度,而且找了若干个版本都很低,于是打算自己做离线安装包,方法很简单,就是用官方提供的在线安装程序下载,最后把文件做成iso就可以了。

首先,到Cygwin的官网http://www.cygwin.com/,下载http://www.cygwin.com/setup.exe

双击运行程序,选择“Download Without Installing”;

点击下一步,选择本地存放路径,比如D:Cygwin-Install;

点击下一步,选择联网方式,如果你的网络环境需要代理的话,在这里设置;

点击下一步,选择下载地址源,这里我选择的是http://mirror.kernel.org

点击下一步,有个软件包目录的下载进度,稍等就可以看到所有的软件包清单了,因为要做离线安装包,所以直接在“All”的右侧左键点击,把默认的“Default”更改为“Install”,在“All”上选择Install的含义是下载所有二进制软件包,如果需要源码的话,根据自己需要点击吧,一般是不用的;

点击下一步,稍等片刻,会提示你要安装一个必要的依赖包,这步不需要选择什么,它只是提示信息;

最后点击下一步,就开始下载了,需要等很漫长的时间,看你的带宽而定;

等下载完毕后,点击确认关闭软件,就可以在D:Cygwin-Install看到收成了,另外说一下,生成的下载目录很长,比如我的http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f,在做ISO之前随便改个短点的名字就好啦,别忘了把setup.exe也放到iso根目录,这样一个山寨的Cygwin最新版本地安装包就做成啦~

授人鱼不如授人以渔啊!

出于安全考虑,日志变得至关重要,配置一个中心日志服务器用来收集整个网络的日志变得必要起来。

本文介绍如何在Redhat AS5上安装配置基于syslog-ng的日志服务器。

首先做基本系统安装,这个略过,如过不会请google搜索。

由于系统自带的syslog过于陈旧,功能不够强大,更主要的,对于我来说,它不能将不同机器的日志分开不同文件存储。

所以我选择syslog-ng,它可以通过过滤器将不同机器不同内容的日志进行分割存储在不同的文件中。

安装eventlog和syslog-ng两个软件,如果有问题,可以强制使用下面命令进行安装,有一定风险,如果你知道你在干什么的话

rpm -ivh eventlog-0.2.7-3.el5.i386.rpm
rpm -Uvh –replacefiles syslog-ng-2.1.4-1.el5.i386.rpm

你下载的版本号可能和我的不一样,不过没关系,呵呵,语法参数一样的,开始我想先卸载syslog,结果发现它要卸载一百多个软件,无奈才使用上面的参数强制替换安装的。

接下来是配置,只有一个/etc/syslog-ng/syslog-ng.conf

需要修改的内容,请直接按下面的配置修改或增加

options {
sync (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off);
use_dns (no);
use_fqdn (no);
create_dirs (no);
keep_hostname (no);#此处建议改为no,否则可能记录到的是计算机名,不利于统计分析
};

source s_sys {
file (\”/proc/kmsg\” log_prefix(\”kernel: \”));
unix-stream (\”/dev/log\”);
internal();
udp(ip(0.0.0.0) port(514));#修改或增加这一行,允许外部数据进来
};

 #Linux主机登录日志过滤存储
destination d_auth_1 { file(\”/var/log/192.168.0.1_secure\”); };#此处设定存储位置
filter f_auth_1 { facility(authpriv) and host(\”192.168.0.1\”); };#此处设定过滤内容,authpriv和IP必须是192.168.0.1
 log { source(s_sys); filter(f_auth_1); destination(d_auth_1); };#此处读取前面的设定写入日志文件

#Windows服务器日志存储

destination d_auth_2{ file(\”/var/log/192.168.0.2_secure\”); };#设定日志存储位置和名称
filter f_auth_2 { host(\”192.168.0.2\”); };#过滤IP为192.168.0.2的记录
log { source(s_sys); filter(f_auth_0.2); destination(d_auth_0.2); };#存储符合条件的日志到定义的日志文件

最后重启syslog-ng服务即可

/etc/init.d/syslog-ng restart

注:别忘了停用原来的syslog服务,和把syslog-ng改为自动启动