91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LINUX PAM驗證機制是什么

發布時間:2021-10-22 11:01:05 來源:億速云 閱讀:143 作者:柒染 欄目:云計算

今天就跟大家聊聊有關LINUX PAM驗證機制是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一.PAM簡介

  Linux-PAM(  linux可插入認證模塊)是一套共享庫,使本地系統管理員可以隨意選擇程序的認證方式.

  換句話說,不用(重新編寫和)重新編譯一個包含PAM功能的應用程序,就可以改變它使用的認證機制.

  這種方式下,就算升級本地認證機制,也不用修改程序.

  PAM使用配置文件/etc/pam.conf(或/etc/pam.d/下的文件),來管理對程序的認證方式.應用程序調用相應的配置文件,從而調用本地的認證模塊.模塊放置在/lib/security下,以加載動態庫的形式進行調用(dlopen(3)).

  像我們使用su命令時,系統會提示你輸入root用戶的密碼.這就是su命令通過調用PAM模塊實現的.

    二. PAM的配置文件介紹

  1.PAM配置文件的格式

  PAM配置文件有兩種寫法: 一種是寫在/etc/pam.conf中.格式如下:

  ftpd auth required pam_unix.so nullok

  ftpd:表示服務名,即針對哪一個服務進行的認證配置.

  required:為模塊類型.PAM有四中模塊類型,分別代表不同的任務類型.

  pam_unix.so:為模塊路徑.即要調用模塊的位置.

  nullok:為模塊參數,即傳遞給模塊的參數.

  另一種寫法是,將PAM配置文件放到/etc/pam.d/目錄下,使用應用程序名作為配置文件名.如:

  vsftpd,login等.配置文件的格式與pam.conf類似,只是少了最左邊的服務名列.如:/etc/pam.d/cups

  #%PAM-1.0

  auth    required        pam_stack.so service=system-auth

  account required        pam_stack.so service=system-auth

  2.PAM的模塊類型

  Linux-PAM有四種模塊類型,分別代表四種不同的任務.它們是:認證管理,賬號管理,會話管理和密碼管理.一個類型可能有多行,它們按順序依次由PAM模塊調用.

  auth

  用來對用戶的身份進行識別.如:提示用戶輸入密碼,或判斷用戶是否為root等.

  account

  對帳號的各項屬性進行檢查.如:是否允許登錄,是否達到最大用戶數,或是root用戶是否允許在這個終端登錄等.

  session

  這個模塊用來定義用戶登錄前的,及用戶退出后所要進行的操作.如:登錄連接信息,用戶數據的打開與關閉,掛載文件系統等.

  password

  使用用戶信息來更新.如:修改用戶密碼.

  3.PAM的控制標記

  PAM使用控制標記來處理和判斷各個模塊的返回值.

  required

  這個標記表示需要模塊返回一個成功值.如果返回失敗,則繼續進行同類型的下一個操作,當所有此類型的模塊都執行完后.才返回失敗值.

  requisite

  與required相似,但是如果這個模塊返回失敗,則立刻向應用程序返回失敗,表示此類型失敗.

  不再進行同類型后面的操作.

  sufficient

  如果此模塊返回成功,則直接向應用程序返回成功,表示此類型成功.不再進行同類型后面的操作.如果失敗,也不會影響這個類型的返回值.

  optional

  使用這個標記的模塊,將不進行成功與否的返回.一般返回一個PAM_IGNORE(忽略).

  4.模塊路徑

  模塊路徑.即要調用模塊的位置. 一般保存在/lib/security/下,如: pam_unix.so同一個模塊,可以出現在不同的類型中.它在不同的類型中所執行的操作都不相同.這是由于每個模塊針對不同的模塊類型,編制了不同的執行函數.

  5.模塊參數

  模塊參數,即傳遞給模塊的參數.參數可以有多個,之間用空格分隔開,如:

  password   required   pam_unix.so nullok obscure min=4 max=8 md5

三.編寫PAM配置文件

  1.PAM模塊介紹

  pam_unix.so模塊:

  auth類型: 提示用戶輸入密碼,并與/etc/shadow文件相比對.匹配返回0(PAM_SUCCESS).

  account類型: 檢查用戶的賬號信息(包括是否過期等).帳號可用時,返回0.

  password類型: 修改用戶的密碼. 將用戶輸入的密碼,作為用戶的新密碼更新shadow文件pam_cracklib.so模塊:

  password類型: 這個模塊可以插入到一個程序的密碼棧中,用于檢查密碼的強度.

  這個模塊的動作是提示用戶輸入密碼,并與系統中的字典進行比對,檢查其強度.

  pam_loginuid.so模塊:

  session類型:用來設置已通過認證的進程的uid.以使程序通過正常的審核(audit).

  pam_securetty.so模塊:

  auth類型: 如果用戶要以root登錄時,則登錄的tty必須在在/etc/securetty中法之前.

  pam_rootok.so模塊:

  auth類型: pam_rootok模塊用來認證用戶id是否為0.為0返回”PAM_SUCCESS”.

  pam_console.so模塊:

  session類型: 當用戶登錄到終端時,改變終端文件文件的權限.在用戶登出后,再將它們修改回來.

  pam_permit.so模塊:

  auth,account,password,session類型: pam_permit模塊任何時候都返回成功.

  pam_env.so模塊 :

  auth類型: pam_env允許設置環境變量.默認下,若沒有指定文件,將依據/etc/security/pam_env.conf進行環境變量的設置.

  pam_xauth.so模塊:

  session類型: pam_xauth用來在用戶之間轉發xauth-key.

  如果不進行pam_xauth,當用戶調用su成為另一個用戶時,這個用戶將不可以再訪問原來用戶的X顯示,因為新用戶沒有訪問顯示的key.pam_xauth解決了當會話建立時,從原始用戶到目標用戶轉發key和用戶退出時銷毀key的問題.

  實驗:

  注銷/etc/pam.d/su中的"session    optional     /lib/security/$ISA/pam_xauth.so"行在桌面終端執行su切換到另一個用戶時,執行xterm會報錯,提示無法訪問DISPLAY.

  刪除注釋后,再使用su切換到另一個用戶時,執行xterm,會正常打開一個xterm終端窗口.

  pam_stack.so模塊:

  auth,account,password,session: pam_stack可以調用另一個服務.也就是多個服務可以包含到一個設置中.當需要修改時,只修改一個文件就可以了.

  pam_warn.so模塊:

  auth,account,password,session: pam_warn用來記錄服務,終端,用戶,遠程用戶和遠程主機的信息到系統日志.模塊總是返回PAM_IGNORE,意指不希望影響到認證處理.

  2.編寫PAM配置文件

  以root身份執行: # vi /etc/pam.d/pamtest

  #提示用戶輸入密碼

  auth     required   pam_unix.so

  # 驗證用戶賬號是否可用

  account  required   pam_unix.so

  # 向系統日志輸出一條信息

  account  required   pam_warn.so

四.基于PAM機制的應用程序

  1.編寫C源碼

  #include <security/pam_appl.h>

  #include <security/pam_misc.h>

  #include <security/pam_modules.h>

  #include <stdio.h>

  /* 文件pamtest.c

  此程序從命令行接收一個用戶名作為參數,然后對這個用戶名進行auth和account驗證.

  */

  // 定義一個pam_conv結構,用于與pam通信

  static struct pam_conv conv = {

  misc_conv,

  NULL

  };

  // 主函數

  int main(int argc, char *argv[])

  {

  pam_handle_t *pamh=NULL;

  int retval;

  const char *user="nobody";

  const char *s1=NULL;

  if(argc == 2)

  user = argv[1];

  else

  exit(1);

  if(argc > 2) {

  fprintf(stderr, "Usage: pamtest0 [username]\n");

  exit(1);

  }

  printf("user: %s\n",user);

  retval = 0;

  //調用pamtest配置文件

  retval = pam_start("pamtest", user, &conv, &pamh);

  if (retval == PAM_SUCCESS)

  //進行auth類型認證

  retval = pam_authenticate(pamh, 0);    /* is user really user? */

  else {

  //如果認證出錯,pam_strerror將輸出錯誤信息.

  printf("pam_authenticate(): %d\n",retval);

  s1=pam_strerror( pamh, retval);

  printf("%s\n",s1);

  }

  if (retval == PAM_SUCCESS)

  //進行account類型認證

  retval = pam_acct_mgmt(pamh, 0);       /* permitted access? */

  else {

  printf("pam_acct_mgmt() : %d\n",retval);

  s1=pam_strerror( pamh, retval);

  printf("%s\n",s1);

  }

/* This is where we have been authorized or not. */

  if (retval == PAM_SUCCESS) {

  fprintf(stdout, "Authenticated\n");

  } else {

  fprintf(stdout, "Not Authenticated\n");

  }

  if (pam_end(pamh,retval) != PAM_SUCCESS) {     /* close Linux-PAM */

  pamh = NULL;

  fprintf(stderr, "pamtest0: failed to release authenticator\n");

  exit(1);

  }

  return ( retval == PAM_SUCCESS ? 0:1 );       /* indicate success */

  }

  //END

  2.編譯

  $ cc -o pamtest pamtest.c -lpam -lpam_misc -ldl

  3.編寫PAM配置文件

  以root身份執行: vi /etc/pam.d/pamtest

  auth  required  /lib/security/pam_unix.so

  account required /lib/security/pam_unix.so

  4. 修改可執行程序權限

  由于pam_unix.so需要訪問/etc/shadow和/etc/passwd文件,所以要給pamtest文件附上SUID權限.

  # chown root.root pamtest

  # chmod 111 pamtest

  # ls pamtest

  # ls pamtest -hl

  ---s--x--x 1 root root 12K 2007-07-16 01:52 pamtest

  5.執行

  pamtest程序通過pam_unix.so,先對用戶的密碼進行驗證,然后對用戶的賬號信息進行驗證.

  以普通用戶身份執行,輸入錯誤的maj密碼時.

    maj@m2-u:01:52:09/var/tmp$ ./pamtest maj

  user: maj

  Password:

  pam_acct_mgmt() : 7

  Authentication failure

  Not Authenticated

  輸入正確的密碼時

    maj@m2-u:01:54:44/var/tmp$ ./pamtest maj

  user: maj

  Password:

  Authenticated

  輸入錯誤的root密碼時

    maj@m2-u:01:58:37/var/tmp$ ./pamtest root

  user: root

  Password:

  pam_acct_mgmt() : 7

  Authentication failure

  Not Authenticated

    maj@m2-u:01:59:15/var/tmp$

  輸入正確的root密碼時

    maj@m2-u:01:54:50/var/tmp$ ./pamtest root

  user: root

  Password:

  Authenticated

    maj@m2-u:01:58:37/var/tmp$

看完上述內容,你們對LINUX PAM驗證機制是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘潭市| 清水河县| 义乌市| 竹北市| 内丘县| 宁化县| 黔西县| 象州县| 金川县| 淮南市| 宜君县| 兰考县| 临沧市| 镇江市| 固始县| 嘉鱼县| 平南县| 阜新| 闵行区| 将乐县| 三亚市| 安国市| 富裕县| 泉州市| 泰安市| 开化县| 阜平县| 思南县| 射阳县| 会宁县| 晋宁县| 辉县市| 马边| 周口市| 遂昌县| 蒙自县| 长乐市| 邻水| 东城区| 宁波市| 黔西县|