网站运营
位置:首页>> 网站运营>> 无损迁移IIS数据方法(含匿名帐号,ntfs,acl,用户同步)(2)

无损迁移IIS数据方法(含匿名帐号,ntfs,acl,用户同步)(2)

作者:debiangrub 来源:经典论坛 发布时间:2010-01-30 13:45:00 

标签:iis,数据,备份,同步,迁移

三.目标服务器IIS预配置

复制前面生成的userlist.csv和批处理文件放同个目录

md d:\freehost
for /f "tokens=2* delims==" %%b in ('wmic group where name^="IIS_WPG" get SID /value^|findstr /i "sid="') do (set WPG=%%b)
echo y|cacls.exe d:\freehost /c /s:D:(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FR;;;%WPG%)
net localgroup freehost /add
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do md d:\freehost\%%i\web
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do md d:\freehost\%%i\db
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do md d:\freehost\%%i\log
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do net user %%i %%j /add /expires:never /passwordchg:no /times:all
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do net localgroup freehost /add %%i
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do net localgroup users /delete %%i
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do setacl.bat %%i

1.上面的命令会自动预建立d:\freehost为网站主目录.并只给iis_wpg组只读权限
(用于运行asp.net,php一类的程序.如果只运行asp.可以省去.)
2.增加freehost用户组,把userlist.csv中的用户建立并加入freehost组.这样做是便于管理.对freehost组进行组策略安全限制即可.
3.预建立用户文件星外的目录结构是
d:\freehost
d:\freehost\web
d:\freehost\log
d:\freehost\db
如果是其他的虚拟主机软件按照规则修改上面的路径即可.
prima是域名点号换下划线生成比如www.baidu.com的文件就是baidu_com
d:\baidu_com
d:\baidu_com\htdoc
d:\baidu_com\database
d:\baidu_com\weblog
文件名不一样,稍作改动即可.

最后一行,是为各目录设置权限
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do setacl.bat %%i内容如下


for /f "tokens=2* delims==" %%a in ('wmic useraccount where name^="%1" get SID /value^|findstr /i "sid="') do (set uSID=%%a)
for /f "tokens=2* delims==" %%b in ('wmic group where name^="IIS_WPG" get SID /value^|findstr /i "sid="') do (set uWPG=%%b)
echo y|cacls.exe d:\freehost\%1 /c /s:D:AI(A;;FR;;;%uSID%)(A;OICIIO;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo y|cacls.exe d:\freehost\%1\db /c /t /s:D:AI(D;;SD;;;%uSID%)(A;;0x17019f;;;%uSID%)(A;OICIIO;SDWDGWGR;;;%uSID%)(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo y|cacls.exe d:\freehost\%1\log /c /t /s:D:AI(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo y|cacls.exe d:\freehost\%1\web /c /t /s:D:AI(D;;SD;;;%uSID%)(A;;0x17019f;;;%uSID%)(A;OICIIO;SDWDGWGR;;;%uSID%)(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)


操作的内容是将外部变量用户名传入使用wmic管理命令查出用户名在本机的sid值.因为sid是唯一的(当然用黑客手段也可以让他不唯一,微软bug),即使是两台服务器上相同的用户名,或者在同一台服务器上建立一个用户名删除再建立相同名称的sid也不一样.所以不论重装系统后还是换过服务器都需要用上面批处理重设ntfs权限.

使用的ntfs权限是ace,sddl格式.
因为权限项较多,说起来复杂就不一一说明.大约意思就是将各个用户主目录隔离开,对web目录允许脚本执行,log,db仅能html.防止webshell跨站.


首先到目标服务器上还原iis配置.自然目标服务器上的iis要安装好,如果原服务器有iisftp也需要把ftp安装好

copy /y iismove.SC0 C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0
copy /y iismove.MD0 C:\WINDOWS\system32\inetsrv\MetaBack\iismove.MD0
del iismove.SC0
del iismove.MD0
iisback.vbs  /restore /b iismove  /e iismove  /v 0
进行IIS还原.

注意事项:如果有asp.net,isapi_rewrite重写组件,华盾等基于iisfilter的组件,也须要先安装上.不然会因为找不到这些过滤器,会在事件管理器找到大量的错误iis始终是server unavailable.

做到这里,目标IIS差不多已经恢复了,打开html已经正常.
但是运行asp asp.net 一类的程序会被告知401 acl拒绝.因为iis里面的密码没有被同步.

四.最后来做iis匿名访问密码同步.


先导出iis中站点的节点ID编号对照表.

更新W3ID批量表.bat

del  c:\sitelisttemp.txt
iisweb/query>c:\sitelisttemp.txt



rem 更新W3ID批量表.bat
for /f "delims=, tokens=1,2" %%i in (userlist.CSV) do chageuserpass.bat %%i %%j


chageuserpass.bat

net user %1 %2
type c:\sitelisttemp.txt|grep "^%1."|cut -d"(" -f2|cut -d")" -f1>c:\W3IDtemp.txt
set /p W3ID=<c:\W3IDtemp.txt
adsutil.vbs set %W3ID%/AnonymousUserName %1
adsutil.vbs set %W3ID%/AnonymousUserPass %2

因为windows下批处理处理字符的功能太弱要嵌套太多for命令.怕大家看得头晕.这里借用了linux两个命令.
grep和cut.去网上找到http://unxutils.sourceforge.net/UnxUtils.zip解压把里面这两个文件复制c:\windows\system32中即可.
假如你实在找不到这两个文件.用windows下for批处理也是可以的.只是略嫌麻烦.



开始运行iisreset /timout:0
对iis进行重启,然后开始
大功告成了.http://www.reynaldliu.net

0
投稿

猜你喜欢

手机版 网站运营 asp之家 www.aspxhome.com