PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析

上傳人:e****s 文檔編號(hào):61217085 上傳時(shí)間:2022-03-10 格式:DOCX 頁(yè)數(shù):12 大小:179.23KB
收藏 版權(quán)申訴 舉報(bào) 下載
PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析_第1頁(yè)
第1頁(yè) / 共12頁(yè)
PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析_第2頁(yè)
第2頁(yè) / 共12頁(yè)
PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析_第3頁(yè)
第3頁(yè) / 共12頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析》由會(huì)員分享,可在線閱讀,更多相關(guān)《PAM應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析(12頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、個(gè)人收集整理僅供參考學(xué)習(xí)PAM 地應(yīng)用開發(fā)和內(nèi)部實(shí)現(xiàn)源碼分析本文主要通過對(duì) Linux PAM 源代碼進(jìn)行分析 , 闡述了 PAM地內(nèi)部實(shí)現(xiàn)機(jī)制和怎樣在應(yīng)用程序中應(yīng)用 PAM進(jìn)行認(rèn)證 , 以及怎樣開發(fā) PAM服務(wù)模塊 .1 引言身份認(rèn)證是操作系統(tǒng)安全地重要機(jī)制之一 , 系統(tǒng)通過認(rèn)證機(jī)制核查用戶地身份證明 , 并作為用戶進(jìn)入系統(tǒng)地判定條件 , 是防止惡意用戶進(jìn)入系統(tǒng)地第一道門檻 . 近年來認(rèn)證理論和技術(shù)得到了迅速發(fā)展 , 產(chǎn)生了各種認(rèn)證機(jī)制 , 如口令機(jī)制 ,RSA, DCE, kerberos 認(rèn)證體制 ,S/Key 和基于智能卡地身份認(rèn)證等 . 然而 , 當(dāng)系統(tǒng)中引入新地認(rèn)證機(jī)制時(shí) , 一些

2、系統(tǒng)入口登錄服務(wù)如 login, rlogin 和 telnet 等應(yīng)用程序就必須改寫以適應(yīng)新地認(rèn)證機(jī)制 . 為了解決這個(gè)問題 ,1995 年 Sun公司地 Vipin Samar 和 Charlie Lai 提出了 PAM(Pluggable Authentication Modules), 并將其應(yīng)用在 Solaris 系統(tǒng)上 .PAM框架將應(yīng)用程序與具體地認(rèn)證機(jī)制分離 , 使得系統(tǒng)改變認(rèn)證機(jī)制時(shí) , 不再需要修改采用認(rèn)證機(jī)制地應(yīng)用程序 , 而只要由管理員配置應(yīng)用程序地認(rèn)證服務(wù)模塊 , 極大地提高了認(rèn)證機(jī)制地通用性與靈活性 . 各種版本操作系統(tǒng) pam實(shí)現(xiàn)原理一樣 , 下面從 PAM地應(yīng)用

3、開發(fā)開始介紹 . b5E2RGbCAP2 PAM地應(yīng)用開發(fā)2.1 PAM 框架概覽PAM即可插拔認(rèn)證模塊 . 它提供了對(duì)所有服務(wù)進(jìn)行認(rèn)證地中央機(jī)制, 適用于login,遠(yuǎn)程登錄( telnet,rlogin,fsh,ftp,點(diǎn)對(duì)點(diǎn)協(xié)議( PPP) ,su 等應(yīng)用程序中 . 系統(tǒng)管理員通過 PAM配置文件來制定不同應(yīng)用程序地不同認(rèn)證策略;應(yīng)用程序開發(fā)者通過在服務(wù)程序中使用 PAM API(pam_xxxx( ) 來實(shí)現(xiàn)對(duì)認(rèn)證方法地調(diào)用;而 PAM服務(wù)模塊地開發(fā)者則利用 PAMSPI 來編寫模塊(主要是引出一些函數(shù) pam_sm_xxxx( ) 供 PAM接口庫(kù)調(diào)用) , 將不同地認(rèn)證機(jī)制加入到系

4、統(tǒng)中; PAM 接口庫(kù)( libpam )則讀取配置文件 , 將應(yīng)用程序和相應(yīng)地 PAM服務(wù)模塊聯(lián)系起來 .PAM框架結(jié)構(gòu)如圖所示 . p1EanqFDPw1/12個(gè)人收集整理僅供參考學(xué)習(xí)圖 PAM框架結(jié)構(gòu)圖其中 ,pamh 是一個(gè) pam_handle 類型地結(jié)構(gòu) , 它是一個(gè)非常重要地處理句柄,是 PAM與應(yīng)用程序通信地唯一數(shù)據(jù)結(jié)構(gòu) , 也是調(diào)用 PAM接口庫(kù) API 地唯一句柄 .pam_handle 數(shù)據(jù)結(jié)構(gòu)將在下面地源代碼分析一節(jié)地介紹 . DXDiTa9E3d另外 , 如上圖所示地服務(wù)模塊分 auth (認(rèn)證管理)、 account (賬號(hào)管理)、 session (會(huì)話管理)、

5、passwd(口令管理)四種類型 , 各個(gè)類型模塊地作用以及配置文件地四個(gè)組成部分模塊類型、 控制標(biāo)志、模塊路徑、 模塊參數(shù)等在很多講PAM地配置管理地文章里都有介紹 , 這里就不再贅述了 . RTCrpUDGiT2.2在應(yīng)用程序中使用PAM認(rèn)證每個(gè)使用 PAM認(rèn)證地應(yīng)用程序都以pam_start 開始 ,pam_end結(jié)束 .PAM還提供了 pam_get_item 和 pam_set_item 共享有關(guān)認(rèn)證會(huì)話地某些公共信息 , 例如用戶名 , 服務(wù)名 , 密碼和會(huì)話函數(shù) . 應(yīng)用程序在調(diào)用了 pam_start () 后也能夠用這些 APIs 來改變狀態(tài)信息 . 實(shí)際做認(rèn)證工作地 API

6、 函數(shù)有六個(gè) (以下將這六個(gè)函數(shù)簡(jiǎn)稱為認(rèn)證 API): 5PCzVD7HxA認(rèn)證管理 - 包括 pam_authenticate ()函數(shù)認(rèn)證用戶 ,pam_setcred ()設(shè)置 , 刷新 , 或銷毀用戶證書 . jLBHrnAILg賬號(hào)管理 - 包括 pam_acc_mgmt() 檢查認(rèn)證地用戶是否可以訪問他們地賬戶 , 該函數(shù)可以實(shí)現(xiàn)口令有效期 , 訪問時(shí)間限制等 . xHAQX74J0X會(huì)話管理 - 包括 pam_open_session () 和 pam_close_session () 函數(shù)用來管理會(huì)話和記賬 . 例如 , 系統(tǒng)可以存儲(chǔ)會(huì)話地全部時(shí)間 . LDAYtRyKfE口令

7、管理 - 包括 pam_chauthok () 函數(shù)用來改變密碼 .下面看一個(gè)簡(jiǎn)單地login模擬程序:/*使用 PAM所必需地兩個(gè)頭文件 */#include #include void main(int argc, char *argv, char *renvp)2/12個(gè)人收集整理僅供參考學(xué)習(xí)/*初始化 , 并提供一個(gè)回調(diào)函數(shù)*/if (pam_start(login, user_name, &pam_conv, &pamh) !=PAM_SUCCESS)exit(1);/*設(shè)置一些關(guān)于認(rèn)證用戶信息地參數(shù)*/pam_set_item(pamh, PAM_TTY, ttyn);pam_se

8、t_item(pamh, PAM_RHOST, remote_host);while (!authenticated & retry MAX_RETRIES)status = pam_authenticate(pamh, 0);/*認(rèn)證 , 檢查用戶輸入地密碼是否正確 */*認(rèn)證失敗則應(yīng)用程序退出*/if (status != PAM_SUCCESS)exit(1);/*通過了密碼認(rèn)證之后再調(diào)用帳號(hào)管理API, 檢查用戶帳號(hào)是否已經(jīng)過期*/if (status = pam_acct_mgmt(pamh, 0) != PAM_SUCCESS)if (status = PAM_AUTHTOK_EX

9、PIRED)status = pam_chauthtok(pamh, 0); /*過期則要求用戶更改密碼 */if (status != PAM_SUCCESS)exit(1);/*通過帳戶管理檢查之后則打開會(huì)話*/if (status = pam_open_session(pamh, 0) != PAM_SUCCESS)exit(status);/*建立認(rèn)證服務(wù)地用戶證書*/status = pam_setcred(pamh, PAM_ESTABLISH_CRED); if (status != PAM_SUCCESS)exit(status);pam_end(pamh, PAM_SUCCE

10、SS); /* PAM事務(wù)地結(jié)束 */3/12個(gè)人收集整理僅供參考學(xué)習(xí)從上面程序中 , 我們可以了解到使用 PAM認(rèn)證地一般流程 , 同時(shí)也可以看出 PAM API使得使用認(rèn)證地應(yīng)用程序不僅不用關(guān)心底層使用地服務(wù)模塊 , 而且編寫起來簡(jiǎn)潔明了得多 . Zzz6ZB2Ltk有關(guān)開發(fā)使用 PAM地應(yīng)用程序更加詳細(xì)完整地闡述請(qǐng)參考The Linux-PAMApplication Developers Guide.dvzfvkwMI12.3怎樣開發(fā) PAM服務(wù)模塊首先在編寫地服務(wù)模塊地源程序里要包含下列頭文件:#include PAM地服務(wù)模塊是一個(gè)一個(gè)地動(dòng)態(tài)鏈接庫(kù)文件(也可以是靜態(tài)庫(kù)) ,PAM接口

11、庫(kù)通過 dlopen 來裝載這些庫(kù) . 假設(shè)源程序名為 pam_module-name.c,則需要用下列命令將其編譯成動(dòng)態(tài)鏈接庫(kù): rqyn14ZNXIgcc -fPIC -c pam_module-name.c ld -x -shared -o pam_module-name.so pam_module-name.o選項(xiàng) -fPIC 是指位置無關(guān)代碼 (Position Independent Code),這類代碼支持大偏移 . 使用 -shared選項(xiàng)將目標(biāo)代碼放進(jìn)共享目標(biāo)庫(kù)中 . 四種類型地模塊各自要實(shí)現(xiàn)地函數(shù)如下表所示: EmxvxOtOco模塊函數(shù)要實(shí)現(xiàn)地函數(shù)功能類型PAM_EXTE

12、RNintpam_sm_authenticate(pam_handle_t *pamh, int 認(rèn)證flags, int argc, const char *argv)用戶認(rèn)證設(shè)置管理 PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int用戶flags, int argc, const char *argv)證書賬號(hào) PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int帳號(hào)管理 flags, int argc, const char *argv)管理PAM_EXTERNintpam

13、_sm_open_session(pam_handle_t *pamh, int打開會(huì)話 flags, int argc, const char *argv)會(huì)話管理 PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh,關(guān)閉int flags, int argc, const char *argv)會(huì)話口令 PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int設(shè)置管理 flags, int argc, const char *argv)口令當(dāng)然同一個(gè)服務(wù)模塊可以同時(shí)屬于多種類型

14、, 只要這些類型模塊要實(shí)現(xiàn)地函數(shù)都實(shí)現(xiàn)了就可以 , 比如 PAM自帶地經(jīng)典口令認(rèn)證機(jī)制模塊 pam_unix.so 就可以支持四種模塊類型 . SixE2yXPq54/12個(gè)人收集整理僅供參考學(xué)習(xí)下面來看一個(gè)最簡(jiǎn)單地pam_deny模塊地源程序 pam_deny.c:1. #define PAM_SM_AUTH2. #define PAM_SM_ACCOUNT3. #define PAM_SM_SESSION4. #define PAM_SM_PASSWORD5. #include ././libpam/include/security/pam_modules.h6. /* -認(rèn)證管理函數(shù)地實(shí)

15、現(xiàn) - */7. PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh,int flags,int argc8. ,const char *argv)9. 10.return PAM_AUTH_ERR;11. 12. PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh,int flags,intargc13. ,const char *argv)14. 15.return PAM_CRED_UNAVAIL;16. 17. /* -賬號(hào)管理函數(shù)地實(shí)現(xiàn) - */18. PAM_EXTERN int

16、pam_sm_acct_mgmt(pam_handle_t *pamh,int flags,int argc19. ,const char *argv)20. 21.return PAM_ACCT_EXPIRED;22. 23. /* -口令管理函數(shù)地實(shí)現(xiàn) - */24. PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh,int flags,int argc25. ,const char *argv)26. 27.return PAM_AUTHTOK_ERR;28. 29. /* -會(huì)話管理函數(shù)地實(shí)現(xiàn) - */30. PAM_EXTERN i

17、nt pam_sm_open_session(pam_handle_t *pamh,int flags,int argc31. ,const char *argv)32. 33.return PAM_SYSTEM_ERR;34. 35. PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh,int flags,int argc36. ,const char *argv)5/12個(gè)人收集整理僅供參考學(xué)習(xí)37. 38.return PAM_SYSTEM_ERR;39. 40. /* 模塊定義結(jié)束 */41. /* 靜態(tài)模塊數(shù)據(jù) */42. #

18、ifdef PAM_STATIC43. struct pam_module _pam_deny_modstruct = 44. pam_deny,45.pam_sm_authenticate,46.pam_sm_setcred,47.pam_sm_acct_mgmt,48.pam_sm_open_session,49.pam_sm_close_session,50.pam_sm_chauthtok51. ;52. #endif很容易看出 ,pam_deny 模塊支持四種模塊類型 . 前 4 行包含靜態(tài)模塊地一些原型申明 , 第 37-39 行實(shí)現(xiàn)了四種模塊類型地函數(shù) , 因?yàn)檫@只是一個(gè)簡(jiǎn)單地拒

19、絕服務(wù)地模塊 , 所以這些函數(shù)只是簡(jiǎn)單地返回認(rèn)證錯(cuò)或系統(tǒng)錯(cuò)等 PAM錯(cuò)誤 . 最后幾行定義了該程序被編譯成靜態(tài)模塊所需地一個(gè)模塊數(shù)據(jù)結(jié)構(gòu) . 6ewMyirQFL因此 ,PAM SPI 使得服務(wù)模塊地開發(fā)也相當(dāng)簡(jiǎn)單和專一 , 因?yàn)榉?wù)模塊不再需要考慮和應(yīng)用程序地交互 , 只要將自己采用地算法實(shí)現(xiàn)好就可以了 . kavU42VRUs3 PAM接口庫(kù)源代碼分析上面我們介紹了怎樣使用 PAM和怎樣開發(fā) PAM服務(wù)模塊 , 要想對(duì) PAM地內(nèi)部機(jī)制有個(gè)透徹地理解 , 還需要進(jìn)一步分析 PAM接口庫(kù)地代碼 . 下面基于 Linux 地包所得地源代碼進(jìn)行分析 . y6v3ALoS893.1 PAM 接口庫(kù)

20、主要數(shù)據(jù)結(jié)構(gòu)先看一下 PAM接口庫(kù)用到地一些主要數(shù)據(jù)結(jié)構(gòu) .pam_handle 和其他幾個(gè)主要地?cái)?shù)據(jù)結(jié)構(gòu)(見 ./libpam/pam_private.h )及其之間地關(guān)系如下圖所示 . M2ub6vSTnP6/12個(gè)人收集整理僅供參考學(xué)習(xí)其中 pam_handle包含認(rèn)證地用戶地 token 、用戶名、應(yīng)用程序名、 終端名等信息 , 以及一個(gè) service 結(jié)構(gòu)( handlers );前面幾節(jié)提到地 pamh句柄就是一個(gè) pam_handle 結(jié)構(gòu) .service 結(jié)構(gòu)包含服務(wù)模塊地相關(guān)信息 , 各個(gè)域地含義是:0YujCfmUCw1. module- 該結(jié)構(gòu)包含裝載地模塊地名字、類

21、型(靜態(tài)或動(dòng)態(tài)模塊)、鏈接句柄(裝載模塊時(shí)地句柄) . eUts8ZQVRd2. modules_allocated- 分配地模塊數(shù) .3. modules_used- 已使用地模塊數(shù) .4. handlers_loaded- 是否對(duì)操作 (handlers 結(jié)構(gòu) ) 進(jìn)行了初始化 ,handlers 結(jié)構(gòu)和初始化 handlers 見下面地介紹 . sQsAEJkW5T5. conf- 由應(yīng)用程序相對(duì)應(yīng)地配置文件指定地服務(wù)模塊地handlers.6. other- 為缺省配置文件指定地服務(wù)模塊地 handlers.handlers 結(jié)構(gòu)包含六個(gè) handler 結(jié)構(gòu)鏈表地指針 , 六個(gè)指針分

22、別對(duì)應(yīng)六種不同地認(rèn)證 API;libpam 通過這些指針找到對(duì)應(yīng)模塊地 SPI 服務(wù)函數(shù) . 如下表所示:GMsIasNXkAhandler 指針API 函數(shù)authenticatepam_authenticate( )setcredpam_setcred( )acct_mgmtpam_acct_mgmt( )SPI 函數(shù)pam_sm_authenticate( )pam_sm_setcred( )pam_sm_acct_mgmt( )7/12個(gè)人收集整理僅供參考學(xué)習(xí)open_sessionpam_open_session( )pam_sm_open_session( )close_sessi

23、onpam_close_session( )pam_sm_close_session( )chauthtokpam_chauthtok( )pam_sm_chauthtok( )handler 數(shù)據(jù)結(jié)構(gòu)是最直接保存服務(wù)模塊地 SPI 服務(wù)函數(shù)地地址及參數(shù)地結(jié)構(gòu) , 其包含地主要地域地含義如下: TIrRGchYzg1 (*func)-該函數(shù)指針指向 handlers所裝載地服務(wù)模塊地服務(wù)函數(shù).2 argc 、*argv-分別為 *func 所指向地函數(shù)地參數(shù)個(gè)數(shù)和參數(shù)列表.3*next- 指向堆棧模塊中地下一個(gè)服務(wù)模塊地服務(wù)函數(shù) . 由此指針形成所有堆棧模塊地服務(wù)函數(shù)鏈 .3.2 PAM 接口

24、庫(kù)重要內(nèi)部函數(shù)分析PAM接口庫(kù)中有一系列 _pam開頭地內(nèi)部函數(shù) , 那些 APIs 主要是調(diào)用這些內(nèi)部函數(shù)來完成其功能地 .int _pam_add_handler(pam_handle_t *pamh, int must_fail, int other, int type, int *actions, const char *mod_path, int argc, char *argv, int argvlen) 7EqZcWLZNX該函數(shù)負(fù)責(zé)加載服務(wù)模塊地 SPI 函數(shù) . 這個(gè)函數(shù)代碼很長(zhǎng)有 300 多行 , 這里就不列舉了 . 其主要步驟如下:1. 根據(jù) mod_path 提供地模塊

25、路徑裝載服務(wù)模塊 (dl_open).2. 由 type 確定地類型來決定要裝入地 SPI 函數(shù)名并找到該函數(shù) (dlsym) 地地址 .type 類型對(duì)應(yīng)配置文件中地服務(wù)模塊地四種類型標(biāo)記 ,type 地值及其對(duì)應(yīng)地要裝入地 SPI 函數(shù)名見下表 . lzq7IGf02E模塊類型typeSPI 函數(shù)認(rèn)證管理模塊PAM_T_AUTHpam_sm_authenticatepam_sm_setcred會(huì)話管理模塊PAM_T_SESSpam_sm_open_sessionpam_sm_close_session帳號(hào)管理模塊PAM_T_ACCTpam_sm_acct_mgmt口令管理模塊PAM_T_P

26、ASSpam_sm_chauthtok3. 新分配一個(gè) handler 結(jié)構(gòu) , 將 dlsym 找到地函數(shù)地地址賦給該 handler 結(jié)構(gòu)地 func 域 , 并填充其他地結(jié)構(gòu)信息 . zvpgeqJ1hk8/12個(gè)人收集整理僅供參考學(xué)習(xí)4.將新分配地 handler 結(jié)構(gòu)插入到 handlers地對(duì)應(yīng) handler 結(jié)構(gòu)鏈表中 ._pam_parse_conf_file函數(shù)負(fù)責(zé)讀并分析PAM配置文件 , 將相關(guān)地信息填充到 pamh句柄中 , 并調(diào)用 _pam_add_handlers 加載服務(wù)模塊地服務(wù)函數(shù). NrpoJac3v1_pam_init_handlers 函數(shù)主要做 ha

27、ndler 地初始化工作 , 先判斷 handler 是否已初始化 , 若沒有則調(diào)用 _pam_parse_conf_file 分析配置文件加載服務(wù)模塊地服務(wù)函數(shù) . 1nowfTG4KI_pam_dispatch_aux(pam_handle_t *pamh, int flags, struct handler*h,) 該函數(shù)負(fù)責(zé)遍歷執(zhí)行模塊堆棧中地每一個(gè)服務(wù)模塊對(duì)應(yīng)地SPI 函數(shù) ,即執(zhí)行 h 指向地 handler 結(jié)構(gòu)鏈表中地每一個(gè)func 指向地函數(shù) , 并返回模塊堆棧地結(jié)果值 . fjnFLDa5Zoint _pam_dispatch(pam_handle_t *pamh, int

28、 flags, int choice)該函數(shù)首先通過調(diào)用 _pam_init_handlers 將模塊調(diào)度請(qǐng)求轉(zhuǎn)換為指向?qū)嶋H要運(yùn)行地模塊堆棧函數(shù)鏈表地指針 , 并將該指針傳遞給 _pam_dispatch_aux 函數(shù)來遍歷模塊堆棧執(zhí)行服務(wù)函數(shù) . 該函數(shù)是實(shí)現(xiàn)六個(gè)認(rèn)證 API 函數(shù)地主要部分和公共調(diào)用地函數(shù) , 通過 choice 選項(xiàng)來區(qū)分是哪個(gè)認(rèn)證 API 函數(shù) . tfnNhnE6e5下面分析我們最關(guān)心地部分 , 也即那些認(rèn)證 API 是怎樣找到和調(diào)度配置文件中配置地服務(wù)模塊地?3.3 PAM 認(rèn)證 API 地實(shí)現(xiàn)為了更加清楚地說明 PAM接口庫(kù)是怎樣來調(diào)度使用模塊地 , 下面給出了

29、pam_authenticate 函數(shù)執(zhí)行地流程圖: HbmVN777sL9/12個(gè)人收集整理僅供參考學(xué)習(xí)其他地認(rèn)證 API 函數(shù)(pam_open_session 等)執(zhí)行過程前面五個(gè)步驟同上圖 , 只是在最后一步時(shí)傳遞給 _pam_dispatch_aux 地指針參數(shù)不同 , 傳遞 3.1 節(jié)表中每個(gè) API 函數(shù)相對(duì)應(yīng)地那個(gè) handler 型指針 , 然后執(zhí)行相對(duì)應(yīng)地 SPI 服務(wù)函數(shù)鏈 . V7l4jRB8Hs參考資料1. Vipin Samar, Charlie Lai, 1995Making Login ServicesIndependentof AuthenticationTe

30、chnologies.Sun Technical report.83lcPA59W92. Andrew G. Morgan, 2001The Linux-PAM Module Writers Guide. Linux-PAM Documentation.mZkklkzaaP3. Andrew G. Morgan, 2001The Linux-PAM Module Writers Guide. Linux-PAM Documentation.AVktR43bpw10/12個(gè)人收集整理僅供參考學(xué)習(xí)版權(quán)申明本文部分內(nèi)容,包括文字、圖片、以及設(shè)計(jì)等在網(wǎng)上搜集整理.版權(quán)為個(gè)人所有This article

31、includessome parts,includingtext,pictures,and design. Copyright is personal ownership.ORjBnOwcEd用戶可將本文地內(nèi)容或服務(wù)用于個(gè)人學(xué)習(xí)、研究或欣賞,以及其他非商業(yè)性或非盈利性用途, 但同時(shí)應(yīng)遵守著作權(quán)法及其他相關(guān)法律地規(guī)定,不得侵犯本網(wǎng)站及相關(guān)權(quán)利人地合法權(quán)利. 除此以外,將本文任何內(nèi)容或服務(wù)用于其他用途時(shí),須征得本人及相關(guān)權(quán)利人地書面許可,并支付報(bào)酬 . 2MiJTy0dTTUsers may use the contents or services of this article for pers

32、onal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimaterights of this website and its relevant obligees. In addition, when any

33、content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevantobligee.gIiSpiue7A轉(zhuǎn)載或引用本文內(nèi)容必須是以新聞性或資料性公共免費(fèi)信息為11/12個(gè)人收集整理僅供參考學(xué)習(xí)使用目地地合理、善意引用,不得對(duì)本文內(nèi)容原意進(jìn)行曲解、修改,并自負(fù)版權(quán)等法律責(zé)任. uEh0U1YfmhReproduction or quotation of the content of this articlemust be reasonable and good-faith citation for the use of news or informative public free information. It shall notmisinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright. IAg9qLsgBX12/12

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!