• iisweb服务器完美解决方案


    一、选择您的服务器操作系统和IIS版本

    在选择您的服务器操用系统时应该考虚三个问题:

    1、 是否足够安全,正确的可以安全更新的序列号 2、能否满足你的服务需要

    2、 能否进行负载均衡(对要求较高的用户)

    在选择您的WEB服务器的IIS版本一般都由IIS5.0向IIS6.0过渡,现在IIS7.0已进入了测试阶段,真是期待中啊....相关的介绍请上微软的官方网站上查看。

    暂时的我选择的是windows2003企业版+IIS6.0

    二、安装操用系统和IIS6.0

    windows2003企业版我们就不说了(什么,不会,那就再去找资料吧),但是注意的是所有的磁盘必须采用NTFS格式,最好分为四个盘符以方便权限管理和数据资源的存储。默认安装的windows2003企业版出于最大安全化考虑是没有安装IIS6.0的服务的,需要手动安装。或者在您安装 windows2003企业版时可以选择你需要的IIS6.0的组件。这样就免去了等一下再需要windows2003企业版安装盘的步骤。

    对于IIS6.0需要提醒的是一定要安装web服务,其他的如FTP、Frontpage等按需要选择,如果不需要尽量不要安装,原则是“最小的服务+最小的权限=最大的安全化。”安装完后千万记得打补丁,包括新出SP1,否则你无法谈安全。

    三、IISWEB配置解决方案了。

    1.为  我的设置如下: 每一个虚拟主机创建一个匿名访问的计算机用户如test.com,并为其设置一个较为复杂的密码,用以控制该虚拟主机的主目录,及IIS匿名访问的用户计算机用户的组是GUESTS组。

    2.为每个IIS的虚拟主机创建一个独立的应用进程池。每个进程池可以设置相关的用户和CUP、连接资源等,也可以采用默认的设置。这里采用默认的设置如。

    3.创建一个主目录(磁盘可以选择D:\Inetpub等非系统盘)如D:\Inetpub\test.com,该目录的访问权限除了继承父权限外,还必须加上第一步中建立的计算机名用户,并付予完全控制的权限,这个计算用户和等一下创建的虚拟主机站点里的匿名用户是同一帐号,并助密码也必须和创建计算机名时的一样。

    4.创建一个www.test.com的虚拟站点,并对该站点进行一些设置:站点选创建一个 ⑴⑴目录安全性下的“身份验证和访问权限”进行编辑,并选择创建好的计算机用户名,设置与访计算机名一至的密码。

    ⑵选择主目录:应用程序池选择第二步创建的创建单独应用进程池,执行权限为纯脚本。

      补充说明:以上是每个虚拟站点的全局设置,对单个虚拟主机不同的配置要求做相应的设置。对于还有索引等的全局设置可以在IIS的网站-属性中设置如日志是否需要,及存放的目录路径,索引文件的先后,及文件的读取权限和其他的错误页面等。我们把这个具体的内容放在安全栏中讲述。

    四、系统安全、全局设置

    1. 最小权限设置:

    1) 选取整个系统盘:

    System:完全控制

    Administrator:完全控制

    (允许将来自父系的可继承性权限传播给对象)

    2) C:\Program Files\Common Files:及C:\Program Files

       Everyone:读取及运行 列出文件目录 读取

     (允许将来自父系的可继承性权限传播给对象)

      3)数据盘\Inetpub\:(按FSO处理)

         只需要system和administrator权限 因为下面的每个目录都有单独的计算     机用户对其自己的目录进行完成控制,不需要系统提供的来宾帐号访问

    (允许将来自父系的可继承性权限传播给对象)

      4) \Winnt\system32:

         选择除Inetsrv和Centsrv以外的所有目录,去除“允许将来自父系的可继承     性权限传播给对象”选框,复制。

    2. 系统管理员权限设置:

    1). 修改管理员帐号和创建陷阱帐号:

    微软一直在强调最好重命名Administrator账号并禁用Guest账号,

       从而实现更高的安全。在Windows Server 2003中,Guest 账号是缺省禁

       用的,但是重命名Administrator账号仍然是必要的,因为黑客往往会从      Administrator账号入手开始进攻。方法是:打开“本地安全设置”对话框,    依次展开“本地策略”→“安全选项”,在右边窗格中有一个“账户:重命     名系统管理员账户”的策略,双击打开它,给Administrator重新设置一个     平淡的用户名。然后新建一个名称为Administrator的陷阱帐号“受限制用     户”,把它的权限设置成最低。

        2) 除修改过的Administrator外,有必要再增加一个属于管理员组的帐号;

         说明:两个管理员组的帐号,一方面防止管理员一旦忘记一个帐号的

          口令还 有一个备用帐号;另方面,一旦黑客攻破一个帐号并更改

          口令,我们还有 有机会重新在短期内取得控制权以防万一。

        3) 给所有用户帐号一个复杂的口令(系统帐号出外),长度最少在8位以上, 且必须同时包含字母、数 字、特殊字符。同时不要使用大家熟悉的单词(如microsoft)、熟悉的键盘顺序(如qwert)、熟悉的数字( 如2000)等。

        4) 在帐号属性中设立锁定次数,比如改帐号失败登录次数超过5次即锁定改帐号。这样可以防止某些大 规模的登录尝试,同时也使管理员对该帐号提高警惕。

      5) 在运行中输入gpedit.msc回车,打开组策略编辑器,选择计算机配置-Windows设置-安全设置-账户策略-账户锁定策略,将账户设为“三次登陆无效”,“锁定时渖栉?0分钟”,“复位锁定计数设为30分钟”。

        6)在安全设置-本地策略-安全选项中将“不显示上次的用户名”设为启用

    3. 安全日志:

    Win2003的默认安装是不开任何安全审核的!

    那么     请你到本地安全策略->审核策略中打开相应的审核,推荐的审核是:

      账户管理 成功 失败

    登录事件 成功 失败

    对象    访问 失败

    策略    更改 成功 失败

    特权    使用 失败

    系统    事件 成功 失败

    目录    服务访问 失败

    账户    登录事件 成功 失败

    审核    项目少的缺点是万一你想看发现没有记录那就一点都没辙;审核项目太多

          不仅会占用系统资源而且会导致 本没空去看,这样就失去了审核的意

          义。 与之相关的是: 在账户策略->密码策略中设定: 密码复杂性要求

          启用 密码长度最小值 6位 强制密码历史 5次

           最长存留期 30天

          在账户策略->账户锁定策略中设定:

          账户锁定 3次错误登录

          锁定时间 20分钟

          复位锁定计数 20分钟

         同样,Terminal Service的安全日志默认也是不开的,我们可以在Terminal      Service Configration(远程服务 配置)-权限-高级中配置安全审核,一般来    说只要记录登录、注销事件就可以了。

    4.修改注册表

    1)、隐藏重要文件/目录

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current-Version \Explorer\Advanced\Folder\Hi-dden\SHOWALL”,鼠标右击“CheckedValue”,选择修改,把数值由1 改为0

    2)、防止SYN洪水攻击

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 新建DWORD值,名为SynAttackProtect,值为2

    3). 禁止响应ICMP路由通告报文

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters \Interfaces\interface新建DWORD值,名为PerformRouterDiscovery 值为0

    4). 防止ICMP重定向报文的攻击

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 将EnableICMPRedirects 值设为0

    5). 不支持IGMP协议

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 新建DWORD值,名为IGMPLevel 值为0

    6)、禁用C$、D$、ADMIN$一类的缺省共享

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters

    7)、禁用IPC连接

    找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa中的restrictanonymous子键,将其值改为1即可禁用IPC连接。

    5.端口开放和共享安全

    1) 删除默认共享

    系统会创建一些隐藏的共享,你可以在cmd下打 net share 查看他们。网上

    有 很多关于IPC入侵的文章,相信大家一定对它不陌生。所以我们要

    禁止或删除这些共享以确保安全,方法是:首先编写如下内容的批处理文

    件:
    @echo off
    net share C$ /del
    net share D$ /del
    net share E$ /del
    net share F$ /del
    net share admin$ /del
    以上批处理内容大家可以根据自己需要修改。保存为delshare.bat,存放到

    系统所在文件夹下的system32\GroupPolicy\User\Scripts\Logon目录下。然后

    在开始菜单→运行中输gpedit.msc,回车即可打开组策略编辑器。点击用户配

    置→Window设置→脚本(登录/注销)→登录,在出现的“登录 属性”窗口中单

    击“添加”,会出现“添加脚本”对话框,在该窗口的“脚本名”栏中输入

    delshare.bat(如图1),然后单击“确定”按钮即可。.

    2)TCP端口筛选

        关闭不需要的端口
    大家都知道,139端口是Netbios使用的端口,在以前的Windows版本中,只要不安装Microsoft网络的文件和打印共享协议,就可关闭139端口。在Windows Server 2003中,只这样做是不行的。如果想彻底关闭139端口,方法如下:

    鼠标右键单击“网络邻居”,选择“属性”,进入“网络和拨号连接”,再用鼠

    标右键单击“本地连接”,选择“属性”,打开“本地连接 属性”页,然后去

    掉“Microsoft网络的文件和打印共享”前面的“√”,接下来选中“Internet协议

    (TCP/IP)”,单击“属性”→“高级”→“WINS”,把“禁用TCP/IP上的NetBIOS”

    选中,即大功告成!这样做还可有效防止SMBCrack之类工具破解和利用网页

    得到我们的NT散列。设置端口过滤。方法如下:选择网卡属性,然后双

    击“Internet协议(TCP/IP)”,在出现的窗口中单击“高级”按钮,会进入“高级

    TCP/IP设置”窗口,接下来选择“选项”标签下的“TCP/IP 筛选”项,点“属性”按

    钮,会来到“TCP/IP 筛选”的窗口,在该窗口的“启用TCP/IP筛选(所有适配

    器)”前面打上“√”,然后根据需要配置就可以了。比方说如果你只打算浏览

    网页,则只开放TCP端口80即可,所以可以在“TCP端口”上方选择“只允许”,

    然后单击“添加”按钮,输入80再单击“确定”即可。如果有其他需要可如法

    炮制。

    5 IIS的全局设置

    1) 删除系统盘下的虚拟目录,如:_vti_bin、IISSamples、Scripts、IIShelp、IISAdmin、IIShelp、MSADC。

    2) 删除IIS影射

    名 路径          限制方法         操作

    .asa C:\WINDOWS\system32\inetsrv\asp.dll GET,HEAD,POST,TRACE del

    .cdx C:\WINDOWS\system32\inetsrv\asp.dll GET,HEAD,POST,TRACE del

    .cer C:\WINDOWS\system32\inetsrv\asp.dll GET,HEAD,POST,TRACE del

    .idc C:\WINDOWS\system32\inetsrv\httpodbc.dll  GET,HEAD,POST,TRACE del

    .stm C:\WINDOWS\system32\inetsrv\ssinc.dll GET,HEAD,POST,TRACE del

    .shtml C:\WINDOWS\system32\inetsrv\ssinc.dll  GET,POST         del

    3) 索引文件:增加并排序

    index.asp index.htm index.html default.asp default.htm default.html

    4) 取消日志记录,有必须开通的户可以设置相应的日志

    5) 连接退制,特定一个数值如:500等

    6) 自定义错误: 虽然自定义错误页很简单,但只有少数管理员有效地利用了它。管理员可以在MMC中将HTTP错误信息映射到服务器上的绝对URL或是某个文件。

    7) 如果还有等补充..........**_**

    6.系统安全和防毒、木马

    1)系统的最大安全莫不在于及时的更新,如果不更新,不论你做得有多好,

    都无法阻当来自微软的漏洞的,所及时更新是架于一切安全之上的,

    windows2003已出了sp1了,这个一个需要打的补订。

    2) 防毒、木马建议安装MacFree,他对防毒、木马还是比一般的要准确的。

    就不多说了各人喜欢。

    7.备份本地的IIS

    本地的IIS备份非常的简单,微软件的IIS自带的备份就可以完全胜任了。

    方法如下打开IIS管理器,并右键该计算机名-所有任务-备份\还原配轩

    如果是备份则:创建――输入备份名称--设置密码(也可以不要,出于安

    全还是需要的)确定就OK了。其目录在C:\WINDOWS\system32

    \inetsrv\MetaBack(系统盘在C下)可以看见您刚才备份的目标文件了

    如果是还原:还原――选择好已有的备份文件――输入密码(如有)-确定生效

    就可以了。

    8.FTP服务的建立

    采用的是Server-U的,没有什么要说的,如果不会请咨询google.com大师吧。

    9.数据库的建立

    数据库一般采用的有access(本机自带的)和MSSQL,把MSSQL安装在其他的

    数据库服务上,以便提高效率在这里不讨论了,你不会这个也放在一起放在

    同一台服务器上吧^_^。

    10.IIS服务的转移(才出现了本作者的心血和本文的重点)

        对于不同计算机上的IIS服务的虚拟主机如何才有效地去转移到其他的计算机名,有人说用上面说的IIS自带的备份吧。不行,我试过了好多闪好多方法,修改了好多的参数结果都是不行的,这条路是行不通了,我就想到了VB脚本了。现在就一步一步来处理,如果你没有理解上面的配置,那么这里可能有些困难了。你还是需要从头先理配置才能有所收获。让我们开始吧。

      1.首先要做的就是把需要转移的IIS服务器(以下用“A”)上的属于guests组的用户进行备份转移到新的IIS服务器(以下称B)服务器上。备份的形式是把计算机名、描述和全称写到一个.txt的文件中,以便恢复时读取

      把下面的脚本保存为 backusers.vbs

    ******************************Start*********************************

    Dim colGroups

    Set colGroups = GetObject("WinNT://" & getComputer() & "/guests,group")

    For Each objUser in colGroups.Members

    Wscript.Echo objUser.Name &"||"& objUser.FullName &"||"& objUser.Description

    Next

    Function getComputer()

    Dim objNet

    Set objNet = CreateObject("WScript.Network")

    getComputer= objNet.ComputerName

    Set objNet = Nothing

    End Function

    **************************Finished**********************************

    执行备份操作只备份的是guests组用户 backupusers.vbs >userback.txt

    2.导出A服务器上的IIS的全局配置,并把结果保存在.txt文件中

    保存以下程序 backupiis.vbs

    *******************************Start******************************

    On Error Resume Next

    Set objIIS = GetObject("IIS://" & getComputer() & "/W3SVC")

    LenComputer = Len(getComputer())+13'记算IISWEBSERVER的长度

    For Each ChildObject in objIIS

    If ChildObject.Class = "IIsWebServer" Then

    Bindings = ChildObject.ServerBindings

    'Wscript.echo Bindings(0)

    ChildObjectName = Replace(ChildObject.AdsPath,Left(ChildObject.AdsPath,LenComputer),"")

    If IsNumberic(ChildObjectName) = True Then

    Set iis_webserver = objIIS.GetObject("IIsWebServer",ChildObjectName)

    Err.clear

    If Err <> 0 Then

    wscript.echo "select "&ChildObjectName&" failure...."

    End If

    Err.clear

    Set iis_visualdir = iis_webserver.GetObject("IIsWebVirtualDir","root")

    If Err<> 0 Then

    wscript.echo "select "&ChildObjectName&" failure....2"

    End If

    If (iis_webserver.ServerComment <> "默认网站") Then

    WebServerBindings = Bindings(0)

    If (Bindings(1)) Then

    WebServerBindings = Bindings(0)&"#"&Bindings(1)

    End If

    If (Bindings(2)) Then

    WebServerBindings = Bindings(0)&"#"&Bindings(1)&"#"&Bindings(2)

    End If

    If (Bindings(3)) Then

    WebServerBindings = Bindings(0)&"#"&Bindings(1)&"#"&Bindings(2)&"#"&Bindings(3)

    End If

    If (Bindings(4)) Then

    WebServerBindings = Bindings(0)&"#"&Bindings(1)&"#"&Bindings(2)&"#"&Bindings(3)&"#"&Bindings(4)

    End If

    If (Bindings(5)) Then

    WebServerBindings = Bindings(0)&"#"&Bindings(1)&"#"&Bindings(2)&"#"&Bindings(3)&"#"&Bindings(4)&"#"&Bindings(5)

    End If

    Wscript.echo WebServerBindings&"||"& iis_webserver.ServerComment &"||"& iis_webserver.ServerAutoStart&"||"&iis_visualdir.AnonymousUserName&"||"&iis_visualdir.AnonymousUserPass&"||"&iis_visualdir.AppPoolId&"||"&iis_visualdir.Path

    End If

    Else

    Wscript.echo "failure...."

    End If

    Else

    End If

    Next

    Set iis_visualdir = Nothing

    Set iis_webserver = Nothing

    Set objIIS = Nothing

    Function getComputer()

    Dim objNet

    Set objNet = CreateObject("WScript.Network")

    getComputer= objNet.ComputerName

    Set objNet = Nothing

    End Function

    ********************************End********************************

    执行backupiis.vbs >backupiis.txt

    3.备份A服务器上的计算机用户、IIS虚拟主机后就可以把.txt文件复制到B服务器上去,并通过几下脚本进行

    导入了先导入计算机用户名:

    保存以下脚本为 createusers.vbs

    ********************************Start*****************************

    Const ForReading = 1,ForWriting = 2, ForApplying = 8

    dim fso,f,msg

    Dim strComputer,user_password,GroupName

    user_password = "**********"

    GroupName = "Guests"

    Set fso = CreateObject("Scripting.FileSystemObject")

    set f = fso.OpenTextFile("C:\Inetpub\tms-bbs.com\backupuser.txt",ForReading)

    Do until f.AtEndOfStream

    strLine = f.readline

    userAttribute = Split(strLine,"||",-1)

    userComputer = userAttribute(0)

    userInfo = userAttribute(1)

    userDescription = userAttribute(2)

    AddUser getComputer(),userComputer,user_password,userInfo,userDescription,GroupName

    Wscript.echo vblf

    loop

    f.close

    Function AddUser(Computer,UserName,PassWord,FullName,Info,GroupName)

    DIM intReturn,FsObject

    On Error Resume Next

    '执行创建帐号命令

    Set ComputerAccoutObj = GetObject("WinNT://"&Computer&"/"&UserName&",user")

    if Err.number=0 then

    Wscript.echo UserName&"计算机用户已存在...."

    Else

    Set ComputerObj = GetObject("WinNT://"&Computer)

    Set NewUser = ComputerObj.Create( "User" , UserName )

    NewUser.SetInfo

    '进行帐号设置

    NewUser.SetPassword ( PassWord ) '帐号密码

    NewUser.FullName = FullName '帐号全名

    NewUser.Description = Info '帐号说明

    NewUser.UserFlags = &H10000 xor &H0040 '&H20000(使用者下次登入时须变更密码) &H0040(使用者不得变更密码) &H10000(密码永久正确) &H0002(帐户暂时停用)

    NewUser.SetInfo

    Wscript.echo "帐号"&UserName&"创建成功!"

    Set objSeLectGroup = GetObject("WinNT://" & Computer & "/Guests,group")

    Set objAddUser = GetObject("WinNT://" & Computer & "/" & UserName &",user")

    objSeLectGroup.Add(objAddUser.ADsPath)

    End if

    Set ComputerObj=nothing

    Set ComputerAccoutObj = nothing

    Set ComputerAccoutGroupObj = nothing

    End Function

    Function getComputer()

    Dim objNet

    Set objNet = CreateObject("WScript.Network")

    getComputer= objNet.ComputerName

    Set objNet = Nothing

    End Function

    ************************************End****************************

    执行createusers.vbs(注意把刚才导出来的计算机用户信息放在程序中指定的

    位置)程序自动开始创建计算机用户名:

    4.最后是导入A服务器上的虚拟主机到B服务器上。

    脚本如下:(该脚本用到了一个xcacls的修改NTFS权限的小程序,您可以从微

    软官方网站下载,你也可以访问

    http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/xcacls-o.asp

    下载安装既可。)

    保存为createwebsite.vbs

    *****************************Start*********************************

      Const ForReading = 1,ForWriting = 2, ForApplying = 8

    Dim SiteNum,IPAddr,PortNum,fso,f,msg,LenComputer,BuildNum

    Dim strComputer,user_password,GroupName,tmpFolder

    user_password = "***********"

    GroupName = "Guests"

    IPAddr = ""

    tmpFolder = "C:\inetpub\"

    LenComputer = Len(getComputer())+1

    BuildNum = 1

    'PortNum = "80"

    Set fso = CreateObject("Scripting.FileSystemObject")

    set f = fso.OpenTextFile("C:\Inetpub\AdminScripts\iiswebback.txt",ForReading)

    Do until f.AtEndOfStream

    strLine = f.readline

    IIsWebVirtualDirAttribute = Split(strLine,"||",-1)

    WebServerBingings = IIsWebVirtualDirAttribute(0)

    WebServerComment = IIsWebVirtualDirAttribute(1)

    WebServerAutoStart = IIsWebVirtualDirAttribute(2)

    WebAnonymousUserName = IIsWebVirtualDirAttribute(3)

    WebAnonymousUserPass = IIsWebVirtualDirAttribute(4)

    WebAppPoolId = IIsWebVirtualDirAttribute(5)

    WebPath = IIsWebVirtualDirAttribute(6)

    SeveralBindings = Split(WebServerBingings,"#",-1)

    UserNameComp = Replace(WebAnonymousUserName,Left(WebAnonymousUserName,LenComputer),"")

    '检测是否存在该用户的计算机帐号

    If Not checkUser(UserNameComp) Then

    '添加该计算机用户帐号

    AddUser getComputer(),UserNameComp,user_password,WebServerComment,WebServerComment,GroupName

    Else

    Wscript.echo "该计算机用户名也存在.............."

    End If

    '创建用户主目录

    CreateFileDirectory(WebPath)

    '修改用户主目录的访问权限

    SetNTFSDirectoryPerssion(UserNameComp)

    '创建应用进程池

    createAppPool WebServerComment,GuestUserName,GuestUserPass

    '创建虚拟主机站点

    CreateWebSite getComputer(),IPAddr,SeveralBindings(0),WebPath,LogDirectory,WebServerComment,WebAnonymousUserName,WebAnonymousUserPass,WebServerAutoStart

    BuildNum = BuildNum+1

    Wscript.echo "=============================================="&BuildNum&"============================================="

    Loop

    f.close

    Set fso = Nothing

    '为每个IIS虚拟主机应用程序站点创建站点应用程序池

    Function createAppPool(strName, strUser, strPass)

    On Error Resume Next

    Err.Clear

    'If Not checkUser(strUser) Then

    'createAppPool = false

    'Wscript.echo"应用程序"&strName&"无法创建!"

    'Exit Function

    'End If

    Set ObjAppPoolsExist = GetObject("IIS://"&getComputer()&"/W3SVC/AppPools"&strName)

    If Err.number = 0 Then

    wscript.echo "该应用进程池已创建............."

    Set ObjAppPoolsExist = Nothing

    Exit Function

    Else

    Set objAppPools = GetObject("IIS://" & getComputer() & "/W3SVC/AppPools")

    Err.Clear

    Set objAppPool = objAppPools.Create("IIsApplicationPool", strName)

    If err.number = 0 Then

    objAppPool.AppPoolIdentityType = 2 'runs as NT AUTHORITY\NETWORK 3 Run as specific user account 1 runs as NT AUTHORITY\LOCAL SERVICE 0 runs as NT AUTHORITY\SYSTEM

    'objAppPool.WAMUserName = strUser

    'objAppPool.WAMUserPass = strPass

    objAppPool.SetInfo

    If err.Number = 0 Then

    createAppPool = true

    Wscript.echo"应用程序"&strName&"创建成功!"

    Else

    createAppPool = false

    Wscript.echo"应用程序"&strName&"创建失败!"

    End If

    Else

    createAppPool = false

    End If

    End If

    Set objAppPool = Nothing

    Set objAppPools = Nothing

    Set ObjAppPoolsExist = Nothing

    End Function

    Function CreateWebSite(strComputer,IPAddr,WebServerBingings,WebSiteDirectory,LogDirectory,WebSiteInfo,GuestUserName,GuestUserPass,StartOrStop)

    Dim w3svc, WebServer, NewWebServer, NewDir

    Dim Bindings, BindingString, NewBindings, SiteNum, SiteObj, bDone

    On Error Resume Next

    Err.Clear

    '检测是否能够加载W3SVC服务(即WEB服务)

    Set w3svc = GetObject("IIS://" & getComputer() & "/w3svc")

    If Err.Number <> 0 Then '显示错误提示

    Wscript.echo "无法打开: "&"IIS://" & getComputer() & "/w3svc"

    Exit Function

    End If

    '检测是否有设定相同IP地址、端口及主机名的站点存在

    If(IsArray(WebServerBingings)) Then

    BindingString = WebServerBingings

    Else

    BindingString = Split(WebServerBingings,"#",-1)

    End If

    'BindingString = IPAddr & WebServerBingings

    'For Each WebServer in w3svc

    ' If WebServer.Class = "IIsWebServer" Then

    ' Bindings = WebServer.ServerBindings

    ' If BindingString = Bindings(0) Then

    ' Wscript.echo "虚拟主机:" & HostName & ",已存在,无法创建......!."

    ' Exit Function

    ' End If

    ' End If

    'Next

    '确定一个不存在的站点编号做为新建站点编号,系统默认WebSite站点编号为1,因此从2开始

    SiteNum=2

    bDone = False

    While (Not bDone)

    Err.Clear

    Set SiteObj = GetObject("IIS://"&getComputer()&"/w3svc/"&SiteNum) '加载指定站点

    If (Err.Number = 0) Then

    'Wscript.echo " Step_1站点"&SiteNum&"存在"

    SiteNum = SiteNum + 1

    Else

    'Wscript.echo " Step_1站点"&SiteNum&"不存在"

    Err.Clear

    Set NewWebServer = w3svc.Create("IIsWebServer",SiteNum) '创建指定站点

    If (Err.Number <> 0) Then

    Wscript.echo SiteNum&"创建失败"

    SiteNum = SiteNum + 1

    Else

    Wscript.echo SiteNum&"创建成功"

    bDone = True

    End If

    End If

    If (SiteNum > 1000) Then '服务器最大创建站点数

    Wscript.echo "超出服务器最大创建站点数,正在创建的站点的序号为: "&SiteNum&"."

    Exit Function

    End If

    Wend

    '进行站点基本配置

    NewWebServer.ServerBindings = BindingString

    NewWebServer.ServerComment= WebSiteInfo

    NewWebServer.AnonymousUserName= GuestUserName

    NewWebServer.AnonymousUserPass= GuestUserPass

    NewWebServer.KeyType = "IIsWebServer"

    NewWebServer.FrontPageWeb = True

    NewWebServer.EnableDefaultDoc = True

    NewWebServer.DefaultDoc = "Default.htm, Default.asp, Index.htm, Index.asp,index.html,default.html"

    NewWebServer.LogFileDirectory= LogDirectory

    NewWebServer.SetInfo

    Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT")

    NewDir.Path = WebSiteDirectory

    NewDir.AccessRead = true

    NewDir.AppFriendlyName = WebSiteInfo

    NewDir.AppCreate True

    NewDir.AccessScript = True

    NewDir.AuthNTLM = True

    NewDir.AppIsolated = "2"

    NewDir.AppPoolId = WebSiteInfo

    'NewDir.AppCreate3 2,WebSiteInfo,false

    NewDir.AuthFlags = "AuthAnonymous | AuthNTLM" '集成windows身份验证

    Err.Clear

    NewDir.SetInfo

    If (Err.Number <> 0) Then

    Wscript.echo "主目录创建时出错."

    Exit Function

    End If

    If StartOrStop = True Then

    Err.Clear

    Set NewWebServer = GetObject("IIS://" & getComputer() & "/w3svc/" & SiteNum)

    NewWebServer.Start

    If Err.Number <> 0 Then

    Wscript.echo "启动站点时出错!"

    Err.Clear

    End If

    End If

    Wscript.echo "站点创建成功,站点编号为:"& SiteNum &" ,域名为:"& WebServerBingings

    'SetCPULimitVar strComputer,SiteNum,100 '调用CPU最大使用程度

    End Function

    Function getComputer()

    Dim objNet

    Set objNet = CreateObject("WScript.Network")

    getComputer= objNet.ComputerName

    Set objNet = Nothing

    End Function

    Function CreateFileDirectory(UserName)

    Set FsObject = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next

    Err.Clear

    If Not FsObject.FolderExists(UserName) Then

    FsObject.CreateFolder(UserName)

    If Err.number<>0 Then

    Wscript.echo "创建目录" & UserName & "失败!"

    Else

    Wscript.echo "创建目录" & UserName & "成功!"

    END if

    Else

    Wscript.echo"目录" & UserName & "已存在,您不能创建!"

    End if

    Set FsObject = Nothing

    End Function

    Function SetNTFSDirectoryPerssion(sourceDirectory)

    Dim WshShell,oExec

    Dim exeDirectory

    exeDirectory = "C:\Program Files\Resource Kit\xcacls.exe C:\Inetpub\"

    Orders_exec = exeDirectory&sourceDirectory&" /E /T /G "&sourceDirectory&":F;F"

    Set WshShell = CreateObject("WScript.Shell")

    Set oExec = WshShell.Exec(Orders_exec)

    If oExec.status = 0 Then

    Wscript.echo " 命令成功执行!"

    Else

    Wscript.echo " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"

    End If

    Set WshShell= Nothing

    End Function

    Function checkUSer(strUser)

    On Error Resume Next

    'Check if domain is already part of username passed to function

    If instr(strUser,"\") = 0 then

    Set objGrp = GetObject("WinNT://" & getComputer() & "/" & strUser & ",user")

    Else

    Set objGrp = GetObject("WinNT://" & replace(strUser,"\","/") & ",user")

    End If

    If err.number = 0 Then

    checkUSer = true

    Else

    checkUSer = false

    End If

    Set objGrp = Nothing

    On Error Goto 0

    End Function

    Function AddUser(Computer,UserName,PassWord,FullName,Info,GroupName)

    DIM intReturn,FsObject

    On Error Resume Next

    '执行创建帐号命令

    Set ComputerAccoutObj = GetObject("WinNT://"&getComputer()&"/"&UserName&",user")

    if Err.number=0 then

    Wscript.echo UserName&"计算机用户已存在...."

    Else

    Set ComputerObj = GetObject("WinNT://"&getComputer())

    Set NewUser = ComputerObj.Create( "User" , UserName )

    NewUser.SetInfo

    '进行帐号设置

    NewUser.SetPassword ( PassWord ) '帐号密码

    NewUser.FullName = FullName '帐号全名

    NewUser.Description = Info '帐号说明

    NewUser.UserFlags = &H10000 xor &H0040 '&H20000(使用者下次登入时须变更密码) &H0040(使用者不得变更密码) &H10000(密码永久正确) &H0002(帐户暂时停用)

    NewUser.SetInfo

    Wscript.echo "帐号"&UserName&"创建成功!"

    Set objSeLectGroup = GetObject("WinNT://" & getComputer() & "/Guests,group")

    Set objAddUser = GetObject("WinNT://" & getComputer() & "/" & UserName &",user")

    objSeLectGroup.Add(objAddUser.ADsPath)

    End if

    Set ComputerObj=nothing

    Set ComputerAccoutObj = nothing

    Set ComputerAccoutGroupObj = nothing

    End Function

    *****************************End*********************************

    到此全部完成了。上述设置还是有很多的遗漏和不足之处,如有请通知我修正我们为这个方案暂定

    为 jacksonluoIIS解决方案1.0版吧。

    附录(一)

    看了这么多,只是备份,那我每次开IIS服务器要这么繁琐的,太花时间了,用ASP又搞不定,怎以办,不用急,我有脚本带您方便的一个脚本就可以让您完成以上建立计算机用户名、计算机主目录,创建应用进程池和虚拟主机

    保存为createsiglewebsite.vbs

    *****************************Start********************************

    Const ForReading = 1,ForWriting = 2, ForApplying = 8

    Dim fso,f

    Dim SiteNum,IPAddr,PortNum,LenComputer,WebServerComment,LogDirectory

    Dim user_password,GroupName,tmpFolder,UserNameComp,WebServerAutoStart

    Dim WebAnonymousUserName

    WebServerComment="XXXXXXXXXXXXXX"

    UserNameComp="tof.cc"

    HostName = ":80:www.xxxxx.cc#:80:www.xxxxxx.com"

    WebAnonymousUserName = getComputer()&"\"&UserNameComp

    user_password = "***********"

    GroupName = "Guests"

    IPAddr = ""

    tmpFolder = "C:\inetpub\"&UserNameComp

    LenComputer = Len(getComputer())+1

    PortNum = "80"

    WebServerAutoStart = "true"

    LogDirectory = ""

    Set fso = CreateObject("Scripting.FileSystemObject")

    set f = fso.OpenTextFile("C:\Inetpub\AdminScripts\backiislogfile.txt",ForApplying,true)

    '检测是否存在该用户的计算机帐号

    If Not checkUser(UserNameComp) Then

    '添加该计算机用户帐号

    AddUser getComputer(),UserNameComp,user_password,WebServerComment,WebServerComment,GroupName

    Else

    Wscript.echo UserNameComp&"该计算机用户名也存在.............."

    f.Write UserNameComp&"该计算机用户名已存在.............."&vbCrLf

    End If

    '创建用户主目录

    CreateFileDirectory(tmpFolder)

    '修改用户主目录的访问权限

    SetNTFSDirectoryPerssion(UserNameComp)

    '创建应用进程池

    createAppPool WebServerComment

    '创建虚拟主机站点

    CreateWebSite getComputer(),IPAddr,HostName,tmpFolder,LogDirectory,WebServerComment,UserNameComp,user_password,WebServerAutoStart

    'BuildNum = BuildNum+1

    'Wscript.echo "=============================================="&BuildNum&"============================================="

    '为每个IIS虚拟主机应用程序站点创建站点应用程序池

    f.close

    Set fso=nothing

    Function createAppPool(strName)

    On Error Resume Next

    Err.Clear

    Set ObjAppPoolsExist = GetObject("IIS://"&getComputer()&"/W3SVC/AppPools"&strName)

    If Err.number = 0 Then

    wscript.echo "该应用进程池已创建............."

    Set ObjAppPoolsExist = Nothing

    Exit Function

    Else

    Set objAppPools = GetObject("IIS://" & getComputer() & "/W3SVC/AppPools")

    Err.Clear

    Set objAppPool = objAppPools.Create("IIsApplicationPool", strName)

    If err.number = 0 Then

    objAppPool.AppPoolIdentityType = 2 'runs as NT AUTHORITY\NETWORK 3 Run as specific user account 1 runs as NT AUTHORITY\LOCAL SERVICE 0 runs as NT AUTHORITY\SYSTEM

    objAppPool.SetInfo

    If err.Number = 0 Then

    createAppPool = true

    Wscript.echo"应用程序"&strName&"创建成功!"

    Else

    createAppPool = false

    Wscript.echo"应用程序"&strName&"创建失败!"

    f.Write "应用程序"&strName&"创建失败!"

    End If

    Else

    createAppPool = false

    End If

    End If

    Set objAppPool = Nothing

    Set objAppPools = Nothing

    Set ObjAppPoolsExist = Nothing

    End Function

    Function CreateWebSite(strComputer,IPAddr,WebServerBingings,WebSiteDirectory,LogDirectory,WebSiteInfo,GuestUserName,GuestUserPass,StartOrStop)

    Dim w3svc, WebServer, NewWebServer, NewDir

    Dim Bindings, BindingString, NewBindings, SiteNum, SiteObj, bDone

    On Error Resume Next

    Err.Clear

    '检测是否能够加载W3SVC服务(即WEB服务)

    Set w3svc = GetObject("IIS://" & getComputer() & "/w3svc")

    If Err.Number <> 0 Then '显示错误提示

    Wscript.echo "无法打开: "&"IIS://" & getComputer() & "/w3svc"

    Exit Function

    End If

    '检测是否有设定相同IP地址、端口及主机名的站点存在

    If(IsArray(WebServerBingings)) Then

    BindingString = WebServerBingings

    Else

    BindingString = Split(WebServerBingings,"#",-1)

    End If

    'BindingString = Array(0)

    'BindingString = WebServerBingings

    For Each WebServer in w3svc

    If WebServer.Class = "IIsWebServer" Then

    Bindings = WebServer.ServerBindings

    If BindingString(0) = Bindings(0) Then

    Wscript.echo "虚拟主机:" & HostName & ",已存在,无法创建......!."

    f.Write "虚拟主机:" & HostName & ",已存在,无法创建......!."

    Exit Function

    End If

    End If

    Next

    '确定一个不存在的站点编号做为新建站点编号,系统默认WebSite站点编号为1,因此从2开始

    SiteNum=2

    bDone = False

    While (Not bDone)

    Err.Clear

    Set SiteObj = GetObject("IIS://"&getComputer()&"/w3svc/"&SiteNum) '加载指定站点

    If (Err.Number = 0) Then

    'Wscript.echo " Step_1站点"&SiteNum&"存在"

    SiteNum = SiteNum + 1

    Else

    'Wscript.echo " Step_1站点"&SiteNum&"不存在"

    Err.Clear

    Set NewWebServer = w3svc.Create("IIsWebServer",SiteNum) '创建指定站点

    If (Err.Number <> 0) Then

    Wscript.echo SiteNum&"创建失败"

    f.write SiteNum&"创建失败"

    SiteNum = SiteNum + 1

    Else

    Wscript.echo SiteNum&"创建成功"

    bDone = True

    End If

    End If

    If (SiteNum > 1000) Then '服务器最大创建站点数

    Wscript.echo "超出服务器最大创建站点数,正在创建的站点的序号为: "&SiteNum&"."

    f.write "超出服务器最大创建站点数,正在创建的站点的序号为: "&SiteNum&"."

    Exit Function

    End If

    Wend

    '进行站点基本配置

    NewWebServer.ServerBindings = BindingString

    'NewWebServer.ServerBindings = ":80:www.tof.cc:80:www.yomolight.com"

    NewWebServer.ServerComment= WebServerComment

    NewWebServer.AnonymousUserName= GuestUserName

    NewWebServer.AnonymousUserPass= GuestUserPass

    NewWebServer.KeyType = "IIsWebServer"

    NewWebServer.FrontPageWeb = True

    NewWebServer.EnableDefaultDoc = True

    NewWebServer.DefaultDoc = "Default.htm, Default.asp, Index.htm, Index.asp,index.html,default.html"

    NewWebServer.LogFileDirectory= LogDirectory

    NewWebServer.SetInfo

    Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT")

    NewDir.Path = WebSiteDirectory

    NewDir.AccessRead = true

    NewDir.AppFriendlyName = WebServerComment

    NewDir.AppCreate True

    NewDir.AccessScript = True

    NewDir.AuthNTLM = True

    NewDir.AppIsolated = "2"

    NewDir.AppPoolId = WebServerComment

    'NewDir.AppCreate3 2,WebSiteInfo,false

    NewDir.AuthFlags = "AuthAnonymous | AuthNTLM" '集成windows身份验证

    Err.Clear

    NewDir.SetInfo

    If (Err.Number <> 0) Then

    Wscript.echo "主目录创建时出错."

    Exit Function

    End If

    If StartOrStop = True Then

    Err.Clear

    Set NewWebServer = GetObject("IIS://" & getComputer() & "/w3svc/" & SiteNum)

    NewWebServer.Start

    If Err.Number <> 0 Then

    Wscript.echo "启动站点时出错!"

    Err.Clear

    End If

    End If

    Wscript.echo "站点创建成功,站点编号为:"& SiteNum &" ,域名为:"& WebServerBingings

    'SetCPULimitVar strComputer,SiteNum,100 '调用CPU最大使用程度

    End Function

    Function getComputer()

    Dim objNet

    Set objNet = CreateObject("WScript.Network")

    getComputer= objNet.ComputerName

    Set objNet = Nothing

    End Function

    Function CreateFileDirectory(UserName)

    Set FsObject = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next

    Err.Clear

    If Not FsObject.FolderExists(UserName) Then

    FsObject.CreateFolder(UserName)

    If Err.number<>0 Then

    Wscript.echo "创建目录" & UserName & "失败!"

    f.write "创建目录" & UserName & "失败!"

    Else

    Wscript.echo "创建目录" & UserName & "成功!"

    END if

    Else

    Wscript.echo"目录" & UserName & "已存在,您不能创建!"

    End if

    Set FsObject = Nothing

    End Function

    Function SetNTFSDirectoryPerssion(sourceDirectory)

    Dim WshShell,oExec

    Dim exeDirectory

    exeDirectory = "C:\Program Files\Resource Kit\xcacls.exe D:\Inetpub\"

    Orders_exec = exeDirectory&sourceDirectory&" /E /T /G "&sourceDirectory&":F;F"

    Set WshShell = CreateObject("WScript.Shell")

    Set oExec = WshShell.Exec(Orders_exec)

    If oExec.status = 0 Then

    Wscript.echo " 命令成功执行!"

    Else

    Wscript.echo " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"

    f.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"

    End If

    Set WshShell= Nothing

    End Function

    Function checkUSer(strUser)

    On Error Resume Next

    'Check if domain is already part of username passed to function

    If instr(strUser,"\") = 0 then

    Set objGrp = GetObject("WinNT://" & getComputer() & "/" & strUser & ",user")

    Else

    Set objGrp = GetObject("WinNT://" & replace(strUser,"\","/") & ",user")

    End If

    If err.number = 0 Then

    checkUSer = true

    Else

    checkUSer = false

    End If

    Set objGrp = Nothing

    On Error Goto 0

    End Function

    Function AddUser(Computer,UserName,PassWord,FullName,Info,GroupName)

    DIM intReturn,FsObject

    On Error Resume Next

    '执行创建帐号命令

    Set ComputerAccoutObj = GetObject("WinNT://"&getComputer()&"/"&UserName&",user")

    if Err.number=0 then

    Wscript.echo UserName&"计算机用户已存在...."

    Else

    Set ComputerObj = GetObject("WinNT://"&getComputer())

    Set NewUser = ComputerObj.Create( "User" , UserName )

    NewUser.SetInfo

    '进行帐号设置

    NewUser.SetPassword ( PassWord ) '帐号密码

    NewUser.FullName = FullName '帐号全名

    NewUser.Description = Info '帐号说明

    NewUser.UserFlags = &H10000 xor &H0040 '&H20000(使用者下次登入时须变更密码) &H0040(使用者不得变更密码) &H10000(密码永久正确) &H0002(帐户暂时停用)

    NewUser.SetInfo

    Wscript.echo "帐号"&UserName&"创建成功!"

    Set objSeLectGroup = GetObject("WinNT://" & getComputer() & "/Guests,group")

    Set objAddUser = GetObject("WinNT://" & getComputer() & "/" & UserName &",user")

    objSeLectGroup.Add(objAddUser.ADsPath)

    End if

    Set ComputerObj=nothing

    Set ComputerAccoutObj = nothing

    Set ComputerAccoutGroupObj = nothing

    End Function

    *****************************End********************************

    您只需要把

    WebServerComment="XXXXXXXXXXXXXX"  '计算机描述、全名等

    UserNameComp="tof.cc" '虚拟主机域名

    HostName = ":80:www.xxxxx.cc#:80:www.xxxxxx.com" 虚拟主机主机头,可以有好多个的几个变量修改成你需要创建的信息就可以了。

    大功告成^_^

    附录(二)

    网站数据的备份:

    服务器的又一个重点注意就是数据备份了,您不能保证你的数据完整无

    缺,也不能保证你的服务器永远不备人入侵或硬件故障,那么您的就需要

    服务器数据备份了。在windows下备份几十个G或者100G甚至更多的时候,

    大多人选择的是高性能的专业商务软件来备份,不过我们穷,买不起啊,

    我们就选择其他的吧。在windows下我用过一个Second Copy的软件,

    功能还可以,想了解一下点击这里吧,但是美中不足啊,从选端的FTP.

    备份过来好像有点问题。不知道后面的版本有没有解决方法。但是我这里

    主要不是要讲Second Copy的我要讲的是用rsync.exe这个Linux/Unix下的自

    由软件哦。有人说,Linux/Unix下的自由软件能在windows下用的吗?可以

    让我们去尝试一下吧要windows下使用类Linux/Unix操作系统有好几个解决

    方案,但我这里选中的是cygwin。这个软件也是免费的,可以点这里了解

    下载setup.exe的cygwin的安装程序,安装过程很简单的:

    首先到http://www.cygwin.com下载setup.exe,接着建立安装目录,

    如 X:\cygwin,将setup.exe放到此目录,

    点击运行,Next->

    选Install from Internet,Next->

    填写Root Directory,如X:\cygwin,Next->

    填写Local Package Directory,如X:\cygwin\ftp,Next->

    选Direct Connection,Next->

    选一个较快的ftp,Next->

    到了关键步骤,如果仅想安装基本系统,直接Next;如果想完整安装,则点

    击All旁边的旋转状图标,将Default切换至Install;如果和我一样,仅想在命令

    行下写写程序,则只要将 gcc、make等开发工具选上,还有openssh等;选

    好后,Next->

    开始下载,Take a coffee break。回来后,Next->

    选择需不需要创建快捷方式。->END

    点击快捷方式或X:\cygwin\cygwin.bat打开控制台,如果是域用户,按照提示makepasswd和makegroup即可。

    说明:如果你的空间足够,还是建议先下载再安装,就是选择的时候只选下载,能后再双击setup.exe安装。

    这第避免下次再下载,或者你可以按上述的方法也可以直接把下载的考到其他的地方保存既可。

    有关的Linux/Unix操作我们就不多说了。

    在rsync的服务器端配置文件如下:

    $vi /etc/rsyncd.conf

    uid=root

    gid=root

    max connections=4 '最大连接设为4

    use chroot=no

    log file=/var/log/rsyncd.log

    pid file=/var/run/rsyncd.pid

    lock file=/var/run/rsyncd.lock

    [Inetpub]      '模块名

    path=/cgydrive/d/Inetpub '需要备份的目录 /cygdrive是在windows下的本地目录

    comment = backup firewall3 config  '备注

    ignore errors           '忽略错误

    read only = yes '文件只读

    list = no

    auth users = usersiis       '客户端的验证用户名

    secrets file=/etc/rsyncd.pwd     '客户端的验证密码

    保存退出

    把密码写入到/etc/rsyncd.pwd文件中如

    $ echo " usersiis:iissceret" >/etc/rsyncd.pwd

    $rsync --daemon启动打开的端口默认为873,你可以查看相应的服务是否启动了,如果没有则你需要检测一下并学习一下rsync的配置和用法。

    客户端如下:

    rsync.exe -vzrgopgl --progress --password-file=/etc/rsyncd.sert Inetpub@B::inetpub /cygdrive/d/inetpub

    其中/etc/rsyncd.sert是客户端的密码(只需要密码,不需要用户名)

    B为上面的需要备份的服务器

    /cygdrive/d/inetpub是本地数据的存放目录

    执行成功了就算是OK了。

    致于您的备份策选择什么时候或者多久那就自己可以考虑了。

  • 相关阅读:
    postgreSQL 时间线
    Using CSV-Format Log Output
    Understanding postgresql.conf : log*
    UNDERSTANDING POSTGRESQL.CONF: CHECKPOINT_SEGMENTS, CHECKPOINT_TIMEOUT, CHECKPOINT_WARNING
    PgSQL · 追根究底 · WAL日志空间的意外增长
    caffe源码学习
    Git 常用命令学习
    Linux系统的目录结构
    NMS 原理 了解
    nvidia-smi 查看GPU信息字段解读
  • 原文地址:https://www.cnblogs.com/hjtdlx/p/2245765.html
Copyright © 2020-2023  润新知