文章編號: 555205 - 上次校閱: 2004年10月7日 - 版次: 1.0

FTP 使用 Visual C# 中使用 Active Directory 使用者隔絕

作者?Bart De Smet MVP
系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

抽象

IIS 6.0 包含一項新功能稱為可避免使用者瀏覽至另一個使用者的主資料夾從 FTP 使用者隔絕。 如果沒有使用者區隔很可能讓使用者能夠登入到 FTP 站台, 並藉由使用 cd 移至另一個使用者的資料夾 ... 在 FTP 工具命令。 不過, 不會將使用者, 可以用來撰寫其他的使用者的資料夾 (至少, 當右安全性設定), 使用者也許能夠讀取其他使用者的資料夾的內容
?
3 個不同 modi 支援:
- 沒有隔離, 使得使用者能夠周遊至其他使用者的資料夾。
- 以資料夾為基礎的隔離。 在這種情況下, 是設定 FTP 根資料夾和每個使用者都有專用的、 沙箱子資料夾。
- 以 Active Directory 為基礎的隔離。 利用這個選項, 使用者的 FTP 設定是儲存為 Active Directory 中相對應的使用者物件的屬性。 使用此選項可能是什麼大大的彈性。
?
本篇文章著重在 FTP 使用 Active Directory 使用者隔離並假設您已具備基本知識的 Active Directory 並在您的企業中, 您設定的 Active Directory 網域。

建立新的 FTP 站台與 Active Directory 使用者隔絕

1. 移至 Internet Information Services (IIS) 管理員使用 inetmgr, [ 開始 ]、 [ 執行 ]、 [ 確定 ]。
2. 巡覽至樹狀結構中正確的電腦。
3. 在 FTP 站台資料夾按一下滑鼠右鍵然後選擇 [ 新增 ], FTP Site?
4. 按一下 [ 下一步 ], 為新 FTP 站台提供一個名稱。 按一下 [ 下一步 ] 再次。
5. 指定 IP 位址及連接埠設定為新 FTP 站台。 如這個, 相關資訊請參閱 IIS [ 說明 ] 檔案。 按一下 [ 下一步 ] 以繼續。
6. 現在選擇最後一個選項: " Isolate 使用 Active Directory 使用者 」 然後按一下 [ 下一步 ]
7. 提供使用者認證為網域帳戶, 將用來擷取 Active Directory 設定當 FTP 服務正在執行, 以讀取使用者的屬性。 作為安全性最佳作法, 使用低權限帳戶 在 [ 網域 ] 文字方塊, 提供基底網域名稱, 不完全合格的網域名稱。 附註: 如果的使用帳戶密碼變更, FTP 設定將會需要要更新以反映變更。 按一下 [ 下一步 ]。
8. 確認密碼然後按一下 [ 確定 ]。
FTP 資料夾上 9. 設定使用權限。 如果您希望使用者, 才能夠將檔案上載到它們的資料夾, 勾選 [ 讀取和寫入兩個選項。 按一下 [ 下一步 ]。
10. 按一下 [ 完成 ] 以完成 FTP 站台安裝。

FTP 使用 Active Directory 使用者隔絕說明

Active Directory 架構 - 使用者隔離則是用來裝載提供者和公司來維護了大量的使用者 FTP 資料夾具有建議的選擇。 在驗證, 基本上, 使用者的主目錄資料夾是由查詢 msIIS - FTPRoot 和 FTPDir msIIS - Active Directory 中之使用者物件的屬性 (Attribute)。 路徑中的 msIIS - FTPRoot 和 msIIS - FTPDir 值之串連結果到使用者的主資料夾。
?
範例會如下所示:
??? msIIS - FTPRoot = D:\FTP 使用者
??? msIIS - FTPDir = \JohnSmith
這將導致 " D:\FTP Users\JohnSmith " 作為主資料夾為使用者。 請注意, 它也是可以當作 FTPRoot msIIS - 值, 來連線到其他伺服器, 例如 LAN 伺服器上的檔案伺服器指定 UNC 路徑。
?
這種彈性讓您可以在任何時候變更使用者的根資料夾, 而不必碰觸 FTP 伺服器的組態, 只要藉由變更 msIIS - FTPRoot 屬性在 Active Directory 使用者在有問題。 因為 Active Directory 操作是很簡單的使用各種技術 (VBScript、 . NET Framework) 是可以為各種使用者變更設定以快速方式。 如此一來, 這是相當簡單, 將 FTP 資料夾的使用者移到另一個位置, 只要藉由更新 msIIS - FTPRoot 他們在 Active Directory 屬性。
?
註解:
1. 已從 Active Directory 擷取資訊, 快被取是 FTP 服務為 10 分鐘。 是可以變更此預設值使用 DsCacheRefreshSecs 登錄項目。 請注意當您決定要這麼做, 因為可能會損害到您的系統登錄變更。
2. 如果您在網路上, 使用 Windows 2000 Server - 基礎 Active Directory 實作會要延伸架構和 msIIS - FTPRoot 與 FTPDir msIIS - 為使用者物件屬性 (Attribute)。 架構延伸模組無法被復原, 所以要小心當您要這麼做並參考網域系統管理員為所需的權限。
3. 使用者必須在指定的資料夾上有權限, 才能擁有存取權它。 如果使用者沒有所需的權限或路徑無效, 將會被拒絕存取。 如果您遇到問題, 檢查安全性和共用 (如果您正在使用 UNC 路徑為為 FTPRoot msIIS - 設定值) 的層級上的檔案系統 (NTFS ACL) 層級。

藉由指令碼啟用使用者輸入 FTP 存取權

若要設定最多為使用指令碼, 使用者主目錄資料夾請遵循接下來的程序:
1. 開啟命令提示字元視窗。
2. 使用 iisftp.vbs /SetADProp / 嗎 ? 以顯示語法資訊的 iisftp.vbs 指令碼。
3. 決定使用者的主目錄資料夾, 並分割出它在根資料夾及使用者資料夾。 根資料夾路徑, 以本機資料夾或 UNC 路徑, 包含資料夾的使用者時通常, 使用者資料夾是就像 \JohnSmith。 我將會使用接下來的範例:
??? 根資料夾: \\fileserver\ftproot
????使用者資料夾: \JohnSmith
4. 將設定套用到使用者藉由執行下列命令:
??? iisftp.vbs /SetADProp JohnSmith FTPRoot \\fileserver\ftproot
??? iisftp.vbs /SetADProp JohnSmith FTPDir \JohnSmith
?
重要: 不要忘記 \ 前的 FTPDir 值 一定要有效的路徑導致之根資料夾的值和使用者資料夾的值串連。
?
如果您設定使用者藉由執行這項操作, 請檢查是否可以登入至使用 FTP 使用者的資料夾。 為了要, 您可以使用或命令列命令 ftp.exe 瀏覽器或 FTP 用戶端應用程式。

藉由使用 C# 中啟用使用者輸入 FTP 存取權

藉由使用 Managed 程式碼, 以及可為 FTP 啟用使用者。 當您撰寫一個應用程式來設定使用者帳戶且您想要加入 FTP 存取權, 以及可能是很有用。 如果您要升級大型一連串的使用者必須具有系統上, FTP 資料夾 C# 中, 以及可能很有用。 (主控台應用程式) 中的基本程式碼會如下所示:
?
using System;
使用 System . DirectoryServices;
使用 System.reflection;
使用 System . Text;
?
類別 EnableFTP
{
??? 公用靜態 void Main (字串 [] args)
??? {
??????? 如果 (args.Length < 2)
??????? {
??????????? Console.WriteLine("Usage: {0} <user> <rootFolder> [<domain>]", Assembly.GetExecutingAssembly().GetName().Name);
??????????? 傳回;
??????? }
?
??????? 字串網域 = null;
??? ??? 如果 args.Length (== 3)
??????????? 網域 = args [ 2 ] ;
??????? 其他
??????????? 網域 = environment.GetEnvironmentVariable("USERDNSDOMAIN");
?
??????? 如果 == String . Empty 網域 || == null 網域 ()
??????? {
??? ??????? Console . WriteLine (「 沒有有效的網域中找到。 指定完整的網域 DNS 名稱為第三個參數 」) ;。
??????????? 傳回;
??????? }
?
??????? 字串 dc = GetDC(domain);
??????? 字串 ldap = String.Format("LDAP://{0}/{1}",domain,dc);
?
??????? 字串登入 = args [ 0 ] ;
??????? 字串 rootFolder = args [ 1 ];
?
??????? 查詢字串 = String.Format("(&(samAccountName={0})(objectClass=user)) ", login);
??????? SearchResult res = null;
??????? 請嘗試
??????? {
??????????? 新 DirectoryEntry(ldap); = DirectoryEntry 根目錄
??? ??????? DirectorySearcher src = 新 DirectorySearcher (根目錄、 查詢) ;
??????????? res = src.FindOne();
??????? }
??????? 攔截例外狀況 ()
??????? {
????????????Console.WriteLine("Cannot connect to domain {0}", domain);
????????????傳回;
??????? }
?
??????? 如果 = null ! res ()
??????? {
??????????? 字串 usrFolder = " \\ " + 登入 ;
??? ????????使用者 DirectoryEntry = res.GetDirectoryEntry();
??????????? User.Properties [ " msIIS - FTPRoot " ] Value = rootFolder;
??????????? User.Properties [ " msIIS - FTPDir " ] Value = usrFolder;
??????????? user.CommitChanges();
??????????? Console.WriteLine("FTP home directory for {0}: {1}{2}", login,rootFolder,usrFolder);
??????? }
??????? 其他
??????????? Console . WriteLine (「 使用者 { 0 } 找不到 」、 登入) ;。
??? }

??? private static string GetDC(string domain)
??? {
??????? StringBuilder sb 新 StringBuilder(domain); =
??????? sb.Replace(".",",DC=");
??????? sb.Insert(0,"DC=");
??????? 傳回 sb.ToString();
??? }
}
?
附註: 如果您嘗試在 Visual Studio . NET 2003, 編譯這您將需要, 將參考加入至 System.DirectoryServices.dll 組件在方案總管。
?
EnableFTP.exe JohnSmith D:\FTP 「 使用者 」 中的用法的命令是很簡單, 例如:
?
您是否要啟用為一個組織單位的所有使用者, 例如可以擴充這個範例。 使用 DirectorySearcher 類別, 它是可以利用 "(objectClass = user 擷取所有使用者物件 」 查詢並在類別執行個體藉由使用 FindAll 方法來擷取結果 在 C# 程式設計 Active Directory 有關的資訊請參閱在 . NET Framework SDK (如 System . DirectoryServices 搜尋)。

其他資源

Internet Information Services (IIS) 6.0 Resource Kit
MSDN - System.DirectoryServices Namespace (.NET Framework Class Library)
Hosting Multiple FTP Sites with FTP User Isolation

這篇文章中的資訊適用於:
  • Microsoft Internet Information Services 6.0
  • Microsoft Visual C# .NET 2003 Standard Edition
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。如果您發現錯誤,並想要協助我們進行改善,請填寫本篇文章下方的問卷。
按一下這裡查看此文章的英文版本:555205? (http://support.microsoft.com/kb/555205/en-us/ )
Community Solutions Content社區解決方案內容免責聲明
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。