歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux安全小談 (3)

在本文中,我獎為大家介紹Linxu的安全機制(只是簡單介紹下,本人太菜,很深的的東東我也寫不出,呵呵)  1 PAM機制   PAM是一套共享庫,它提供了一個框架和一套編程接口,把認證工作從程序員那裡轉到ADMIN那裡。PAM允許ADMIN在多種認證方式之間進行選擇,能夠改變本地的認證方法而不需要重新編譯有關認證的應用程序。   PAM包括如下功能:   **加密口令   **允許隨意Shandow口令   **對用戶進行資源限制以防止DOS攻擊   **限制用戶在特定時間內從特定地點登陸   **引入概念“client plug-in agents”,使PAM支持C/S應用中的機器——機器認證成為可能。   PAM機制為一些更高級的認證方法提供了便利的基礎,在此基礎上很容易開發出例如智能卡,指紋識別認證等高技術認證方法。  2 入侵檢測系統(IDS)   這是一種比較新的技術,現在的服務器很少有安裝IDS系統的,Linux也只有最近發布的新版本才陪上這種工具。管入侵檢測系統的歷史很短,但發展卻很快,目前比較流行的入侵檢測系統有Snort、Portsentry、 Lids等。 (以後我會為大家專門介紹入侵檢測系統)   利用LINUX本身配備的工具和從INTERNET上DOWN下的工具,可以使LINUX系統具備高級的入侵檢測能力,這些能力包括:   **記錄入侵企圖,當攻擊發生時及時通知管理員;   **在規定情況的攻擊發生時,采取事先規定的措施;    **發送一些錯誤信息,比如偽裝成其他*作系統,這樣攻擊者會認為他們正在攻擊一個Windows NT 或Solaris系統。(我們可不可以說這是一種網絡欺騙技術呢?)  3 加密文件系統   加密文件系統就是將加密服務引入文件系統,從而提高計算機系統的安全性。有太多的理由需要加密文件系統,比如防止硬盤被偷竊、防止未經授權的訪問等。目前開發的LINUX中已經有多種加密文件系統,例如 CFS、TCFS、CRYPTFS等,其中比較有代表性的是TCFS,  它通過將加密服務和文件系統緊密集成,使用戶感覺不到文件的加密過程。TCFS不修改文件系統的數據結構,備份與修復以及用戶訪問保密文件的語義也不變。TCFS可以作到讓以下用戶不可讀加密文件:   **合法擁有者以外的用戶;    **用戶和遠程文件系統通信線路上的偷聽者;    **文件系統服務器的超級用戶。   對於合法用戶,訪問保密文件與訪問普通文件幾乎沒有區別。   4 安全審計   即使系統管理員十分精明地采取了各種安全措施,但是新漏洞是層出不窮的,攻擊者在漏洞被修補之前會迅速抓住機會攻破盡可能多的機器。雖然LINUX不能預測何時主機會受到攻擊,但是它可以記錄攻擊者的行蹤。LINUX系統也可以進行檢測、記錄時間信息和網絡連接情況。這些信息將被重定向到日志中備查。日志是Linux安全結構中的一項非常重要的內容,它是提供攻擊發生的唯一真實的證據(入侵者往往刪除或者偽造日志也就是這個原因)。因為現在的攻擊方法多種多樣,所以Linux提供網絡、主機和用戶級的日志信息。LINUX可以記錄以下內容:   **記錄所有系統和內核信息;    **記錄遠程用戶申請訪問哪些文件;    **記錄用戶可以控制哪些進程;    **記錄具體用戶使用的每條命令;   **記錄每一次網絡連接和它們的源IP地址、長度,有時還包括攻擊者的用戶名和使用的*作系統。  5 強制訪問控制    強制訪問控制(MAC,這個MAC可不是以台技術裡的MAC,大家一定要分清楚),是一種由系統管理員從全系統的角度定義和實施的訪問控制,它通過標記系統中的主客體,強制性地限制信息的共享和流動,使不同的用戶只能訪問到與其有關的、指定范圍的信息,從根本上防止信息的失洩密和訪問混亂的現象。    傳統的MAC實現都是基於TCSEC中定義的MLS策略,但因MLS本身存在著不少缺點(不靈活、兼容性差、難於管理等),研究人員已經提出了多種MAC策略,如DTE、RBAC等。由於LINUX是一種自由*作系統,目前在其上實現強制訪問控制的就有好幾家,其中比較典型的包括SElinux、RSBAC、MAC等,采用的策略也各不相同。   NSA推出的SELinux安全體系結構稱為 Flask,在這一結構中,安全性策略的邏輯和通用接口一起封裝在與*作系統獨立的組件中,這個單獨的組件稱為安全服務器。SELinux的安全服務器定義了一種混合的安全性策略,由類型實施 (TE)、基於角色的訪問控制 (RBAC) 和多級安全(MLS) 組成。通過替換安全服務器,可以支持不同的安全策略。SELinux使用策略配置語言定義安全策略,然後通過checkpolicy 編譯成二進制形式,存儲在文件 /ss_policy中,在內核引導時讀到內核空間。這意味著安全性策略在每次系統引導時都會有所不同。策略甚至可以通過使用 security_load_policy 接口在系統*作期間更改(只要將策略配置成允許這樣的更改)。    RSBAC的全稱是Rule Set Based Access Control(基於規則集的訪問控制),它是根據Abrams和LaPadula提出的Generalized Framework for Access Control(GFAC)模型開發的,可以基於多個模塊提供靈活的訪問控制。所有與安全相關的系統調用都擴展了安全實施代碼,這些代碼調用中央決策部件,該部件隨後調用所有激活的決策模塊,形成一個綜合的決定,然後由系統調用擴展來實施這個決定。RSBAC目前包含的模塊主要有MAC、RBAC、ACL等。   6 防火牆   防火牆是在被保護網絡和因特網之間,或者在其他網絡之間限制訪問的一種部件或一系列部件。 LINUX的防火牆有以下功能:   **訪問控制,可以執行基於地址,時間和用戶的訪問控制策略,從而可以杜絕非授權的訪問,同時保護內部用戶的合法訪問不受影響。    **審計,對通過它的網絡訪問進行記錄,建立完備的日志、審計和追蹤網絡訪問記錄,並可以根據需要產生報表。    **抗攻擊,防火牆系統直接暴露在非信任網絡中,對外界來說,受到防火牆保護的內部網絡如同一個點,所有的攻擊都是直接針對它的,該點稱為堡壘機,因此要求堡壘機具有高度的安全性和抵御各種攻擊的能力。    **其他附屬功能,如與審計相關的報警和入侵檢測,與訪問控制相關的身份驗證、加密和認證,甚至VPN等  ########################################################################  ########################################################################    補上一篇作為對PAM機制的深入了解:   使用PAM進行統一身份的認證    發布日期:2000-8-8     來源:Bricks Team ; 作者:bricks     PAM是 PLUGGABLE AUTHENTICATION MODULES 的縮寫.可插入的認證模塊(並不是Linux指的模塊)用於實現應用程序的認證機制,是程序員或管理員不需要重新編寫或編譯程序就可以改變認證機制.     在linux它已經被廣泛的應用了, 例如: /etc/securitty /etc/onlogin/etc/FTPusers 實際上都是給它用的.你在登陸的時候的輸入密碼和你修改密碼時也都用的是它./etc/pam.conf和/etc/pam/* 都是它的配置文件.     它最大的優點是它的彈性和可擴充性. 你可以隨意修改認證機制, 按你的實際需要來定制系統.你了解後就會非常清楚了.     DESIGN GOALS(設計目標)     (a) 管理員可以選擇認證方式, 從簡單的密碼到智能卡系統.     (b) 可以為不同的程序配置不同的認證機制.如 使telnet使用 S/Key認證.     而本機的 login 缺使用一般的 UNIX passWord.     (c) 支持程序的顯示方式的需求. 如login 需要基於終端的顯示, 而dtlogin     需要 X 顯示, 而`ftp' 和 `telnet'需要透過網絡來認證.   (d) 支持為一個程序配置同時使用多種認證機制.   (e) 可是用戶在使用多種認證機制時,不必為同一個密碼敲入多次.   (f) 可是用戶在認真時需要輸入多個密碼.   (g) 當底層的認證機制改變時上層軟件不需要修改.   (h) 結構為system authentication提供一個 _pluggable_ model.   (i) 必須能滿足現有的服務需要.     4. OVERVIEW OF THE PAM FRAMEWORK (縱覽PAM的框架)其核心實際上是一些庫函數. 你寫的應用程序要調用它們.PAM為你提供了一套入口(the front end). 而這套函數互調用 特定認證機制所定義的模塊   (the back end).     簡單的說是這樣的: 你調用一個函數僅僅告訴它你要認正,這就足夠了.至於用那一種機制來認證是由配置文件規定的. 你只需要看一看返回值就知道認證是否成功了. 對於開發應用程序的人來說只需要記住幾個函數.   ftp telnet login (Applications)         +--------+--------+    +-----+-----+   PAM API <-- pam.conf file  +-----+-----+    +--------+--------+  UNIX Kerberos Smart Cards (Mechanisms)  Figure 1: 基本的 PAM 結構PAM的功能被分為四個部分: (1) authentication(認證), (2)account(賬號管理), (3) session (對話管理), 和 (4) password (密碼管理).這四個東東都是什麼呢?    (a) Authentication management:    包括 `pam_authenticate()' 來認證用戶, `pam_setcred()' 來設置刷新和銷毀用戶的 credentials.    (b) Account management:    包括 `pam_acct_mgmt()' 來檢查用的賬號是否還有效.可以被用來檢查用戶是否超時或賬號是否過期.    (c) Session management:    包括 `pam_open_session()' 和 `pam_close_session()' 用於對話過程的管理. 例如: 可以用來紀錄用戶的連接時間. 一次telnet過程實際上也是一個session.    (d) Password management:`pam_chauthtok()' 用來修該密碼.    程序通過調用 `pam_start()'和 `pam_end()' 來開始或結束一次PAM 事務.`pam_get_item()' 和 `pam_set_item()' 讀寫有關事務的信息.可以用`pam_strerror()'來取得錯誤信息.    如何配置你的系統呢?    pam.conf的一個例子:  #服務名 模塊類型 控制標志 模塊的名字 選項  #------- ----------- ------------ ----------- -------  login auth required pam_unix_auth.so nowarn  login session required pam_unix_session.so  login account required pam_unix_account.so  ftp auth required pam_skey_auth.so debug  ftp session required pam_unix_session.so  telnet session required pam_unix_session.so  login password required pam_unix_passwd.so  passwd password required pam_unix_passwd.so  OTHER auth required pam_unix_auth.so  OTHER session required pam_unix_session.so  OTHER account required pam_unix_account.so  `OTHER' 被用來為沒有它數指定的服務用的.    選項是隨著模塊的參數.為一個服務是可以指定多個auth模塊的.它們一次被調用來驗證用戶的身份.這叫做 Stacked Modules.    下面的例子為LOGIN指定了三個模塊.  login    +--------+--------+     session auth account     +--+--+ +--+--+ +--+--+   PAM PAM PAM   +--+--+ +--+--+ +--+--+     UNIX UNIX UNIX  session auth account    Kerberos  auth    RSA  auth  Figure 2: Stacking With the PAM Architecture  pam.conf中的 `控制標志' 實際上是指明這些 Stacked module 的工作方式.    它可取的值如下:  (a) `required':    該模塊的讓正必須通過,失敗者立即返回錯誤信息.  (b) `optional':    表示可以忽略它的錯誤而繼續下面一個模塊.  (c) `sufficient':    表明該模塊的讓正已經是足夠了,下面的模塊就不用調用了.立即返回成功的消息.    Password-Mapping 密碼的映射多層的模塊認證可能會需要多個密碼. 則會使用戶感到厭煩.一簡單的方法是是用戶使用同一個密碼而透過mapping機制來加強安全性. 其實是通過一個密碼來產生另一個密碼,使一個密碼可被多個模塊使用. 當然要保證第一個密碼是強壯的.    auth的模塊多有下列 `選項':    (a) `use_first_pass':    使用第一個模塊要求輸入的密碼.不再向用戶提示要密碼.    (b) `try_first_pass':    先試著使用第一個模塊要求輸入的密碼, 不對再要求用戶輸入.    (c) `use_mapped_pass':    使用 password-mapping 來得到密碼, 不再向用戶提示要密碼.    (d) `try_mapped_pass':    先試著使用 password-mapping 來得到密碼, 不對再向用戶提示要密碼.    下面的例子可以看懂了吧:  pam.conf  login auth required pam_unix.so debug  login auth required pam_kerb.so use_mapped_pass  login auth optional pam_rsa.so use_first_pass    這種設計使你沒有辦法來知道執行的具體情況. 當然它也是與應用程序無關的.  Notes:    在linux下, 也可以用/etc/pam.d中的文件來配置.這些文件的格式pam.conf類似,只是沒有服務名. 其服務名就是它的文件名.入上述的login也可以配置如下:  /etc/pam.d/login  auth required pam_unix.so debug  auth required pam_kerb.so use_mapped_pass  auth optional pam_rsa.so use_first_pass  APPENDIX A. PAM API'S  A.1. Framework Layer API's  int  pam_start(  char *service_name, // pam.conf中的服務的名字  char *user, // 用戶名  strUCt pam_conv *pam_conversation,  // 一個用於互交的函數  pam_handle_t **pamh // 一個句柄  );  `pam_start()' 用於初始化一次pam事務  PAM modules 透過struct pam_conv *pam_conversation中定義的函數來與應用程序通信.  int  pam_end(  pam_handle_t *pamh,  int pam_status //上一個pam函數的返回值  );  pam_end()' 結束一次PAM 事務, 釋放相關的內存.  int  pam_set_item(  pam_handle_t *pamh,  int item_type,  void *item  );  int  pam_get_item(  pam_handle_t *pamh,  int item_type,  void **item  );  `pam_get_item()' 和 `pam_set_item()' 用於一些特殊處理.讀一些信息.  Table 5: Possible values for Item_type  Item Name Des cription  PAM_SERVICE The service name  PAM_USER The user name  PAM_TTY The tty name  PAM_RHOST The remote host name  PAM_CONV The pam_conv structure  PAM_AUTHTOK The authentication token (password)  PAM_OLDAUTHTOK The old authentication token  PAM_RUSER The remote user name  char *  pam_strerror(  int errnum  );  int  pam_set_data(  pam_handle_t *pamh,  char *module_data_name,  char *data,  (*cleanup)(pam_handle_t *pamh, char *data,  int error_status)  );  int  pam_get_data(  pam_handle_t *pamh,  char *module_data_name,  void **datap  );    用於讀取與模塊相關的數據.  A.2. Authentication API's  int  pam_authenticate(  pam_handle_t *pamh,  int flags  );  int  pam_setcred(  pam_handle_t *pamh,  int flags  );  A.3. Account Management API  int  pam_acct_mgmt(  pam_handle_t *pamh,  int flags  );  A.4. Session Management API's  int  pam_open_session(  pam_handle_t *pamh,  int flags  );  int  pam_close_session(  pam_handle_t *pamh,  int flags  );  A.5. Password Management API's  int  pam_chauthtok(  pam_handle_t *pamh,  int flags  );  APPENDIX B. SAMPLE PAM APPLICATION  /*  /etc/pam.conf  check_user auth required /lib/security/pam_unix_auth.so  check_user account required /lib/security/pam_unix_acct.so    注意要和你的系統一致redhat是這樣    編譯時要這樣:  gcc check.c -ldl -lpam -lpam_misc -o check_user  */  #include  #include  #include  static struct pam_conv conv = {  misc_conv, //定義在pam_misc.h中, 方便你編程  NULL  };  int main(int argc, char *argv[])  {  pam_handle_t *pamh=NULL;  int retval;  const char *user="nobody";  if(argc == 2) {  user = argv[1];  }  if(argc > 2) {  fprintf(stderr, "Usage: check_user [username]\n");  exit(1);  }  retval = pam_start("check_user", user, &conv, &pamh);  /* 開始 */  if (retval == PAM_SUCCESS)  retval = pam_authenticate(pamh, 0);  /* 認證是不是該用戶? 提示你輸入一個密碼 */  if (retval == PAM_SUCCESS)  retval = pam_acct_mgmt(pamh, 0);  /* 賬號是否有效? */  if (retval == PAM_SUCCESS) {  fprintf(stdout, "Authenticated\n");  } else {  fprintf(stdout, "Not Authenticated\n");  }  if (pam_end(pamh,retval) != PAM_SUCCESS) {  /* 結束 */  pamh = NULL;  fprintf(stderr, "check_user: failed to release authenticator\n");  exit(1);  }  return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */  }  




 



Copyright © Linux教程網 All Rights Reserved