首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 应用服务器 >

罗兰德制造无损迁移IIS(含匿名帐号,ntfs,acl,用户同步)解决办法

2012-02-06 
罗兰德制造无损迁移IIS(含匿名帐号,ntfs,acl,用户同步)windows下迁移网站确实不如linux下这么方便.迁移一

罗兰德制造无损迁移IIS(含匿名帐号,ntfs,acl,用户同步)
windows下迁移网站确实不如linux下这么方便.
迁移一个两个那是好办.要是迁个虚拟主机.动不动五六百个呢?光是添加用户名密码,绑定域名,配置ntfs权限.每一项都能让人头大.何况要是再来个五六台服务器就三四千了.要是一个一个迁会要命的.

不光是迁移.或者是因为服务器运行久了.慢了,中毒了.本文方法同样适用.要重装系统.

下面这些方法都是尽量用身边最常用的软件,最能就地取材的方法.不借助于第三方,或偏门少见的软件实现.

一.第一步首先搞到你所有用户名和密码.

windows下的密码是搞不到的.存在sam文件中,并且是加密的.开机状态是不可以存取的.破密码的工具也有,可以用lrc,dump一类的工具进行爆破,但是现在我们不是要搞黑客.是自己的服务器.不用这么麻烦.何况就算要黑,跑一个用户的密码也是要跑很久的.
只需要一条命令开始运行打开cmd.exe
net   user   > c:\userlist.txt
net   user最多是三列的会像这样的格式
user1       user2       user3
得到一个所有用户的用户名列表.稍微整理一下,去掉超级管理员,guest等等非网站用户.弄成一列的形式.变成
user1
user2
user3
全选,把它贴到excel中.
这样在A1单元格填的就是user1,选中d1列输入一个数字,拖动填充柄往下拉.会自动自增帮你填好.拉到和用户名一样多就行.
然后在c1列点击fx,等号后输入函数,对d1列的数字进行任意一个tan,sin之类的正,余弦,正,余割都行.会生成一些随机小数位.同样拖动填充柄,往下拉,它会自动帮你填好相对单元格地址引用.

然后,文件,另存为,保存时格式选   CSV(逗号分隔).csv存为userlist.csv
这个文件表现如下
user1,0.3365455
user2,0.5456464
user3,0.2123132

目的就是为了构造

用户名,密码

中间以逗号分隔的列表便于后面调用.这个列表构造方法也很多.不一一例举.上面只是给出其中一种方法.

如果有虚拟管理主机软件如prima,freehost,华众,蓝芒一类.更简单.直接数据库里面导出用户名密码列表即可.

如星外,7i24可以在SQLserver查询分析器执行
select   ftpname,ftppassword,serverlistid   from   FreeHost.FreeHost_Product_Host   where   serverlistid=1   or   serverlistid=2     order   by   serverlistid

serverlistid可以根据实际受控端来控制是否要一起导出.
在查询分析器右键,另存为即可得到一个userlist.csv的文件.


二.导出IIS配置备份

del   iismove.SC0
del   iismove.MD0  
iisback.vbs     /backup   /b   iismove     /e   iismove   /overwrite   /v   0
copy   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0   iismove.SC0
copy   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0   iismove.MD0

以上是命令行的实现.图形化操作方法也附一个.

iis管理器中最顶级处,右键,所有任务,配置备份、还原

点创建备份,备份名称随便输入,勾选使用密码加密备份,一定要勾,不勾不能在别的电脑还原。


把C:\WINDOWS\system32\inetsrv\MetaBack中生成的MD0和SCO文件复制到新服务器中的
C:\WINDOWS\system32\inetsrv\MetaBack中。

按上面的方法,恢复还原即可。


三.目标服务器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

[解决办法]
帮顶

热点排行