2010年11月18日星期四

PowerShell概要

PowerShellはWSHの替わりものであります。
WSHの利用できる言語はVBScript,Javascriptですが、もうすでに.net時代なので、この二つのScriptはなかなか古い感じられ、さっさとOS管理用のScriptも昇級しよう。

PowerShellの特徴:
  • 豊富に用意された高機能なコマンド(「コマンドレット」
  • 「.NET Frameworkクラス・ライブラリ」との連携(.net Framework2.0必須)
  • 「ドライバ」経由でさまざまなデータストアへのアクセスが可能
これで、.netに上手な管理者たちは楽になるでしょう。

PowerShell2.0はWINDOW2008R2とWINDOWS7からOSに含まれています。
この前のバージョンのOS(WINXPまで)には使いたければ、先に.netframework2.0のインストールが必要です。それから、PowerShellをOSに対応するバージョンをインストールする。

PowerShellを利用するに当たって、何はおいても、まず「コマンドレット(Cmdlet)」の理解は欠かせない。コマンドレットとは、要は、PowerShellで利用可能なコマンドのことである。
標準で129種類にも及ぶコマンドレットが提供されており、これらコマンドレットを組み合わせることで、従来、コマンド・プロンプトやWSHでは実現できなかった(もしくは困難であった)処理を限りなく短いコードで実現することができる。

まずPowerShellで利用可能なコマンドレットをざっと確認してみることにしよう。利用可能なコマンドレットの一覧を取得するのはGet-Commandコマンドレットの役割だ。Get-Commandコマンドレットを利用することで、名前(Name)、構文(Definition)などを確認することができる。

詳細情報の確認にはGet-Helpコマンドレットを使う。
コマンドレットの末尾に「-?」オプションを付けてもよい
PowerShellでは、主要なコマンドレットに対してエイリアス(別名)を提供します。
例えば、カレント・フォルダ配下の情報を取得するためのGet-ChildItemコマンドレット――これはエイリアスを利用することで、以下のように書き換えることも可能だ。
例:
Set-Alias remove Remove-Item
意味はPowerShell中のファイル削除命令の Remove-Item をremoveに別名つけて、
PowerShell中でCMD中のようにファイル削除命令removeが使えることにした。

Get-Aliasにより現在の別名リスをを表示できます。

基本は命令キーワードにより実行するものですが、一行不足の場合、改行継続は”|”で使う。
例:
PS > Get-ChildItem |
>> Where-Object {$_.LastWriteTime -lt (Get-Date).AddMonths(-6)} |
>> ForEach-Object {$_.Delete()}

Get-ChildItemはCurrentDirectory下のファイルをリストする。|で改行
Where-Objectで最新書き込み時間は6ヶ月以内の条件をつける。
For-Each-ObjectでLOOPして結果を$_.Delete()で削除する。

PowerShellは変数のタイプがあります。


エイリアス .NET Frameworkの型名
byteSystem.Byte
intSystem.Int32
longSystem.Int64
single、floatSystem.Single
doubleSystem.Double
decimalSystem.Decimal
charSystem.Char
boolSystem.Boolean
stringSystem.String
array/td> System.Array
xmlSystem.Xml.XmlDocument
typeSystem.Type

特別なCHARもあります。

エスケープ・シーケンス概要
`bバックスペース
`n改行
`rキャリッジ・リターン
`tタブ

つまり、PowerShellは前と違って、.netFramework baseの高級Scriptである。

==========================================================
WINDOWS2008R2のServerCoreを最小インストールする場合は、
PowerShellと.NetFramework2.0が使えないですが。以下のコマンドで起動できます。
start /w ocsetup NetFx2-ServerCore
start /w ocsetup MicrosoftWindowsPowerShell

PowerShellを起動するには
start C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe
とします。

netコマンドの使い方

netコマンドは、Microsoft Windowsネットワークにおいて、ネットワーク関係の設定を行ったり、現在の状態を表示させたりするために使われるコマンドである。

クライアントOSの主流がMS-DOSからWindows環境に移るにつれ、ほとんどのネットワーク機能はWindows上からGUIベースで管理できるようになったが、同時にコマンド版の管理ツールであるnetコマンドの強化も継続して行われているので、必要に応じて使い分けるとよいだろう。特に、リモートからTelnetなどでログオンしてネットワークのトラブルシューティングを行うためには、このようなコマンドラインのツールはぜひとも使いこなせるようになっておきたい。

netコマンドには数多くのサブコマンドがあり、実際に利用する場合は、いずれかのサブコマンド名とそれに対するパラメータ類を続けて指定する必要がある。netコマンドだけを単独で起動すると(このコマンドの実体は%windir%\system32\net.exe。Windows 9x/Meの場合は%windir%\net.exe)、サブコマンドの一覧が表示される。

2010年11月17日星期三

IIS での HTTP 401 エラーのトラブルシューティング

トラブルシューティングの手順
HTTP 401 エラーのサブステータス コードを識別します。
サブ状態コードを識別する一般的な 2 つの方法があります。
サブステータス コードから IIS 6. 0 では、Web ログに記録です。 Web ログは、次の場所にあります。
%SYSTEMROOT%\System32\LogFiles\W3SVC###\
HTTP 401. 1: が無効なユーザーの資格情報によって拒否されました。
説明

IIS はユーザーの要求を実行するログオンできませんでした。 すべての要求は、要求が匿名場合でも、ユーザーに関連付けられたでなければなりません。

一般的な理由
  • 間違ったユーザー名またはパスワードが提供されます。 ログオンに失敗しましたしたユーザーを特定し、ユーザー名またはパスワードの修正します。
  • Kerberos 認証は失敗します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
    326985  (http://support.microsoft.com/kb/326985/ ) IIS での問題の Kerberos 関連のトラブルシューティング方法
    ほかにも便利な Kerberos 記事次のとおりです。
    871179  (http://support.microsoft.com/kb/871179/ ) 受信した、"HTTP エラー 401. 1 - 権限: 無効な資格情報によりアクセスが拒否されました"エラー メッセージ IIS 6.0 アプリケーション プールの一部である Web site をアクセスするとき
    IIS 6. 0 (IIS 6. 0) を持つアプリケーション プール ID を構成します。
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/f05a7c2b-36b0-4b6e-ac7c-662700081f25.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/f05a7c2b-36b0-4b6e-ac7c-662700081f25.mspx)

    統合 Windows 認証 (IIS 6. 0)
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/523ae943-5e6a-4200-9103-9808baa00157.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/523ae943-5e6a-4200-9103-9808baa00157.mspx)

    (IIS 6. 0) の Kerberos の制約付き委任を構成します。
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/df979570-81f6-4586-83c6-676bb005b13e.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/df979570-81f6-4586-83c6-676bb005b13e.mspx)
  • ローカルまたはドメイン ポリシーまたはユーザー権利の割り当て、ユーザーを防ぎますサーバーへのアクセスします。 サーバーはログオンの失敗を監査するには構成されている場合、セキュリティ ログに詳細可能性があります。 必要なユーザー権利は、次の資料を参照します。
    812614  (http://support.microsoft.com/kb/812614/ ) IIS 6.0 でのデフォルトのアクセス許可とユーザー権利
    271071  (http://support.microsoft.com/kb/271071/ ) IIS 5.0 Web サーバーに必要な NTFS アクセス許可とユーザー権利の設定方法
    832981  (http://support.microsoft.com/kb/832981/ ) ユーザーのセキュリティ イベント ログがいっぱいになったら Web サイトにアクセスできません。
    300549  (http://support.microsoft.com/kb/300549/ ) 有効にし、Windows 2000 のセキュリティ監査を適用する方法
  • このエラーは匿名アクセスが構成されている場合にも発生する可能性があります。 これは、ユーザー名または IIS メタベースに格納されている匿名アカウントに対してパスワード、ドメイン アカウントを使用する場合、ローカル ユーザー データベース (または、Active Directory ディレクトリ サービス) に格納された実績情報と異なる場合に発生します。 この問題を解決して IIS アカウントのパスワードをリセットします。
  • IIS 5. 0 を IIS 6. 0 を実行するサーバーをアップグレードした後は IIS は IIS 5. 0 互換モードで実行してください。 サーバーが IIS に切り替えられると 6. 0 分離モード、匿名の要求に対して HTTP 401. 1 エラーが表示されます。 これは IIS 5. 0 匿名パスワード同期の原因発生します。 この問題を解決をするには AnonymousPasswordSync メタベース キーを false に設定して、アカウントを IIS の匿名ユーザーのパスワードをリセットします。
  • このエラーに関するについては、記事の「サポート技術情報」(Microsoft Knowledge Base) を表示する次の資料番号をクリックしてします。
    896861  (http://support.microsoft.com/kb/896861/ ) 統合認証を使用して、IIS 5. 1 または IIS 6 でホストされている Web サイトを参照するとエラー 401. 1 を受信します。
    304201  (http://support.microsoft.com/kb/304201/ ) できないアクセス Web サイトまたは IIS を起動できないサービスを非ローカル システム アカウントと IIS と Windows 認証を使用して実行
    263140  (http://support.microsoft.com/kb/263140/ ) 匿名および基本認証ドメイン コントローラー上で IIS 5. 0 に接続するときの失敗します。
HTTP 401. 2: サーバーの構成によっては拒否されました
説明

クライアントのブラウザーと IIS でした認証プロトコルに一致しません。

一般的な理由
  • IIS での認証プロトコルの (匿名を含む) が選択されていません。 少なくとも 1 つの認証の種類選択してください。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
    253667  (http://support.microsoft.com/kb/253667/ ) エラー メッセージ: HTTP 401. 2 - 権限: 認証なしのサーバーの構成のため、ログオンに失敗しました
  • 統合認証のみを有効にし、それ以前]、非 - クライアント ブラウザーが、サイトにアクセスします。 これはクライアントのブラウザーに統合認証を実行できないためです。 この問題を解決をするには、次の方法のいずれかを使用します。
    • 基本認証を受け入れる IIS を構成します。 これはだけ発生 SSL 経由でセキュリティを確保するため。
    • 統合認証を実行できるクライアント ブラウザーを使用します。 Internet Explorer および Netscape ナビゲーターと Mozilla Firefox の新しいバージョンには、統合認証を実行できます。
  • 統合認証は、プロキシを経由します。 これは、プロキシ、NTLM 認証された接続を維持しないし、したがって、クライアントからサーバーに匿名の要求を送信するためです。 この問題を解決するオプションは次のとおりです。
    • 基本認証を受け入れる IIS を構成します。 これはだけ発生 SSL 経由でセキュリティを確保するため。
    • プロキシを使用しないでください。
リソースの ACL によって HTTP 401.3: が拒否されました
説明

このエラーは、ユーザーは、サーバーに正常に認証が、ユーザーが要求されたコンテンツに NTFS アクセス許可を持たない場合に返されます。

一般的なソリューション
  • コンテンツに NTFS アクセス許可を正しく設定します。 以下の資料の「NTFS のアクセス許可] を確認します。
    812614  (http://support.microsoft.com/kb/812614/ ) IIS 6.0 でのデフォルトのアクセス許可とユーザー権利
    271071  (http://support.microsoft.com/kb/271071/ ) IIS 5.0 Web サーバーに必要な NTFS アクセス許可とユーザー権利の設定方法
  • 適切な認証方法が設定されるされている確認します。 たとえば、統合認証を使用してユーザーが認証の資格情報のように求めされません。 この場合は、明確でないか、要求が認証する場合があります。
  • コンテンツがリモート共有上にある場合、は、ユーザーが十分な NTFS および共有のアクセス許可でことを確認します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
    332142  (http://support.microsoft.com/kb/332142/ ) UNC 共有のコンテンツに対して NTLM 要求を行うと 401 エラー メッセージが表示される
HTTP 401.4: がカスタムの ISAPI フィルターによって拒否されました
説明

読み込まれた ISAPI フィルターには、要求拒否しました。

ソリューション

ISAPI フィルターは、要求を拒否を識別し、ソリューションを決定する開発者またはベンダーに連絡します。
カスタムの ISAPI または CGI Web アプリケーションで HTTP 401.5: が拒否されました
説明

ISAPI 拡張機能または CGI アプリケーション要求を拒否しました。

ソリューション

どの ISAPI 拡張機能または CGI アプリケーションは、要求を拒否を識別し、ソリューションを決定する開発者またはベンダーに連絡します。

結果

要約すると、HTTP 401 エラーをトラブルシューティングするときは、まずは常になりますサブステータス コードを確認します。
  • 401. 1: 認証が、試行しますが、失敗しました。
  • 401. 2: サーバーとクライアントでした認証プロトコルに同意できないため、認証が行われません。
  • 401.3: 認証が成功したがアカウントを認証には、要求されたリソースまたはコンテンツにアクセスする権限がありません。
  • 401.4: ISAPI フィルターは、要求を拒否します。
  • 401.5: ISAPI 拡張機能または CGI アプリケーションは、要求を拒否します。

IIS6.0 WebApplication Publish

開発環境: VS2008, Ajax3.5
発行環境:Windows XP IIS6.0

発行手順:
① VS2008でサンプルのWebApplication2を作成して、コンパイルする。

② VS2008でWebApplication2のプロジェクトを選択して、右クリック→発行→

 ③発行画面で発行パスを設定する。
注意:コピー内容について、基本は実行に必要なファイルのみですが、場合により変わります。

④ 発行先のフォルダにNETWORK SERVICEのアクセス権限を渡す。
これがアクセスできるの第一歩です。

⑤IISの配置、仮想ディレクトリを作成する。途中は全部ディフォルトでOKです。



⑥下図はディフォルト設定です。ディレクトリの参照を選択しない場合、アクセスフォルダ下に
default頁が見つからない場合、FileListしません、アクセスエラーの画面を表示する。

以上は簡単なIIS6.0の設定手順で。
上図のASP.NET Tabには.netframeworkのバージョン設定があります。
バージョン不一致のエラーが発生する場合、そこで調整ができます。

IIS7 Web.Config Security Filter Set

1 Filter Based on URL Sequences禁止输入URL直接访问WEB画面

<configuration>
<system.webServer>
<security>
<requestfiltering>
<denyurlsequences>
<add sequence=".."/>
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>

2 Filter by Verbs 过滤访问动词,例如只允许Get方法的访问。

<configuration>
<system.webServer>
<security>
<requestfiltering>
<verbs allowUnlisted="false">
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
</configuration>

3 Filter Based on Request Limits.对Request的过滤。
包括Request总长度,URL长度,查询字符串的长度。

<configuration>
<system.webServer>
<security>
<requestfiltering>
<requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="260"
       maxQueryString="25" />
</requestFiltering>
</security>
</system.webServer>
</configuration>

4 Filter Based on File Extensions 过滤访问文件的后缀名。
例如禁止.asp,.xml的访问.

<configuration>
<system.webServer>
<security>
<requestfiltering>
<fileextensions allowUnlisted="true" >
<add fileExtension=".asp" allowed="false"/>
<add fileExtension=".xml" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>

5 Filter High Bit Characters 禁止包含非ASCII码的Request访问。

<configuration>
<system.webServer>
<security>
<requestFiltering allowHighBitCharacters="true" />
</security>
</system.webServer>
</configuration> 

6 Filter Out Hidden Segments禁止访问子目录下的部分目录
例 有http://test.com/A, http://test.com/B两个目录,只想A被访问。

<configuration>
<system.webServer>
<security>
<requestfiltering>
<hiddensegments>
<add segment="A"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>

7 Filter Double-Encoded Requests 过滤二次编码的请求,回避二次编码攻击。

<configuration>
<system.webServer>
<security>
<requestFiltering
                  allowDoubleEscaping="false">
</requestFiltering>
</security>
</system.webServer>
</configuration>

什么是二次编码请求攻击, 将在下一篇详细说明。

cacls简介:ACL(Access Control Entry即[文件/目录]访问控制入口)的CUI工具

cacls是NTFS文件系统的命令行访问控制工具。
具体的使用方法可以在CMD下通过cacls查看帮助。
常用的有:
1 授予[用户/组],[文件/目录]权限

'授予users组 系统目录system32下所有dll r读权限
cacls "%SystemRoot%/system32/*.dll" /g users:r /e
'授予users组 系统目录/临时文件夹 c变更权限
cacls "%SystemRoot%/Temp" /g users:c /e

2 删除[用户/组],[文件/目录]权限
'删除users组 系统目录/system 访问权限
cacls "%SystemRoot%/system" /r "users" /e
'删除everyone组 系统目录/驱动文件夹 访问权限
cacls "%SystemDrive%" /r "everyone" /e

アクセス権: N なし
W 書き込み
R 読み取り
C 変更 (書き込み)
F フル コントロール

IIS 6.0 的默认权限和用户权限[FROM MSDN]

下表记录了 NTFS 文件系统权限、注册表权限和 Microsoft Windows 用户权限。此信息在安装套件中包含 Microsoft ASP.NET 时适用。本文重点关注 World Wide Web 发布服务,并不考虑文件传输协议 (FTP) 服务、简单邮件传输协议 (SMTP) 服务和 Microsoft FrontPage Server Extensions (FPSE) 等其他组件。

注意:为便于说明,本文档中的 IUSR_MachineName 帐户和配置的匿名帐户在使用时可以互换。



NTFS 权限


目录用户\组权限
%windir%\help\iishelp\commonAdministrators完全控制
%windir%\help\iishelp\commonSystem完全控制
%windir%\help\iishelp\commonIIS_WPG读取、执行
%windir%\help\iishelp\commonUsers(请参见“注意 1”。)读取、执行
%windir%\IIS Temporary Compressed FilesAdministrators完全控制
%windir%\IIS Temporary Compressed FilesSystem完全控制
%windir%\IIS Temporary Compressed FilesIIS_WPG完全控制
%windir%\IIS Temporary Compressed FilesCreator owner完全控制
%windir%\system32\inetsrvAdministrators完全控制
%windir%\system32\inetsrvSystem完全控制
%windir%\system32\inetsrvUsers读取、执行
%windir%\system32\inetsrv\*.vbsAdministrators完全控制
%windir%\system32\inetsrv\ASP compiled templatesAdministrators完全控制
%windir%\system32\inetsrv\ASP compiled templatesIIS_WPG完全控制
%windir%\system32\inetsrv\HistoryAdministrators完全控制
%windir%\system32\inetsrv\HistorySystem完全控制
%windir%\system32\LogfilesAdministrators完全控制
%windir%\system32\inetsrv\metabackAdministrators完全控制
%windir%\system32\inetsrv\metabackSystem完全控制
Inetpub\AdminscriptsAdministrators完全控制
Inetpub\wwwroot(或内容目录)Administrators完全控制
Inetpub\wwwroot(或内容目录)System完全控制
Inetpub\wwwroot(或内容目录)IIS_WPG读取、执行
Inetpub\wwwroot(或内容目录)IUSR_MachineName读取、执行
Inetpub\wwwroot(或内容目录)ASPNET(请参见“注意 2”。)读取、执行
注意 1:在使用基本身份验证或集成身份验证时以及在配置自定义错误时,都必须对此目录拥有相应的权限。例如,在出现错误 401.1 时,只有向已登录用户授予了读取 4011.htm 文件的权限,该用户才会看到预期的自定义错误详细信息。

注意 2:默认情况下,IIS 5.0 隔离模式中使用 ASP.NET 作为 ASP.NET 进程标识。如果将 ASP.NET 切换到 IIS 5.0 隔离模式,则 ASP.NET 必须对内容区域具有访问权限。IIS 帮助中对 ASP.NET 进程隔离进行了详细说明。有关其他信息,请访问下面的 Microsoft 网站:

ASP.NET 进程隔离
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e409289d-2786-4a34-bb7e-9c546602c2c8.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e409289d-2786-4a34-bb7e-9c546602c2c8.mspx)
(可能为英文网页)


注册表权限


收起该表格展开该表格
位置用户\组权限
HKLM\System\CurrentControlSet\Services\ASPAdministrators完全控制
HKLM\System\CurrentControlSet\Services\ASPSystem完全控制
HKLM\System\CurrentControlSet\Services\ASPIIS_WPG读取
HKLM\System\CurrentControlSet\Services\HTTPAdministrators完全控制
HKLM\System\CurrentControlSet\Services\HTTPSystem完全控制
HKLM\System\CurrentControlSet\Services\HTTPIIS_WPG读取
HKLM\System\CurrentControlSet\Services\IISAdminAdministrators完全控制
HKLM\System\CurrentControlSet\Services\IISAdminSystem完全控制
HKLM\System\CurrentControlSet\Services\IISAdminIIS_WPG读取
HKLM\System\CurrentControlSet\Services\w3svcAdministrators完全控制
HKLM\System\CurrentControlSet\Services\w3svcSystem完全控制
HKLM\System\CurrentControlSet\Services\w3svcIIS_WPG读取


Windows 用户权限


收起该表格展开该表格
策略Users
从网络访问此计算机Administrators
从网络访问此计算机ASPNET
从网络访问此计算机IUSR_MachineName
从网络访问此计算机IWAM_MachineName
从网络访问此计算机Users
调整进程内存配额Administrators
调整进程内存配额IWAM_MachineName
调整进程内存配额Local service
调整进程内存配额Network service
跳过遍历检查IIS_WPG
允许本地登录(请参见“注意”)Administrators
允许本地登录(请参见“注意”)IUSR_MachineName
拒绝本地登录ASPNET
在身份验证之后模拟客户端Administrators
在身份验证之后模拟客户端ASPNET
在身份验证之后模拟客户端IIS_WPG
在身份验证之后模拟客户端Service
作为批处理作业登录ASPNET
作为批处理作业登录IIS_WPG
作为批处理作业登录IUSR_MachineName
作为批处理作业登录IWAM_MachineName
作为批处理作业登录Local service
作为服务登录ASPNET
作为服务登录Network service
替换进程级别令牌IWAM_MachineName
替换进程级别令牌Local service
替换进程级别令牌Network service

注意:在以默认设置全新安装的带有 IIS 6.0 的 Microsoft Windows Server 2003 中,Users 组和 Everyone 组都拥有“跳过遍历检查”权限。工作进程标识通过这两个组当中的一个继承“跳过遍历检查”权限。如果从“跳过遍历检查”权限中删除这两个组,工作进程标识将不会通过任何其他分配继承“跳过遍历检查”权限,因此工作进程将无法启动。如果必须从“跳过遍历检查”权限中删除 Users 组和 Everyone 组,请添加 IIS_WPG 组以允许 IIS 按预期方式运行。

注意:在 IIS 6.0 中,如果将基本身份验证配置为身份验证选项之一,则基本身份验证的 LogonMethod 元数据库属性将为 NETWORK_CLEARTEXT。NETWORK_CLEARTEXT 登录类型不需要“允许本地登录”用户权限。这同样适用于匿名身份验证。有关其他信息,请参见 IIS 帮助中的“基本身份验证默认登录类型”主题。您也可以访问下面的 Microsoft 网站:

基本身份验证
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/cf438d2c-f9c7-4351-bf56-d2ab950d7d6e.mspx (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/cf438d2c-f9c7-4351-bf56-d2ab950d7d6e.mspx)