<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

    原文:http://ldapman.org/articles/intro_to_ldap.html

    原文作者:Michael Donnelly

    翻譯:Brimmer

    如果你在計算機行業工作,那么對LDAP可能早有耳聞了。想深入地了解LDAP嗎?那么可以好好地讀一下這篇文章。這篇介紹性的文章是一系列介紹如何在企業中設計、實現和集成LDAP環境的文章的頭一篇。主要是先讓你熟悉一下LDAP的基本概念,那些比較困難的細節問題將放到以后討論。在這篇文章中我們將要介紹:

    什么是LDAP?

    什么時候該用LDAP存儲數據?

    LDAP目錄樹的結構

    單獨的LDAP記錄

    作為例子的一個單獨的數據項

    LDAP復制

    安全和訪問控制

    現在LDAP技術不僅發展得很快而且也是激動人心的。在企業范圍內實現LDAP可以讓運行在幾乎所有計算機平臺上的所有的應用程序從LDAP目錄中獲取信息。LDAP目錄中可以存儲各種類型的數據:電子郵件地址、郵件路由信息、人力資源數據、公用密匙、聯系人列表,等等。通過把LDAP目錄作為系統集成中的一個重要環節,可以簡化員工在企業內部查詢信息的步驟,甚至連主要的數據源都可以放在任何地方。如果OracleSybaseInformixMicrosoft SQL數據庫中已經存儲了類似的數據,那么LDAP和這些數據庫到底有什么不同呢?是什么讓它更具優勢?請繼續讀下去吧!

    什么是LDAP?

    LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基于X.500標準的,但是簡單多了并且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規范在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。

    怎么使用LDAP這個術語呢?

    在日常交談中,你可能會聽到有些人這么說:“我們要把那些東西存在LDAP中嗎?”,或者“從LDAP數據庫中取出那些數據!”,又或者“我們怎么把LDAP和關系型數據庫集成在一起?”。嚴格地說,LDAP根本不是數據庫而是用來訪問存儲在信息目錄(也就是LDAP目錄)中的信息的協議。更為確切和正式的說法應該是象這樣的:“通過使用LDAP,可以在信息目錄的正確位置讀取(或存儲)數據”。但是,也沒有必要吹毛求疵,盡管表達得不夠準確,我們也都知道對方在說什么。

    LDAP目錄是數據庫嗎?

    就象SybaseOracleInformixMicrosoft的數據庫管理系統(DBMS)是用于處理查詢和更新關系型數據庫那樣,LDAP服務器也是用來處理查詢和更新LDAP目錄的。換句話來說LDAP目錄也是一種類型的數據庫,但是不是關系型數據庫。不象被設計成每分鐘需要處理成百上千條數據變化的數據庫,例如:在電子商務中經常用到的在線交易處理(OLTP)系統,LDAP主要是優化數據讀取的性能。

    LDAP目錄的優勢

    現在該說說LDAP目錄到底有些什么優勢了。現在LDAP的流行是很多因數共同作用的結果。我在這里說的不過是一些基本的原因,請你注意一下這不過是一小部分原因。

    可能LDAP最大的優勢是:可以在任何計算機平臺上,用很容易獲得的而且數目不斷增加的LDAP的客戶端程序訪問LDAP目錄。而且也很容易定制應用程序為它加上LDAP的支持。

    LDAP協議是跨平臺的和標準的協議,因此應用程序就不用為LDAP目錄放在什么樣的服務器上操心了。實際上,LDAP得到了業界的廣泛認可,因為它是Internet的標準。產商都很愿意在產品中加入對LDAP的支持,因為他們根本不用考慮另一端(客戶端或服務端)是怎么樣的。LDAP服務器可以是任何一個開發源代碼或商用的LDAP目錄服務器(或者還可能是具有LDAP界面的關系型數據庫),因為可以用同樣的協議、客戶端連接軟件包和查詢命令與LDAP服務器進行交互。與LDAP不同的是,如果軟件產商想在軟件產品中集成對DBMS的支持,那么通常都要對每一個數據庫服務器單獨定制。

    不象很多商用的關系型數據庫,你不必為LDAP的每一個客戶端連接或許可協議付費。

    大多數的LDAP服務器安裝起來很簡單,也容易維護和優化。

    LDAP服務器可以用“推”或“拉”的方法復制部分或全部數據,例如:可以把數據“推”到遠程的辦公室,以增加數據的安全性。復制技術是內置在LDAP服務器中的而且很容易配置。如果要在DBMS中使用相同的復制功能,數據庫產商就會要你支付額外的費用,而且也很難管理。

    LDAP允許你根據需要使用ACI(一般都稱為ACL或者訪問控制列表)控制對數據讀和寫的權限。例如,設備管理員可以有權改變員工的工作地點和辦公室號碼,但是不允許改變記錄中其它的域。ACI可以根據誰訪問數據、訪問什么數據、數據存在什么地方以及其它對數據進行訪問控制。因為這些都是由LDAP目錄服務器完成的,所以不用擔心在客戶端的應用程序上是否要進行安全檢查。

    LDAP對于這樣存儲這樣的信息最為有用,也就是數據需要從不同的地點讀取,但是不需要經常更新。例如,這些信息存儲在LDAP目錄中是十分有效的:

    l        公司員工的電話號碼簿和組織結構圖

    l        客戶的聯系信息

    l        計算機管理需要的信息,包括NIS映射、email假名,等等

    l        軟件包的配置信息

    l        公用證書和安全密匙

    什么時候該用LDAP存儲數據?

    大多數的LDAP服務器都為讀密集型的操作進行專門的優化。因此,當從LDAP服務器中讀取數據的時候會比從專門為OLTP優化的關系型數據庫中讀取數據快一個數量級。也是因為專門為讀的性能進行優化,大多數的LDAP目錄服務器并不適合存儲需要需要經常改變的數據。例如,用LDAP服務器來存儲電話號碼是一個很好的選擇,但是它不能作為電子商務站點的數據庫服務器。

    如果下面每一個問題的答案都是“是”,那么把數據存在LDAP中就是一個好主意。

    l        需要在任何平臺上都能讀取數據嗎?

    l        每一個單獨的記錄項是不是每一天都只有很少的改變?

    l        可以把數據存在平面數據庫(flat database)而不是關系型數據庫中嗎?換句話來說,也就是不管什么范式不范式的,把所有東西都存在一個記錄中(差不多只要滿足第一范式)。

    最后一個問題可能會唬住一些人,其實用平面數據庫去存儲一些關系型的數據也是很一般的。例如,一條公司員工的記錄就可以包含經理的登錄名。用LDAP來存儲這類信息是很方便的。一個簡單的判斷方法:如果可以把保數據存在一張張的卡片里,就可以很容易地把它存在LDAP目錄里。

    LDAP目錄樹的結構

    LDAP目錄以樹狀的層次結構來存儲數據。如果你對自頂向下的DNS樹或UNIX文件的目錄樹比較熟悉,也就很容易掌握LDAP目錄樹這個概念了。就象DNS的主機名那樣,LDAP目錄記錄的標識名(Distinguished Name,簡稱DN)是用來讀取單個記錄,以及回溯到樹的頂部。后面會做詳細地介紹。

    為什么要用層次結構來組織數據呢?原因是多方面的。下面是可能遇到的一些情況:

    l        如果你想把所有的美國客戶的聯系信息都“推”到位于到西雅圖辦公室(負責營銷)的LDAP服務器上,但是你不想把公司的資產管理信息“推”到那里。

    l        你可能想根據目錄樹的結構給予不同的員工組不同的權限。在下面的例子里,資產管理組對“asset-mgmt”部分有完全的訪問權限,但是不能訪問其它地方。

    l        LDAP存儲和復制功能結合起來,可以定制目錄樹的結構以降低對WAN帶寬的要求。位于西雅圖的營銷辦公室需要每分鐘更新的美國銷售狀況的信息,但是歐洲的銷售情況就只要每小時更新一次就行了。

    刨根問底:基準DN

    LDAP目錄樹的最頂部就是根,也就是所謂的“基準DN”。基準DN通常使用下面列出的三種格式之一。假定我在名為FooBar的電子商務公司工作,這家公司在Internet上的名字是foobar.com

    o="FooBar, Inc.", c=US

    (以X.500格式表示的基準DN

    在這個例子中,o=FooBar, Inc. 表示組織名,在這里就是公司名的同義詞。c=US 表示公司的總部在美國。以前,一般都用這種方式來表示基準DN。但是事物總是在不斷變化的,現在所有的公司都已經(或計劃)上Internet上。隨著Internet的全球化,在基準DN中使用國家代碼很容易讓人產生混淆。現在,X.500格式發展成下面列出的兩種格式。

    o=foobar.com

    (用公司的Internet地址表示的基準DN

    這種格式很直觀,用公司的域名作為基準DN。這也是現在最常用的格式。

    dc=foobar, dc=com

    (用DNS域名的不同部分組成的基準DN

    就象上面那一種格式,這種格式也是以DNS域名為基礎的,但是上面那種格式不改變域名(也就更易讀),而這種格式把域名:foobar.com分成兩部分 dc=foobar, dc=com在理論上,這種格式可能會更靈活一點,但是對于最終用戶來說也更難記憶一點。考慮一下foobar.com這個例子。當foobar.comgizmo.com合并之后,可以簡單的把“dc=com”當作基準DN。把新的記錄放到已經存在的dc=gizmo, dc=com目錄下,這樣就簡化了很多工作(當然,如果foobar.comwocket.edu合并,這個方法就不能用了)。如果LDAP服務器是新安裝的,我建議你使用這種格式。再請注意一下,如果你打算使用活動目錄(Actrive Directory),Microsoft已經限制你必須使用這種格式。

    更上一層樓:在目錄樹中怎么組織數據

    UNIX文件系統中,最頂層是根目錄(root)。在根目錄的下面有很多的文件和目錄。象上面介紹的那樣,LDAP目錄也是用同樣的方法組織起來的。

    在根目錄下,要把數據從邏輯上區分開。因為歷史上(X.500)的原因,大多數LDAP目錄用OU從邏輯上把數據分開來。OU表示“Organization Unit”,在X.500協議中是用來表示公司內部的機構:銷售部、財務部,等等。現在LDAP還保留ou=這樣的命名規則,但是擴展了分類的范圍,可以分類為:ou=people, ou=groups, ou=devices,等等。更低一級的OU有時用來做更細的歸類。例如:LDAP目錄樹(不包括單獨的記錄)可能會是這樣的:

        dc=foobar, dc=com

            ou=customers

                ou=asia

                ou=europe

                ou=usa

            ou=employees

            ou=rooms

            ou=groups

            ou=assets-mgmt

            ou=nisgroups

            ou=recipes

    單獨的LDAP記錄

    DNLDAP記錄項的名字

    LDAP目錄中的所有記錄項都有一個唯一的“Distinguished Name”,也就是DN。每一個LDAP記錄項的DN是由兩個部分組成的:相對DNRDN)和記錄在LDAP目錄中的位置。

    RDNDN中與目錄樹的結構無關的部分。在LDAP目錄中存儲的記錄項都要有一個名字,這個名字通常存在cnCommon Name)這個屬性里。因為幾乎所有的東西都有一個名字,在LDAP中存儲的對象都用它們的cn值作為RDN的基礎。如果我把最喜歡的吃燕麥粥食譜存為一個記錄,我就會用cn=Oatmeal Deluxe作為記錄項的RDN

    l         我的LDAP目錄的基準DNdc=foobar,dc=com

    l         我把自己的食譜作為LDAP的記錄項存在ou=recipes

    l        我的LDAP記錄項的RDN設為cn=Oatmeal Deluxe

    上面這些構成了燕麥粥食譜的LDAP記錄的完整DN。記住,DN的讀法和DNS主機名類似。下面就是完整的DN

    cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com

    舉一個實際的例子來說明DN

    現在為公司的員工設置一個DN。可以用基于cnuidUser ID),作為典型的用戶帳號。例如,FooBar的員工Fran Smith(登錄名:fsmith)的DN可以為下面兩種格式:

    uid=fsmith,ou=employees,dc=foobar,dc=com

    (基于登錄名)

    LDAP(以及X.500)用uid表示“User ID”,不要把它和UNIXuid號混淆了。大多數公司都會給每一個員工唯一的登錄名,因此用這個辦法可以很好地保存員工的信息。你不用擔心以后還會有一個叫Fran Smith的加入公司,如果Fran改變了她的名字(結婚?離婚?或宗教原因?),也用不著改變LDAP記錄項的DN

    cn=Fran Smith,ou=employees,dc=foobar,dc=com

    (基于姓名)

    可以看到這種格式使用了Common NameCN)。可以把Common Name當成一個人的全名。這種格式有一個很明顯的缺點就是:如果名字改變了,LDAP的記錄就要從一個DN轉移到另一個DN。但是,我們應該盡可能地避免改變一個記錄項的DN

    定制目錄的對象類型

    你可以用LDAP存儲各種類型的數據對象,只要這些對象可以用屬性來表示,下面這些是可以在LDAP中存儲的一些信息:

    l        員工信息:員工的姓名、登錄名、口令、員工號、他的經理的登錄名,郵件服務器,等等。

    l        物品跟蹤信息:計算機名、IP地址、標簽、型號、所在位置,等等。

    l        客戶聯系列表:客戶的公司名、主要聯系人的電話、傳真和電子郵件,等等。

    l        會議廳信息:會議廳的名字、位置、可以坐多少人、電話號碼、是否有投影機。

    l        食譜信息:菜的名字、配料、烹調方法以及準備方法。

    因為LDAP目錄可以定制成存儲任何文本或二進制數據,到底存什么要由你自己決定。LDAP目錄用對象類型(object classes)的概念來定義運行哪一類的對象使用什么屬性。在幾乎所有的LDAP服務器中,你都要根據自己的需要擴展基本的LDAP目錄的功能,創建新的對象類型或者擴展現存的對象類型。

    LDAP目錄以一系列“屬性對”的形式來存儲記錄項,每一個記錄項包括屬性類型和屬性值(這與關系型數據庫用行和列來存取數據有根本的不同)。下面是我存在LDAP目錄中的一部分食譜記錄:

      dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com

      cn: Instant Oatmeal Deluxe

      recipeCuisine: breakfast

      recipeIngredient: 1 packet instant oatmeal

      recipeIngredient: 1 cup water

      recipeIngredient: 1 pinch salt

      recipeIngredient: 1 tsp brown sugar

      recipeIngredient: 1/4 apple, any type

    請注意上面每一種配料都作為屬性recipeIngredient值。LDAP目錄被設計成象上面那樣為一個屬性保存多個值的,而不是在每一個屬性的后面用逗號把一系列值分開。

    因為用這樣的方式存儲數據,所以數據庫就有很大的靈活性,不必為加入一些新的數據就重新創建表和索引。更重要的是,LDAP目錄不必花費內存或硬盤空間處理“空”域,也就是說,實際上不使用可選擇的域也不會花費你任何資源。

    作為例子的一個單獨的數據項

    讓我們看看下面這個例子。我們用Foobar, Inc.的員工Fran SmithLDAP記錄。這個記錄項的格式是LDIF,用來導入和導出LDAP目錄的記錄項。

      dn: uid=fsmith, ou=employees, dc=foobar, dc=com

      objectclass: person

      objectclass: organizationalPerson

      objectclass: inetOrgPerson

      objectclass: foobarPerson

      uid: fsmith

      givenname: Fran

      sn: Smith

      cn: Fran Smith

      cn: Frances Smith

      telephonenumber: 510-555-1234

      roomnumber: 122G

      o: Foobar, Inc.

      mailRoutingAddress: fsmith@foobar.com

      mailhost: mail.foobar.com

      userpassword: {crypt}3x1231v76T89N

      uidnumber: 1234

      gidnumber: 1200

      homedirectory: /home/fsmith

      loginshell: /usr/local/bin/bash

    屬性的值在保存的時候是保留大小寫的,但是在默認情況下搜索的時候是不區分大小寫的。某些特殊的屬性(例如,password)在搜索的時候需要區分大小寫。

    讓我們一點一點地分析上面的記錄項。

    dn: uid=fsmith, ou=employees, dc=foobar, dc=com

    這是FranLDAP記錄項的完整DN,包括在目錄樹中的完整路徑。LDAP(和X.500)使用uidUser ID),不要把它和UNIXuid號混淆了。

      objectclass: person

      objectclass: organizationalPerson

      objectclass: inetOrgPerson

      objectclass: foobarPerson

    可以為任何一個對象根據需要分配多個對象類型。person對象類型要求cncommon name)和snsurname)這兩個域不能為空。persion對象類型允許有其它的可選域,包括givennametelephonenumber,等等。organizational Personperson加入更多的可選域,inetOrgPerson又加入更多的可選域(包括電子郵件信息)。最后,foobarPerson是為Foobar定制的對象類型,加入了很多定制的屬性。

      uid: fsmith

      givenname: Fran

      sn: Smith

      cn: Fran Smith

      cn: Frances Smith

      telephonenumber: 510-555-1234

      roomnumber: 122G

      o: Foobar, Inc.

    以前說過了,uid表示User ID。當看到uid的時候,就在腦袋里想一想“login”。

    請注意CN有多個值。就象上面介紹的,LDAP允許某些屬性有多個值。為什么允許有多個值呢?假定你在用公司的LDAP服務器查找Fran的電話號碼。你可能只知道她的名字叫Fran,但是對人力資源處的人來說她的正式名字叫做Frances。因為保存了她的兩個名字,所以用任何一個名字檢索都可以找到Fran的電話號碼、電子郵件和辦公房間號,等等。

      mailRoutingAddress: fsmith@foobar.com

      mailhost: mail.foobar.com

    就象現在大多數的公司都上網了,FoobarSendmail發送郵件和處理外部郵件路由信息。Foobar把所有用戶的郵件信息都存在LDAP中。最新版本的Sendmail支持這項功能。

      Userpassword: {crypt}3x1231v76T89N

      uidnumber: 1234

      gidnumber: 1200

      gecos: Frances Smith

      homedirectory: /home/fsmith

      loginshell: /usr/local/bin/bash

    注意,Foobar的系統管理員把所有用戶的口令映射信息也都存在LDAP中。FoobarPerson類型的對象具有這種能力。再注意一下,用戶口令是用UNIX的口令加密格式存儲的。UNIXuid在這里為uidnumber提醒你一下,關于如何在LDAP中保存NIS信息,有完整的一份RFC。在以后的文章中我會談一談NIS的集成。

    LDAP復制

    LDAP服務器可以使用基于“推”或者“拉”的技術,用簡單或基于安全證書的安全驗證,復制一部分或者所有的數據。

    例如,Foobar有一個“公用的”LDAP服務器,地址為ldap.foobar.com,端口為389Netscape Communicator的電子郵件查詢功能、UNIX的“ph”命令要用到這個服務器,用戶也可以在任何地方查詢這個服務器上的員工和客戶聯系信息。公司的主LDAP服務器運行在相同的計算機上,不過端口號是1389

    你可能即不想讓員工查詢資產管理或食譜的信息,又不想讓信息技術人員看到整個公司的LDAP目錄。為了解決這個問題,Foobar有選擇地把子目錄樹從主LDAP服務器復制到“公用”LDAP服務器上,不復制需要隱藏的信息。為了保持數據始終是最新的,主目錄服務器被設置成即時“推”同步。這些種方法主要是為了方便,而不是安全,因為如果有權限的用戶想查詢所有的數據,可以用另一個LDAP端口。

    假定Foobar通過從奧克蘭到歐洲的低帶寬數據的連接用LDAP管理客戶聯系信息。可以建立從ldap.foobar.com:1389munich-ldap.foobar.com:389的數據復制,象下面這樣:

      periodic pull: ou=asia,ou=customers,o=sendmail.com

      periodic pull: ou=us,ou=customers,o=sendmail.com

      immediate push: ou=europe,ou=customers,o=sendmail.com

    “拉”連接每15分鐘同步一次,在上面假定的情況下足夠了。“推”連接保證任何歐洲的聯系信息發生了變化就立即被“推”到Munich

    用上面的復制模式,用戶為了訪問數據需要連接到哪一臺服務器呢?在Munich的用戶可以簡單地連接到本地服務器。如果他們改變了數據,本地的LDAP服務器就會把這些變化傳到主LDAP服務器。然后,主LDAP服務器把這些變化“推”回本地的“公用”LDAP服務器保持數據的同步。這對本地的用戶有很大的好處,因為所有的查詢(大多數是讀)都在本地的服務器上進行,速度非常快。當需要改變信息的時候,最終用戶不需要重新配置客戶端的軟件,因為LDAP目錄服務器為他們完成了所有的數據交換工作。

    安全和訪問控制

    LDAP提供很復雜的不同層次的訪問控制或者ACI。因這些訪問可以在服務器端控制,這比用客戶端的軟件保證數據的安全可安全多了。

    LDAPACI,可以完成:

    l        給予用戶改變他們自己的電話號碼和家庭地址的權限,但是限制他們對其它數據(如,職務名稱,經理的登錄名,等等)只有“只讀”權限。

    l        給予“HR-admins”組中的所有人權限以改變下面這些用戶的信息:經理、工作名稱、員工號、部門名稱和部門號。但是對其它域沒有寫權限。

    l        禁止任何人查詢LDAP服務器上的用戶口令,但是可以允許用戶改變他或她自己的口令。

    l        給予經理訪問他們上級的家庭電話的只讀權限,但是禁止其他人有這個權限。

    l        給予“host-admins”組中的任何人創建、刪除和編輯所有保存在LDAP服務器中的與計算機主機有關的信息

    l        通過Web,允許“foobar-sales”組中的成員有選擇地給予或禁止他們自己讀取一部分客戶聯系數據的讀權限。這將允許他們把客戶聯系信息下載到本地的筆記本電腦或個人數字助理(PDA)上。(如果銷售人員的軟件都支持LDAP,這將非常有用)

    l        通過Web,允許組的所有者刪除或添加他們擁有的組的成員。例如:可以允許銷售經理給予或禁止銷售人員改變Web頁的權限。也可以允許郵件假名(mail aliase)的所有者不經過IT技術人員就直接從郵件假名中刪除或添加用戶。“公用”的郵件列表應該允許用戶從郵件假名中添加或刪除自己(但是只能是自己)。也可以對IP地址或主機名加以限制。例如,某些域只允許用戶IP地址以192.168.200.*開頭的有讀的權限,或者用戶反向查找DNS得到的主機名必須為*.foobar.com

    這不過是讓你了解一下可以對LDAP目錄進行怎樣的訪問控制,實際上真正實現起來需要做的工作比這多得多。在以后的文章中我會詳細地討論訪問控制。


    原文地址:http://www.linuxaid.com.cn/engineer/brimmer/html/LDAP.htm

    posted on 2006-02-20 10:39 hopeshared 閱讀(380) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲高清美女一区二区三区| 亚洲自偷自偷在线成人网站传媒 | av免费不卡国产观看| 暖暖免费高清日本中文| 亚洲Av无码专区国产乱码DVD | 中文字幕在线免费看线人| 永久免费AV无码网站在线观看| 亚洲人成电影在线天堂| 国产三级在线免费观看| 免费a级毛片无码av| 亚洲日韩亚洲另类激情文学| 99久久99久久精品免费看蜜桃| 精品亚洲福利一区二区| 成人无码区免费视频观看| 亚洲第一区视频在线观看| 午夜免费啪视频在线观看| 亚洲日本va在线视频观看| 黄页网址大全免费观看12网站| 毛片免费全部免费观看| 亚洲日韩中文字幕一区| 亚洲综合色婷婷七月丁香| 中国一级特黄高清免费的大片中国一级黄色片| 免费A级毛片在线播放不收费| 日韩电影免费在线观看中文字幕| 亚洲国产精品VA在线观看麻豆| 91国内免费在线视频| 亚洲中文精品久久久久久不卡| 亚洲成av人影院| 人人狠狠综合久久亚洲高清| 国产成人亚洲精品电影| 亚洲免费一区二区| 一区二区三区免费看| 国产偷国产偷亚洲清高动态图| 嫩草视频在线免费观看| 一级毛片在线播放免费| 亚洲三级在线视频| 国产精品视频免费一区二区三区| 皇色在线免费视频| 亚洲欧美在线x视频| 亚洲精品中文字幕无乱码麻豆| 免费一级毛片不卡在线播放|